442 lines
21 KiB
Plaintext
442 lines
21 KiB
Plaintext
/**
|
|
@defgroup Project Project Functions
|
|
These functions are used to manage a project.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Hydraulics Hydraulic Analysis Functions
|
|
These functions are used to perform a hydraulic analysis.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Quality Water Quality Analysis Functions
|
|
These functions are used to perform a water quality analysis.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Reporting Reporting Functions
|
|
These functions are used to report simulation results.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Options Analysis Options Functions
|
|
These functions are used to get and set analysis options.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Nodes Network Node Functions
|
|
These functions are used for working with network nodes.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Demands Nodal Demand Functions
|
|
These functions are used for managing nodal demands.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Links Network Link Functions
|
|
These functions are used for working with network links.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Patterns Time Pattern Functions
|
|
These functions are used for working with time patterns.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Curves Data Curve Functions
|
|
These functions are used for working with data curves.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Controls Simple Control Functions
|
|
These functions are used for working with simple conditional controls.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Rules Rule-Based Control Functions
|
|
These functions are used for working with rule-based controls.
|
|
*/
|
|
|
|
/**
|
|
@defgroup Constants Symbolic Constants
|
|
These are symbolic constants used as function arguments.
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Project
|
|
@{
|
|
@fn int EN_createproject(EN_Project *ph)
|
|
@fn int EN_deleteproject(EN_Project *ph)
|
|
@fn int EN_runproject(EN_Project ph, const char *f1, const char *f2, const char *f3, void (*pviewprog)(char *))
|
|
@fn int EN_init(EN_Project ph, const char *rptFile, const char *outFile, int unitsType, int headLossType)
|
|
@fn int EN_open(EN_Project ph, const char *inpFile, const char *rptFile, const char *binOutFile)
|
|
@fn int EN_getcount(EN_Project ph, int code, int *count)
|
|
@fn int EN_gettitle(EN_Project ph, char *line1, char *line2, char *line3)
|
|
@fn int EN_settitle(EN_Project ph, char *line1, char *line2, char *line3)
|
|
@fn int EN_saveinpfile(EN_Project ph, const char *filename)
|
|
@fn int EN_close(EN_Project ph)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Hydraulics
|
|
@{
|
|
@fn int EN_solveH(EN_Project ph)
|
|
@fn int EN_usehydfile(EN_Project ph, char *filename)
|
|
@fn int EN_openH(EN_Project ph)
|
|
@fn int EN_initH(EN_Project ph, int initFlag)
|
|
@fn int EN_runH(EN_Project ph, long *currentTime)
|
|
@fn int EN_nextH(EN_Project ph, long *tStep)
|
|
@fn int EN_saveH(EN_Project ph)
|
|
@fn int EN_savehydfile(EN_Project ph, char *filename)
|
|
@fn int EN_closeH(EN_Project ph)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Quality
|
|
@{
|
|
@fn int EN_solveQ(EN_Project ph)
|
|
@fn int EN_openQ(EN_Project ph)
|
|
@fn int EN_initQ(EN_Project ph, int saveFlag)
|
|
@fn int EN_runQ(EN_Project ph, long *currentTime)
|
|
@fn int EN_nextQ(EN_Project ph, long *tStep)
|
|
@fn int EN_stepQ(EN_Project ph, long *timeLeft)
|
|
@fn int EN_closeQ(EN_Project ph)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Reporting
|
|
@{
|
|
@fn int EN_writeline(EN_Project ph, char *line)
|
|
@fn int EN_report(EN_Project ph)
|
|
@fn int EN_clearreport(EN_Project ph)
|
|
@fn int EN_resetreport(EN_Project ph)
|
|
@fn int EN_setreport(EN_Project ph, char *reportFormat)
|
|
@fn int EN_setstatusreport(EN_Project ph, int code)
|
|
@fn int EN_getversion(int *version)
|
|
@fn int EN_geterror(int errcode, char *errmsg, int maxLen)
|
|
@fn int EN_getstatistic(EN_Project ph, int type, double* value)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Options
|
|
@{
|
|
@fn int EN_getoption(EN_Project ph, int option, double *value)
|
|
@fn int EN_setoption(EN_Project ph, int option, double value)
|
|
@fn int EN_getflowunits(EN_Project ph, int *units)
|
|
@fn int EN_setflowunits(EN_Project ph, int units)
|
|
@fn int EN_gettimeparam(EN_Project ph, int param, long *value)
|
|
@fn int EN_settimeparam(EN_Project ph, int param, long value)
|
|
@fn int EN_getqualinfo(EN_Project ph, int *qualType, char *chemName, char *chemUnits, int *traceNode)
|
|
@fn int EN_getqualtype(EN_Project ph, int *qualType, int *traceNode)
|
|
@fn int EN_setqualtype(EN_Project ph, int qualType, char *chemName, char *chemUnits, char *traceNode)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Nodes
|
|
@{
|
|
@fn int EN_addnode(EN_Project ph, char *id, int nodeType)
|
|
@fn int EN_deletenode(EN_Project ph, int index, int actionCode)
|
|
@fn int EN_getnodeindex(EN_Project ph, char *id, int *index)
|
|
@fn int EN_getnodeid(EN_Project ph, int index, char *id)
|
|
@fn int EN_setnodeid(EN_Project ph, int index, char *newid)
|
|
@fn int EN_getnodetype(EN_Project ph, int index, int *code)
|
|
@fn int EN_getnodevalue(EN_Project ph, int index, int code, double *value)
|
|
@fn int EN_setnodevalue(EN_Project ph, int index, int code, double v)
|
|
@fn int EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd, char *dmndpat)
|
|
@fn int EN_settankdata(EN_Project ph, int index, double elev, double initlvl,
|
|
double minlvl, double maxlvl, double diam, double minvol, char *volcurve)
|
|
@fn int EN_getcoord(EN_Project ph, int index, double *x, double *y)
|
|
@fn int EN_setcoord(EN_Project ph, int index, double x, double y)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Demands
|
|
@{
|
|
@fn int EN_getdemandmodel(EN_Project ph, int *type, double *pmin, double *preq, double *pexp)
|
|
@fn int EN_setdemandmodel(EN_Project ph, int type, double pmin, double preq, double pexp)
|
|
@fn int EN_getnumdemands(EN_Project ph, int nodeIndex, int *numDemands)
|
|
@fn int EN_getbasedemand(EN_Project ph, int nodeIndex, int demandIndex, double *baseDemand)
|
|
@fn int EN_setbasedemand(EN_Project ph, int nodeIndex, int demandIndex, double baseDemand)
|
|
@fn int EN_getdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int *pattIndex)
|
|
@fn int EN_setdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int patIndex)
|
|
@fn int EN_getdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName)
|
|
@fn int EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Links
|
|
@{
|
|
@fn int EN_addlink(EN_Project ph, char *id, int linkType, char *fromNode, char *toNode)
|
|
@fn int EN_deletelink(EN_Project ph, int index, int actionCode)
|
|
@fn int EN_getlinkindex(EN_Project ph, char *id, int *index)
|
|
@fn int EN_getlinkid(EN_Project ph, int index, char *id)
|
|
@fn int EN_setlinkid(EN_Project ph, int index, char *newid)
|
|
@fn int EN_getlinktype(EN_Project ph, int index, int *linkType)
|
|
@fn int EN_setlinktype(EN_Project ph, int *index, int linkType, int actionCode)
|
|
@fn int EN_getlinknodes(EN_Project ph, int index, int *node1, int *node2)
|
|
@fn int EN_setlinknodes(EN_Project ph, int index, int node1, int node2)
|
|
@fn int EN_getlinkvalue(EN_Project ph, int index, int property, double *value)
|
|
@fn int EN_setlinkvalue(EN_Project ph, int index, int property, double value)
|
|
@fn int EN_setpipedata(EN_Project ph, int index, double length, double diam, double rough, double mloss)
|
|
@fn int EN_getpumptype(EN_Project ph, int linkIndex, int *pumpType)
|
|
@fn int EN_getheadcurveindex(EN_Project ph, int pumpIndex, int *curveIndex)
|
|
@fn int EN_setheadcurveindex(EN_Project ph, int pumpIndex, int curveIndex)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Patterns
|
|
@{
|
|
@fn int EN_addpattern(EN_Project ph, char *id)
|
|
@fn int EN_getpatternindex(EN_Project ph, char *id, int *index)
|
|
@fn int EN_getpatternid(EN_Project ph, int index, char *id)
|
|
@fn int EN_getpatternlen(EN_Project ph, int index, int *len)
|
|
@fn int EN_getpatternvalue(EN_Project ph, int index, int period, double *value)
|
|
@fn int EN_setpatternvalue(EN_Project ph, int index, int period, double value)
|
|
@fn int EN_getaveragepatternvalue(EN_Project ph, int index, double *value)
|
|
@fn int EN_setpattern(EN_Project ph, int index, double *f, int len)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Curves
|
|
@{
|
|
@fn int EN_addcurve(EN_Project ph, char *id)
|
|
@fn int EN_getcurveindex(EN_Project ph, char *id, int *index)
|
|
@fn int EN_getcurveid(EN_Project ph, int index, char *id)
|
|
@fn int EN_getcurvelen(EN_Project ph, int index, int *len)
|
|
@fn int EN_getcurvetype(EN_Project ph, int index, int *type)
|
|
@fn int EN_getcurvevalue(EN_Project ph, int curveIndex, int pointIndex, double *x, double *y)
|
|
@fn int EN_setcurvevalue(EN_Project ph, int curveIndex, int pointIndex, double x, double y)
|
|
@fn int EN_getcurve(EN_Project ph, int curveIndex, char* id, int *nPoints, double **xValues, double **yValues)
|
|
@fn int EN_setcurve(EN_Project ph, int index, double *xValues, double *yValues, int nPoints)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Controls
|
|
@{
|
|
@fn int EN_addcontrol(EN_Project ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index)
|
|
@fn int EN_deletecontrol(EN_Project ph, int index)
|
|
@fn int EN_getcontrol(EN_Project ph, int index, int *type, int *linkIndex, double *setting, int *nodeIndex, double *level)
|
|
@fn int EN_setcontrol(EN_Project ph, int index, int type, int linkIndex, double setting, int nodeIndex, double level)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Rules
|
|
@{
|
|
@fn int EN_addrule(EN_Project ph, char *rule)
|
|
@fn int EN_deleterule(EN_Project ph, int index)
|
|
@fn int EN_getrule(EN_Project ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority)
|
|
@fn int EN_getruleID(EN_Project ph, int index, char* id);
|
|
@fn int EN_getpremise(EN_Project ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex,
|
|
int *variable, int *relop, int *status, double *value)
|
|
@fn int EN_setpremise(EN_Project ph, int ruleIndex, int premiseIndex,
|
|
int logop, int object, int objIndex, int variable, int relop, int status, double value)
|
|
@fn int EN_setpremiseindex(EN_Project ph, int ruleIndex, int premiseIndex, int objIndex)
|
|
@fn int EN_setpremisestatus(EN_Project ph, int ruleIndex, int premiseIndex, int status)
|
|
@fn int EN_setpremisevalue(EN_Project ph, int ruleIndex, int premiseIndex, double value)
|
|
@fn int EN_getthenaction(EN_Project ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting)
|
|
@fn int EN_setthenaction(EN_Project ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting)
|
|
@fn int EN_getelseaction(EN_Project ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting)
|
|
@fn int EN_setelseaction(EN_Project ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting)
|
|
@fn int EN_setrulepriority(EN_Project ph, int index, double priority)
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@addtogroup Constants
|
|
@{
|
|
@file epanet2_enums.h
|
|
\enum EN_CountType
|
|
\enum EN_NodeType
|
|
\enum EN_LinkType
|
|
\enum EN_PumpType
|
|
\enum EN_CurveType
|
|
\enum EN_QualityType
|
|
\enum EN_SourceType
|
|
\enum EN_ControlType
|
|
\enum EN_HeadLossType
|
|
\enum EN_NodeProperty
|
|
\enum EN_LinkProperty
|
|
\enum EN_TimeParameter
|
|
\enum EN_Option
|
|
\enum EN_FlowUnits
|
|
\enum EN_DemandModel
|
|
\enum EN_MixingModel
|
|
\enum EN_StatusReport
|
|
\enum EN_StatisticType
|
|
\enum EN_InitHydOption
|
|
\enum EN_ActionCodeType
|
|
\enum EN_AnalysisStatistic
|
|
\enum EN_RuleObject
|
|
\enum EN_RuleVariable
|
|
\enum EN_RuleOperator
|
|
\enum EN_RuleStatus
|
|
@}
|
|
*/
|
|
|
|
/**
|
|
@defgroup Files File Descriptions
|
|
|
|
These are the various files used by the Toolkit.
|
|
|
|
@section InputFile Input File
|
|
|
|
The Input file is a standard EPANET input data file that describes the system being analyzed. It can either be created external to the application being developed with the Toolkit or by the application itself. It is the first file name supplied to the @ref EN_open function. The format of the file is described in Appendix C of the <a href="https://nepis.epa.gov/Adobe/PDF/P1007WWU.pdf">EPANET 2 Users Manual</a>. A project's data associated with its Input file remains accessible until the project is closed down with the @ref EN_close or deleted with @ref EN_deleteproject.
|
|
|
|
@section ReportFile Report File
|
|
|
|
The Report file is the second file name supplied to the @ref EN_open function (or the first file name to @ref EN_init). It is used to log any error messages that occur when the Input file is being processed and to record all status messages that are generated during a hydraulic simulation. In addition, if the @ref EN_report function is called the resulting report can also be written to this file as can user-generated lines of text using the @ref EN_writeline function. The format of the report is controlled by statements placed in the [REPORT] section of the Input file and by similar statements included in calls to the @ref EN_setreport function. Only results at a specified uniform reporting time interval are written to this file.
|
|
|
|
To suppress the writing of all error and warning messages to the Report file either include the command `MESSAGES NO` in the [REPORT] section of the Input file or call the Toolkit function `EN_setreport("MESSAGES NO")`.
|
|
|
|
To route a formatted report to a different file than the Report file either include the command `FILE filename` in the [REPORT] section of the Input file or call the Toolkit function `EN_setreport("FILE filename")`, where `filename` is the name of the file to use.
|
|
|
|
@section OutputFile Output File
|
|
|
|
The Output file is an unformatted binary file used to store both hydraulic and water quality results at uniform reporting intervals (see @ref OutFileFormat). It is the third file name supplied to the @ref EN_open function (or second name to @ref EN_init). If an empty string ("") is used as its name then a scratch temporary file will be used. Otherwise the Output file will be saved after the @ref EN_close function is called. Saving this file is useful if further post-processing of the output results are needed. The function @ref EN_saveH will transfer hydraulic results to the Output file if no water quality analysis will be made. Using @ref EN_solveQ to run a water quality analysis automatically saves both hydraulic and water quality results to this file. If the @ref EN_initQ - @ref EN_runQ - @ref EN_nextQ set of functions is used to perform a water quality analysis, then results will be saved only if the `saveflag` argument of @ref EN_initQ is set to @ref EN_SAVE. Again, the need to save results to the Output file is application-dependent. If a formatted output report is to be generated using @ref EN_report, then results must first be saved to the Output file.
|
|
|
|
@section HydraulicsFile Hydraulics File
|
|
The Hydraulics file is an unformatted binary file used to store the results of a hydraulic analysis. Results for all time periods are stored, including those at intermediate times when special hydraulic events occur (e.g., pumps and tanks opening or closing because control conditions have been satisfied).
|
|
|
|
Normally it is a temporary file that is deleted after the @ref EN_deleteproject function is called. However, it will be saved if the @ref EN_savehydfile function is called before that.
|
|
|
|
Likewise, a previously saved Hydraulics file can be used if the command `HYDRAULICS USE` filename appears in the [OPTIONS] section of the input file, or if the @ref EN_usehydfile function is called.
|
|
|
|
When the Toolkit function @ref EN_solveH is used to make a hydraulic analysis, results are automatically saved to the Hydraulics file. When the @ref EN_initH - @ref EN_runH - @ref EN_nextH set of functions is used, the `initFlag` argument to @ref EN_initH determines whether results are saved or not. The need to save hydraulic results is application-dependent. They must always be saved to the Hydraulics file if a water quality analysis will follow.
|
|
|
|
*/
|
|
|
|
/**
|
|
@defgroup ErrorCodes Error Codes
|
|
|
|
| Code | Meaning |
|
|
|------|--------- |
|
|
| 0 | No error |
|
|
| 101 | Insufficient memory available |
|
|
| 102 | No network data available |
|
|
| 103 | Hydraulic solver not opened |
|
|
| 104 | No hydraulics for water quality analysis |
|
|
| 105 | Water quality solver not opened |
|
|
| 106 | No results saved to report on |
|
|
| 107 | Hydraulics supplied from external file |
|
|
| 108 | Cannot use external file while hydraulics solver is open |
|
|
| 110 | Cannot solve network hydraulic equations |
|
|
| 120 | Cannot solve water quality transport equations |
|
|
| ||
|
|
| 200 | One or more errors in an input file |
|
|
| 201 | Syntax error |
|
|
| 202 | Function call contains an illegal numeric value |
|
|
| 203 | Function call refers to an undefined node |
|
|
| 204 | Function call refers to an undefined link |
|
|
| 205 | Function call refers to an undefined time pattern |
|
|
| 206 | Function call refers to an undefined curve |
|
|
| 207 | Function call attempts to control a check valve pipe or a GPV valve |
|
|
| 209 | Function call contains an illegal node property value |
|
|
| 211 | Function call contains an illegal link property value |
|
|
| 212 | Function call refers to an undefined Trace Node |
|
|
| 213 | Function call contains an invalid option value |
|
|
| 214 | Too many characters in a line of an input file |
|
|
| 215 | Function call contains a duplicate ID label |
|
|
| 216 | Function call refers to an undefined pump |
|
|
| 217 | Invalid pump energy data |
|
|
| 219 | Illegal valve connection to tank node |
|
|
| 220 | Illegal valve connection to another valve |
|
|
| 221 | Mis-placed clause in rule-based control |
|
|
| 222 | Link assigned same start and end nodes |
|
|
| 223 | Not enough nodes in network |
|
|
| 224 | No tanks or reservoirs in network |
|
|
| 225 | Invalid lower/upper levels for tank |
|
|
| 226 | No head curve or power rating for pump |
|
|
| 227 | Invalid head curve for pump |
|
|
| 230 | Nonincreasing x-values for curve |
|
|
| 233 | Network has unconnected node |
|
|
| 240 | Function call refers to nonexistent water quality source |
|
|
| 241 | Function call refers to nonexistent control |
|
|
| 250 | Function call contains invalid format (e.g. too long an ID name) |
|
|
| 251 | Function call contains invalid parameter code |
|
|
| 253 | Function call refers to nonexistent demand category |
|
|
| 254 | Function call refers to node with no coordinates |
|
|
| 257 | Function call refers to nonexistent rule |
|
|
| 258 | Function call refers to nonexistent rule clause |
|
|
| 260 | Function call attempts to delete node assigned as a Trace Node |
|
|
| 261 | Function call attempts to delete a node or link contained in a control |
|
|
| 262 | Function call attempts to modify network structure while a solver is open |
|
|
| ||
|
|
| 301 | Identical file names used for different types of files |
|
|
| 302 | Cannot open input file |
|
|
| 303 | Cannot open report file |
|
|
| 304 | Cannot open output file |
|
|
| 305 | Cannot open hydraulics file |
|
|
| 306 | Hydraulics file does not match network data |
|
|
| 307 | Cannot read hydraulics file |
|
|
| 308 | Cannot save results to binary file |
|
|
| 309 | Cannot save results to report file |
|
|
|
|
*/
|
|
|
|
/**
|
|
@defgroup WarningCodes Warning Codes
|
|
|
|
| Code | Description |
|
|
|------|--------- |
|
|
|1 | System hydraulically unbalanced - convergence to a hydraulic solution was not achieved in the allowed number of trials |
|
|
|2 | System may be hydraulically unstable - hydraulic convergence was only achieved after the status of all links was held fixed |
|
|
|3 | System disconnected - one or more nodes with positive demands were disconnected from all supply sources |
|
|
|4 | Pumps cannot deliver enough flow or head - one or more pumps were forced to either shut down (due to insufficient head) or operate beyond the maximum rated flow |
|
|
|5 | Valves cannot deliver enough flow - one or more flow control valves could not deliver the required flow even when fully open |
|
|
|6 | System has negative pressures - negative pressures occurred at one or more junctions with positive demand |
|
|
|
|
*/
|
|
|
|
/**
|
|
@defgroup Units Parameter Units
|
|
|
|
| Parameter | US Customary | SI Metric |
|
|
|----------------|-------------------------|---------------------------|
|
|
|Concentration | mg/L or ug/L | mg/L or ug/L |
|
|
|Demand | (see Flow units) | (see Flow units) |
|
|
|Diameter (Pipes)| inches | millimeters |
|
|
|Diameter (Tanks)| feet | meters |
|
|
|Efficiency | percent | percent |
|
|
|Elevation | feet | meters |
|
|
|Emitter Coeff. | flow units @ 1 psi drop | flow units @ 1 meter drop |
|
|
|Energy | kwatt - hours | kwatt - hours |
|
|
|Flow | CFS (cubic feet / sec) | LPS (liters / sec) |
|
|
| | GPM (gallons / min) | LPM (liters / min) |
|
|
| | MGD (million gal / day) | MLD (megaliters / day) |
|
|
| | IMGD (Imperial MGD) | CMH (cubic meters / hr) |
|
|
| | AFD (acre-feet / day) | CMD (cubic meters / day) |
|
|
|Friction Factor | unitless | unitless |
|
|
|Head | feet | meters |
|
|
|Length | feet | meters |
|
|
|Minor Loss Coeff. | unitless | unitless |
|
|
|Power | horsepower | kwatts |
|
|
|Pressure | psi | meters |
|
|
|Reaction Coeff. (Bulk) | 1/day (1st-order)| 1/day (1st-order) |
|
|
|Reaction Coeff. (Wall) | mass/sq-ft/day (0-order) | mass/sq-m/day (0-order) |
|
|
| | ft/day (1st-order) | meters/day (1st-order) |
|
|
|Roughness Coeff. | millifeet (Darcy-Weisbach) unitless otherwise| mm (Darcy-Weisbach) unitless otherwise |
|
|
|Source Mass Injection | mass/minute | mass/minute |
|
|
|Velocity | ft/sec | meters/sec |
|
|
|Volume | cubic feet | cubic meters |
|
|
|Water Age | hours | hours |
|
|
|
|
*/
|
|
|
|
/**
|
|
@defgroup OutFileFormat Output File Format
|
|
|
|
*/
|
|
|