@@ -14,12 +14,12 @@ This document describes the changes and updates that have been made in version 2
|
|||||||
- `EN_LEAK_AREA` and `EN_LEAK_EXPAN` can be used with the functions `EN_getlinkvalue` and `EN_setlinkvalue` to retrieve and assign values for a pipe's leak area and expansion properties.
|
- `EN_LEAK_AREA` and `EN_LEAK_EXPAN` can be used with the functions `EN_getlinkvalue` and `EN_setlinkvalue` to retrieve and assign values for a pipe's leak area and expansion properties.
|
||||||
- `EN_LINK_LEAKAGE` can be used with `EN_getlinkvalue` to retrieve a pipe's leakage rate at a given point in time.
|
- `EN_LINK_LEAKAGE` can be used with `EN_getlinkvalue` to retrieve a pipe's leakage rate at a given point in time.
|
||||||
- `EN_LEAKAGEFLOW` can be used with `EN_getnodevalue` to retrieve the leakage demand generated at a node from all its connecting pipes at a given point in time.
|
- `EN_LEAKAGEFLOW` can be used with `EN_getnodevalue` to retrieve the leakage demand generated at a node from all its connecting pipes at a given point in time.
|
||||||
- `EN_LEAKAGELOSS` can be used with `EN_getstatistic` to retrieve the the total leakage loss in the system at a given point in time as a percentage of total flow entering the system.
|
- `EN_LEAKAGELOSS` can be used with `EN_getstatistic` to retrieve the total leakage loss in the system at a given point in time as a percentage of total flow entering the system.
|
||||||
|
|
||||||
- Support has been added for reading the `[TAGS]` section of an EPANET input file. In addition:
|
- Support has been added for reading the `[TAGS]` section of an EPANET input file. In addition:
|
||||||
- A newly added `EN_settag` function will assign a Tag to a node or link.
|
- A newly added `EN_settag` function will assign a Tag to a node or link.
|
||||||
- A newly added `EN_gettag` function will retrieve a node or link's Tag.
|
- A newly added `EN_gettag` function will retrieve a node or link's Tag.
|
||||||
- The exisitng `EN_saveinpfile` will include saving all node and link tags to file.
|
- The existing `EN_saveinpfile` will include saving all node and link tags to file.
|
||||||
- A new Flow Balance Report has been added to end of a simulation run's Status Report that lists the various components of the system's total inflow and outflow over the simulation period. It also displays the ratio of outflow to inflow as a check on flow continuity.
|
- A new Flow Balance Report has been added to end of a simulation run's Status Report that lists the various components of the system's total inflow and outflow over the simulation period. It also displays the ratio of outflow to inflow as a check on flow continuity.
|
||||||
|
|
||||||
- A new type of valve, a Positional Control Valve (PCV), was added. It uses a valve characteristic curve to relate its loss coefficient to a percentage open setting (parameter - `EN_PCV`).
|
- A new type of valve, a Positional Control Valve (PCV), was added. It uses a valve characteristic curve to relate its loss coefficient to a percentage open setting (parameter - `EN_PCV`).
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ Public Const EN_INITFLOW = 10 ' Re-initialize flow flag
|
|||||||
Public Const EN_SAVE_AND_INIT = 11
|
Public Const EN_SAVE_AND_INIT = 11
|
||||||
|
|
||||||
Public Const EN_CONST_HP = 0 ' Constant horsepower pump curve
|
Public Const EN_CONST_HP = 0 ' Constant horsepower pump curve
|
||||||
Public Const EN_POWER_FUNC = 1 ' Power function pump cuve
|
Public Const EN_POWER_FUNC = 1 ' Power function pump curve
|
||||||
Public Const EN_CUSTOM = 2 ' User-defined custom pump curve
|
Public Const EN_CUSTOM = 2 ' User-defined custom pump curve
|
||||||
Public Const EN_NOCURVE = 3 ' No pump curve
|
Public Const EN_NOCURVE = 3 ' No pump curve
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ set of thread safe API functions that allows one to run concurrent analyses on
|
|||||||
multiple EPANET projects can be found in the epanet2_2.h header file. The two
|
multiple EPANET projects can be found in the epanet2_2.h header file. The two
|
||||||
APIs share the same function names and arguments with the difference being that
|
APIs share the same function names and arguments with the difference being that
|
||||||
the thread safe functions use the prefix "EN_" and include an extra argument that
|
the thread safe functions use the prefix "EN_" and include an extra argument that
|
||||||
represents the EPANET project being analyzed. To avoid unneccesary repetition,
|
represents the EPANET project being analyzed. To avoid unnecessary repetition,
|
||||||
only the thread safe API functions have been documented. To see a description of
|
only the thread safe API functions have been documented. To see a description of
|
||||||
a legacy style API function declared here please refer to its complementary named
|
a legacy style API function declared here please refer to its complementary named
|
||||||
function in epanet2_2.h.
|
function in epanet2_2.h.
|
||||||
|
|||||||
@@ -754,7 +754,7 @@ typedef struct Project *EN_Project;
|
|||||||
int DLLEXPORT EN_getoption(EN_Project ph, int option, double *out_value);
|
int DLLEXPORT EN_getoption(EN_Project ph, int option, double *out_value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Sets the value for an anlysis option.
|
@brief Sets the value for an analysis option.
|
||||||
@param ph an EPANET project handle.
|
@param ph an EPANET project handle.
|
||||||
@param option a type of analysis option (see @ref EN_Option).
|
@param option a type of analysis option (see @ref EN_Option).
|
||||||
@param value the new value assigned to the option.
|
@param value the new value assigned to the option.
|
||||||
|
|||||||
@@ -447,7 +447,7 @@ should be taken if the node or link being deleted appears in any simple or rule-
|
|||||||
controls or if a deleted node has any links connected to it.
|
controls or if a deleted node has any links connected to it.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
EN_UNCONDITIONAL = 0, //!< Delete all controls and connecing links
|
EN_UNCONDITIONAL = 0, //!< Delete all controls and connecting links
|
||||||
EN_CONDITIONAL = 1 //!< Cancel object deletion if it appears in controls or has connecting links
|
EN_CONDITIONAL = 1 //!< Cancel object deletion if it appears in controls or has connecting links
|
||||||
} EN_ActionCodeType;
|
} EN_ActionCodeType;
|
||||||
|
|
||||||
|
|||||||
22
src/epanet.c
22
src/epanet.c
@@ -1019,7 +1019,7 @@ int DLLEXPORT EN_getversion(int *version)
|
|||||||
|
|
||||||
int DLLEXPORT EN_geterror(int errcode, char *errmsg, int maxLen)
|
int DLLEXPORT EN_geterror(int errcode, char *errmsg, int maxLen)
|
||||||
/*----------------------------------------------------------------
|
/*----------------------------------------------------------------
|
||||||
** Input: errcode = an error or warnng code
|
** Input: errcode = an error or warning code
|
||||||
** maxLen = maximum characters that errmsg can hold
|
** maxLen = maximum characters that errmsg can hold
|
||||||
** Output: errmsg = text of error/warning message
|
** Output: errmsg = text of error/warning message
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
@@ -1283,7 +1283,7 @@ int DLLEXPORT EN_setoption(EN_Project p, int option, double value)
|
|||||||
// All other option values must be non-negative
|
// All other option values must be non-negative
|
||||||
if (value < 0.0) return 213;
|
if (value < 0.0) return 213;
|
||||||
|
|
||||||
// Process the speficied option
|
// Process the specified option
|
||||||
switch (option)
|
switch (option)
|
||||||
{
|
{
|
||||||
case EN_TRIALS:
|
case EN_TRIALS:
|
||||||
@@ -1920,7 +1920,7 @@ int DLLEXPORT EN_addnode(EN_Project p, const char *id, int nodeType, int *index)
|
|||||||
// Check for valid node type
|
// Check for valid node type
|
||||||
if (nodeType < EN_JUNCTION || nodeType > EN_TANK) return 251;
|
if (nodeType < EN_JUNCTION || nodeType > EN_TANK) return 251;
|
||||||
|
|
||||||
// Grow node-related arrays to accomodate the new node
|
// Grow node-related arrays to accommodate the new node
|
||||||
size = (net->Nnodes + 2) * sizeof(Snode);
|
size = (net->Nnodes + 2) * sizeof(Snode);
|
||||||
net->Node = (Snode *)realloc(net->Node, size);
|
net->Node = (Snode *)realloc(net->Node, size);
|
||||||
size = (net->Nnodes + 2) * sizeof(double);
|
size = (net->Nnodes + 2) * sizeof(double);
|
||||||
@@ -3345,7 +3345,7 @@ int DLLEXPORT EN_addlink(EN_Project p, const char *id, int linkType,
|
|||||||
if (errcode) return errcode;
|
if (errcode) return errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grow link-related arrays to accomodate the new link
|
// Grow link-related arrays to accommodate the new link
|
||||||
net->Nlinks++;
|
net->Nlinks++;
|
||||||
p->parser.MaxLinks = net->Nlinks;
|
p->parser.MaxLinks = net->Nlinks;
|
||||||
n = net->Nlinks;
|
n = net->Nlinks;
|
||||||
@@ -3364,7 +3364,7 @@ int DLLEXPORT EN_addlink(EN_Project p, const char *id, int linkType,
|
|||||||
if (linkType <= PIPE) net->Npipes++;
|
if (linkType <= PIPE) net->Npipes++;
|
||||||
else if (linkType == PUMP)
|
else if (linkType == PUMP)
|
||||||
{
|
{
|
||||||
// Grow pump array to accomodate the new link
|
// Grow pump array to accommodate the new link
|
||||||
net->Npumps++;
|
net->Npumps++;
|
||||||
size = (net->Npumps + 1) * sizeof(Spump);
|
size = (net->Npumps + 1) * sizeof(Spump);
|
||||||
net->Pump = (Spump *)realloc(net->Pump, size);
|
net->Pump = (Spump *)realloc(net->Pump, size);
|
||||||
@@ -3386,7 +3386,7 @@ int DLLEXPORT EN_addlink(EN_Project p, const char *id, int linkType,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Grow valve array to accomodate the new link
|
// Grow valve array to accommodate the new link
|
||||||
net->Nvalves++;
|
net->Nvalves++;
|
||||||
size = (net->Nvalves + 1) * sizeof(Svalve);
|
size = (net->Nvalves + 1) * sizeof(Svalve);
|
||||||
net->Valve = (Svalve *)realloc(net->Valve, size);
|
net->Valve = (Svalve *)realloc(net->Valve, size);
|
||||||
@@ -5703,7 +5703,7 @@ int DLLEXPORT EN_setpremisestatus(EN_Project p, int ruleIndex, int premiseIndex,
|
|||||||
** Input: ruleIndex = rule index
|
** Input: ruleIndex = rule index
|
||||||
** premiseIndex = premise index
|
** premiseIndex = premise index
|
||||||
** status = object status being tested against
|
** status = object status being tested against
|
||||||
** (see EN_RuleStatus))
|
** (see EN_RuleStatus)
|
||||||
** Output: none
|
** Output: none
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
** Purpose: sets the status of an object being tested against
|
** Purpose: sets the status of an object being tested against
|
||||||
@@ -5755,7 +5755,7 @@ int DLLEXPORT EN_getthenaction(EN_Project p, int ruleIndex, int actionIndex,
|
|||||||
** Input: ruleIndex = rule index
|
** Input: ruleIndex = rule index
|
||||||
** actionIndex = index of a rule's THEN actions
|
** actionIndex = index of a rule's THEN actions
|
||||||
** Output: linkIndex = index of link appearing in the action
|
** Output: linkIndex = index of link appearing in the action
|
||||||
** status = status assigned to the link (see EN_RuleStatus))
|
** status = status assigned to the link (see EN_RuleStatus)
|
||||||
** setting = setting assigned to the link
|
** setting = setting assigned to the link
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
** Purpose: retrieves the properties of a rule's THEN action
|
** Purpose: retrieves the properties of a rule's THEN action
|
||||||
@@ -5783,7 +5783,7 @@ int DLLEXPORT EN_setthenaction(EN_Project p, int ruleIndex, int actionIndex,
|
|||||||
** Input: ruleIndex = rule index
|
** Input: ruleIndex = rule index
|
||||||
** actionIndex = index of a rule's THEN actions
|
** actionIndex = index of a rule's THEN actions
|
||||||
** linkIndex = index of link appearing in the action
|
** linkIndex = index of link appearing in the action
|
||||||
** status = status assigned to the link (see EN_RuleStatus))
|
** status = status assigned to the link (see EN_RuleStatus)
|
||||||
** setting = setting assigned to the link
|
** setting = setting assigned to the link
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
** Purpose: sets the properties of a rule's THEN action
|
** Purpose: sets the properties of a rule's THEN action
|
||||||
@@ -5811,7 +5811,7 @@ int DLLEXPORT EN_getelseaction(EN_Project p, int ruleIndex, int actionIndex,
|
|||||||
** Input: ruleIndex = rule index
|
** Input: ruleIndex = rule index
|
||||||
** actionIndex = index of a rule's ELSE actions
|
** actionIndex = index of a rule's ELSE actions
|
||||||
** Output: linkIndex = index of link appearing in the action
|
** Output: linkIndex = index of link appearing in the action
|
||||||
** status = status assigned to the link (see EN_RuleStatus))
|
** status = status assigned to the link (see EN_RuleStatus)
|
||||||
** setting = setting assigned to the link
|
** setting = setting assigned to the link
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
** Purpose: retrieves the properties of a rule's ELSE action
|
** Purpose: retrieves the properties of a rule's ELSE action
|
||||||
@@ -5839,7 +5839,7 @@ int DLLEXPORT EN_setelseaction(EN_Project p, int ruleIndex, int actionIndex,
|
|||||||
** Input: ruleIndex = rule index
|
** Input: ruleIndex = rule index
|
||||||
** actionIndex = index of a rule's ELSE actions
|
** actionIndex = index of a rule's ELSE actions
|
||||||
** linkIndex = index of link appearing in the action
|
** linkIndex = index of link appearing in the action
|
||||||
** status = status assigned to the link (see EN_RuleStatus))
|
** status = status assigned to the link (see EN_RuleStatus)
|
||||||
** setting = setting assigned to the link
|
** setting = setting assigned to the link
|
||||||
** Returns: error code
|
** Returns: error code
|
||||||
** Purpose: sets the properties of a rule's ELSE action
|
** Purpose: sets the properties of a rule's ELSE action
|
||||||
|
|||||||
@@ -507,7 +507,7 @@ void emitterheadloss(Project *pr, int i, double *hloss, double *hgrad)
|
|||||||
** Input: i = node index
|
** Input: i = node index
|
||||||
** Output: hloss = head loss across node's emitter
|
** Output: hloss = head loss across node's emitter
|
||||||
** hgrad = head loss gradient
|
** hgrad = head loss gradient
|
||||||
** Purpose: computes an emitters's head loss and gradient.
|
** Purpose: computes an emitter's head loss and gradient.
|
||||||
**-------------------------------------------------------------
|
**-------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ int hydsolve(Project *pr, int *iter, double *relerr)
|
|||||||
nextcheck = *iter + hyd->CheckFreq;
|
nextcheck = *iter + hyd->CheckFreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No convergence yet - see if its time for a periodic status
|
// No convergence yet - see if it's time for a periodic status
|
||||||
// check on pumps, CV's, and pipes connected to tank
|
// check on pumps, CV's, and pipes connected to tank
|
||||||
else if (*iter <= hyd->MaxCheck && *iter == nextcheck)
|
else if (*iter <= hyd->MaxCheck && *iter == nextcheck)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ extern char *CurveTypeTxt[];
|
|||||||
void saveauxdata(Project *pr, FILE *f)
|
void saveauxdata(Project *pr, FILE *f)
|
||||||
/*
|
/*
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
Writes auxilary data from original input file to new file.
|
Writes auxiliary data from original input file to new file.
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@@ -84,7 +84,7 @@ void saveauxdata(Project *pr, FILE *f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write line of auxilary data to file
|
// Write line of auxiliary data to file
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (sect)
|
switch (sect)
|
||||||
@@ -873,7 +873,7 @@ int saveinpfile(Project *pr, const char *fname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save auxilary data to new input file
|
// Save auxiliary data to new input file
|
||||||
fprintf(f, "\n");
|
fprintf(f, "\n");
|
||||||
saveauxdata(pr, f);
|
saveauxdata(pr, f);
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ void convert_pipe_to_node_leakage(Project *pr)
|
|||||||
** Input: none
|
** Input: none
|
||||||
** Output: none
|
** Output: none
|
||||||
** Purpose: converts pipe leakage parameters into node leakage
|
** Purpose: converts pipe leakage parameters into node leakage
|
||||||
** coefficents.
|
** coefficients.
|
||||||
**-------------------------------------------------------------
|
**-------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ int EXPORT_OUT_API ENR_close(ENR_Handle *p_handle)
|
|||||||
**
|
**
|
||||||
** Returns: Error code 0 on success, -1 on failure
|
** Returns: Error code 0 on success, -1 on failure
|
||||||
**
|
**
|
||||||
** Purpose: Close the output binary file, dellocate ENR_Handle struc
|
** Purpose: Close the output binary file, deallocate ENR_Handle struct
|
||||||
** and nullify pointer to ENR_Handle struct
|
** and nullify pointer to ENR_Handle struct
|
||||||
**
|
**
|
||||||
** NOTE: ENR_close must be called before program end
|
** NOTE: ENR_close must be called before program end
|
||||||
@@ -161,7 +161,7 @@ int EXPORT_OUT_API ENR_open(ENR_Handle p_handle, const char* path)
|
|||||||
** Returns: warning / error code
|
** Returns: warning / error code
|
||||||
** Purpose: Opens the output binary file and reads prologue and epilogue
|
** Purpose: Opens the output binary file and reads prologue and epilogue
|
||||||
**
|
**
|
||||||
** NOTE: ENR_init must be called before anyother ENR_* functions
|
** NOTE: ENR_init must be called before any other ENR_* functions
|
||||||
**-------------------------------------------------------------------------
|
**-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -588,8 +588,8 @@ int linkoutput(Project *pr, int j, REAL4 *x, double ucf)
|
|||||||
|
|
||||||
case FRICTION: // Friction factor
|
case FRICTION: // Friction factor
|
||||||
// f = 2ghd/(Lu^2) where f = friction factor
|
// f = 2ghd/(Lu^2) where f = friction factor
|
||||||
// u = velocity, g = grav. accel., h = head loss
|
// u = velocity, g = grav. accel., h = head
|
||||||
//loss, d = diam., & L = pipe length
|
// loss, d = diam., & L = pipe length
|
||||||
for (i = 1; i <= net->Nlinks; i++)
|
for (i = 1; i <= net->Nlinks; i++)
|
||||||
{
|
{
|
||||||
if (net->Link[i].Type <= PIPE && ABS(hyd->LinkFlow[i]) > TINY)
|
if (net->Link[i].Type <= PIPE && ABS(hyd->LinkFlow[i]) > TINY)
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ double piperate(Project *pr, int k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute Reynolds No.
|
// Compute Reynolds No.
|
||||||
// Flow rate made consistent with how its saved to hydraulics file
|
// Flow rate made consistent with how it's saved to hydraulics file
|
||||||
q = (hyd->LinkStatus[k] <= CLOSED) ? 0.0 : hyd->LinkFlow[k];
|
q = (hyd->LinkStatus[k] <= CLOSED) ? 0.0 : hyd->LinkFlow[k];
|
||||||
a = PI * d * d / 4.0; // pipe area
|
a = PI * d * d / 4.0; // pipe area
|
||||||
u = fabs(q) / a; // flow velocity
|
u = fabs(q) / a; // flow velocity
|
||||||
@@ -772,7 +772,7 @@ void tankmix4(Project *pr, int i, double vin, double win, double vnet)
|
|||||||
vsum += vseg;
|
vsum += vseg;
|
||||||
wsum += (seg->c) * vseg;
|
wsum += (seg->c) * vseg;
|
||||||
|
|
||||||
// ... update remiaing volume to remove
|
// ... update remaining volume to remove
|
||||||
vnet -= vseg;
|
vnet -= vseg;
|
||||||
|
|
||||||
// ... if no more volume left in current segment
|
// ... if no more volume left in current segment
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ double findnodequal(Project *pr, int n, double volin,
|
|||||||
return qual->NodeQual[n];
|
return qual->NodeQual[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find quality contribued by any external chemical source
|
// Find quality contributed by any external chemical source
|
||||||
else qual->SourceQual = findsourcequal(pr, n, volout, tstep);
|
else qual->SourceQual = findsourcequal(pr, n, volout, tstep);
|
||||||
if (qual->SourceQual == 0.0) return qual->NodeQual[n];
|
if (qual->SourceQual == 0.0) return qual->NodeQual[n];
|
||||||
|
|
||||||
|
|||||||
@@ -466,7 +466,7 @@ void writemassbalance(Project *pr)
|
|||||||
** Input: none
|
** Input: none
|
||||||
** Output: none
|
** Output: none
|
||||||
** Purpose: writes water quality mass balance ratio
|
** Purpose: writes water quality mass balance ratio
|
||||||
** (Outflow + Final Storage) / Inflow + Initial Storage)
|
** (Outflow + Final Storage) / Inflow + Initial Storage
|
||||||
** to report file.
|
** to report file.
|
||||||
**-------------------------------------------------------------
|
**-------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -651,7 +651,7 @@ int sortsparse(Smatrix *sm, int n)
|
|||||||
/*
|
/*
|
||||||
**--------------------------------------------------------------
|
**--------------------------------------------------------------
|
||||||
** Input: n = number of rows in solution matrix
|
** Input: n = number of rows in solution matrix
|
||||||
** Output: returns eror code
|
** Output: returns error code
|
||||||
** Purpose: puts row indexes in ascending order in NZSUB
|
** Purpose: puts row indexes in ascending order in NZSUB
|
||||||
**--------------------------------------------------------------
|
**--------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -834,7 +834,7 @@ int linsolve(Smatrix *sm, int n)
|
|||||||
}
|
}
|
||||||
} // next j
|
} // next j
|
||||||
|
|
||||||
// Foward substitution
|
// Forward substitution
|
||||||
for (j = 1; j <= n; j++)
|
for (j = 1; j <= n; j++)
|
||||||
{
|
{
|
||||||
bj = B[j]/Aii[j];
|
bj = B[j]/Aii[j];
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ int powerfuncpump(double h0, double h1, double h2, double q1, double q2,
|
|||||||
** q1 = design flow
|
** q1 = design flow
|
||||||
** q2 = max. flow
|
** q2 = max. flow
|
||||||
** Output: *a, *b, *c = pump curve coeffs. (H = a-bQ^c),
|
** Output: *a, *b, *c = pump curve coeffs. (H = a-bQ^c),
|
||||||
** Returns 1 if sucessful, 0 otherwise.
|
** Returns 1 if successful, 0 otherwise.
|
||||||
** Purpose: computes coeffs. for a power function pump curve
|
** Purpose: computes coeffs. for a power function pump curve
|
||||||
**----------------------------------------------------------
|
**----------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user