/** @file epanet2_enums.h */ /* ****************************************************************************** Project: OWA EPANET Version: 2.2 Module: epanet2_enums.h Description: enumerations of symbolic constants used by the API functions Authors: see AUTHORS Copyright: see AUTHORS License: see LICENSE Last Updated: 11/06/2019 ****************************************************************************** */ #ifndef EPANET2_ENUMS_H #define EPANET2_ENUMS_H // --- Define the EPANET toolkit constants /// Size Limts /** Limits on the size of character arrays used to store ID names and text messages. */ typedef enum { EN_MAXID = 31, //!< Max. # characters in ID name EN_MAXMSG = 255 //!< Max. # characters in message text } EN_SizeLimits; /// Node properties /** These node properties are used with @ref EN_getnodevalue and @ref EN_setnodevalue. Those marked as read only are computed values that can only be retrieved. */ typedef enum { EN_ELEVATION = 0, //!< Elevation EN_BASEDEMAND = 1, //!< Primary demand baseline value EN_PATTERN = 2, //!< Primary demand time pattern index EN_EMITTER = 3, //!< Emitter flow coefficient EN_INITQUAL = 4, //!< Initial quality EN_SOURCEQUAL = 5, //!< Quality source strength EN_SOURCEPAT = 6, //!< Quality source pattern index EN_SOURCETYPE = 7, //!< Quality source type (see @ref EN_SourceType) EN_TANKLEVEL = 8, //!< Current computed tank water level (read only) EN_DEMAND = 9, //!< Current computed demand (read only) EN_HEAD = 10, //!< Current computed hydraulic head (read only) EN_PRESSURE = 11, //!< Current computed pressure (read only) EN_QUALITY = 12, //!< Current computed quality (read only) EN_SOURCEMASS = 13, //!< Current computed quality source mass inflow (read only) EN_INITVOLUME = 14, //!< Tank initial volume (read only) EN_MIXMODEL = 15, //!< Tank mixing model (see @ref EN_MixingModel) EN_MIXZONEVOL = 16, //!< Tank mixing zone volume (read only) EN_TANKDIAM = 17, //!< Tank diameter EN_MINVOLUME = 18, //!< Tank minimum volume EN_VOLCURVE = 19, //!< Tank volume curve index EN_MINLEVEL = 20, //!< Tank minimum level EN_MAXLEVEL = 21, //!< Tank maximum level EN_MIXFRACTION = 22, //!< Tank mixing fraction EN_TANK_KBULK = 23, //!< Tank bulk decay coefficient EN_TANKVOLUME = 24, //!< Current computed tank volume (read only) EN_MAXVOLUME = 25, //!< Tank maximum volume (read only) EN_CANOVERFLOW = 26, //!< Tank can overflow (= 1) or not (= 0) EN_DEMANDDEFICIT = 27 //!< Amount that full demand is reduced under PDA (read only) } EN_NodeProperty; /// Link properties /** These link properties are used with @ref EN_getlinkvalue and @ref EN_setlinkvalue. Those marked as read only are computed values that can only be retrieved. */ typedef enum { EN_DIAMETER = 0, //!< Pipe/valve diameter EN_LENGTH = 1, //!< Pipe length EN_ROUGHNESS = 2, //!< Pipe roughness coefficient EN_MINORLOSS = 3, //!< Pipe/valve minor loss coefficient EN_INITSTATUS = 4, //!< Initial status (see @ref EN_LinkStatusType) EN_INITSETTING = 5, //!< Initial pump speed or valve setting EN_KBULK = 6, //!< Bulk chemical reaction coefficient EN_KWALL = 7, //!< Pipe wall chemical reaction coefficient EN_FLOW = 8, //!< Current computed flow rate (read only) EN_VELOCITY = 9, //!< Current computed flow velocity (read only) EN_HEADLOSS = 10, //!< Current computed head loss (read only) EN_STATUS = 11, //!< Current link status (see @ref EN_LinkStatusType) EN_SETTING = 12, //!< Current link setting EN_ENERGY = 13, //!< Current computed pump energy usage (read only) EN_LINKQUAL = 14, //!< Current computed link quality (read only) EN_LINKPATTERN = 15, //!< Pump speed time pattern index EN_PUMP_STATE = 16, //!< Current computed pump state (read only) (see @ref EN_PumpStateType) EN_PUMP_EFFIC = 17, //!< Current computed pump efficiency (read only) EN_PUMP_POWER = 18, //!< Pump constant power rating EN_PUMP_HCURVE = 19, //!< Pump head v. flow curve index EN_PUMP_ECURVE = 20, //!< Pump efficiency v. flow curve index EN_PUMP_ECOST = 21, //!< Pump average energy price EN_PUMP_EPAT = 22 //!< Pump energy price time pattern index } EN_LinkProperty; /// Time parameters /** These time-related options are used with @ref EN_gettimeparam and@ref EN_settimeparam. All times are expressed in seconds The parameters marked as read only are computed values that can only be retrieved. */ typedef enum { EN_DURATION = 0, //!< Total simulation duration EN_HYDSTEP = 1, //!< Hydraulic time step EN_QUALSTEP = 2, //!< Water quality time step EN_PATTERNSTEP = 3, //!< Time pattern period EN_PATTERNSTART = 4, //!< Time when time patterns begin EN_REPORTSTEP = 5, //!< Reporting time step EN_REPORTSTART = 6, //!< Time when reporting starts EN_RULESTEP = 7, //!< Rule-based control evaluation time step EN_STATISTIC = 8, //!< Reporting statistic code (see @ref EN_StatisticType) EN_PERIODS = 9, //!< Number of reporting time periods (read only) EN_STARTTIME = 10, //!< Simulation starting time of day EN_HTIME = 11, //!< Elapsed time of current hydraulic solution (read only) EN_QTIME = 12, //!< Elapsed time of current quality solution (read only) EN_HALTFLAG = 13, //!< Flag indicating if the simulation was halted (read only) EN_NEXTEVENT = 14, //!< Shortest time until a tank becomes empty or full (read only) EN_NEXTEVENTTANK = 15 //!< Index of tank with shortest time to become empty or full (read only) } EN_TimeParameter; /// Analysis convergence statistics /** These statistics report the convergence criteria for the most current hydraulic analysis and the cumulative water quality mass balance error at the current simulation time. They can be retrieved with @ref EN_getstatistic. */ typedef enum { EN_ITERATIONS = 0, //!< Number of hydraulic iterations taken EN_RELATIVEERROR = 1, //!< Sum of link flow changes / sum of link flows EN_MAXHEADERROR = 2, //!< Largest head loss error for links EN_MAXFLOWCHANGE = 3, //!< Largest flow change in links EN_MASSBALANCE = 4, //!< Cumulative water quality mass balance ratio EN_DEFICIENTNODES = 5, //!< Number of pressure deficient nodes EN_DEMANDREDUCTION = 6 //!< % demand reduction at pressure deficient nodes } EN_AnalysisStatistic; /// Types of network objects /** The types of objects that comprise a network model. */ typedef enum { EN_NODE = 0, //!< Nodes EN_LINK = 1, //!< Links EN_TIMEPAT = 2, //!< Time patterns EN_CURVE = 3, //!< Data curves EN_CONTROL = 4, //!< Simple controls EN_RULE = 5 //!< Control rules } EN_ObjectType; /// Types of objects to count /** These options tell @ref EN_getcount which type of object to count. */ typedef enum { EN_NODECOUNT = 0, //!< Number of nodes (junctions + tanks + reservoirs) EN_TANKCOUNT = 1, //!< Number of tanks and reservoirs EN_LINKCOUNT = 2, //!< Number of links (pipes + pumps + valves) EN_PATCOUNT = 3, //!< Number of time patterns EN_CURVECOUNT = 4, //!< Number of data curves EN_CONTROLCOUNT = 5, //!< Number of simple controls EN_RULECOUNT = 6 //!< Number of rule-based controls } EN_CountType; /// Node Types /** These are the different types of nodes that can be returned by calling @ref EN_getnodetype. */ typedef enum { EN_JUNCTION = 0, //!< Junction node EN_RESERVOIR = 1, //!< Reservoir node EN_TANK = 2 //!< Storage tank node } EN_NodeType; /// Link types /** These are the different types of links that can be returned by calling @ref EN_getlinktype. */ typedef enum { EN_CVPIPE = 0, //!< Pipe with check valve EN_PIPE = 1, //!< Pipe EN_PUMP = 2, //!< Pump EN_PRV = 3, //!< Pressure reducing valve EN_PSV = 4, //!< Pressure sustaining valve EN_PBV = 5, //!< Pressure breaker valve EN_FCV = 6, //!< Flow control valve EN_TCV = 7, //!< Throttle control valve EN_GPV = 8 //!< General purpose valve } EN_LinkType; /// Link status /** One of these values is returned when @ref EN_getlinkvalue is used to retrieve a link's initial status ( \b EN_INITSTATUS ) or its current status ( \b EN_STATUS ). These options are also used with @ref EN_setlinkvalue to set values for these same properties. */ typedef enum { EN_CLOSED = 0, EN_OPEN = 1 } EN_LinkStatusType; /// Pump states /** One of these codes is returned when @ref EN_getlinkvalue is used to retrieve a pump's current operating state ( \b EN_PUMP_STATE ). \b EN_PUMP_XHEAD indicates that the pump has been shut down because it is being asked to deliver more than its shutoff head. \b EN_PUMP_XFLOW indicates that the pump is being asked to deliver more than its maximum flow. */ typedef enum { EN_PUMP_XHEAD = 0, //!< Pump closed - cannot supply head EN_PUMP_CLOSED = 2, //!< Pump closed EN_PUMP_OPEN = 3, //!< Pump open EN_PUMP_XFLOW = 5 //!< Pump open - cannot supply flow } EN_PumpStateType; /// Types of water quality analyses /** These are the different types of water quality analyses that EPANET can run. They are used with @ref EN_getqualinfo, @ref EN_getqualtype, and @ref EN_setqualtype. */ typedef enum { EN_NONE = 0, //!< No quality analysis EN_CHEM = 1, //!< Chemical fate and transport EN_AGE = 2, //!< Water age analysis EN_TRACE = 3 //!< Source tracing analysis } EN_QualityType; /// Water quality source types /** These are the different types of external water quality sources that can be assigned to a node's \b EN_SOURCETYPE property as used by @ref EN_getnodevalue and @ref EN_setnodevalue. */ typedef enum { EN_CONCEN = 0, //!< Sets the concentration of external inflow entering a node EN_MASS = 1, //!< Injects a given mass/minute into a node EN_SETPOINT = 2, //!< Sets the concentration leaving a node to a given value EN_FLOWPACED = 3 //!< Adds a given value to the concentration leaving a node } EN_SourceType; /// Head loss formulas /** The available choices for the \b EN_HEADLOSSFORM option in @ref EN_getoption and @ref EN_setoption. They are also used for the head loss type argument in @ref EN_init. Each head loss formula uses a different type of roughness coefficient ( \b EN_ROUGHNESS ) that can be set with @ref EN_setlinkvalue. */ typedef enum { EN_HW = 0, //!< Hazen-Williams EN_DW = 1, //!< Darcy-Weisbach EN_CM = 2 //!< Chezy-Manning } EN_HeadLossType; /// Flow units /** These choices for flow units are used with @ref EN_getflowunits and @ref EN_setflowunits. They are also used for the flow units type argument in @ref EN_init. If flow units are expressed in US Customary units ( \b EN_CFS through \b EN_AFD ) then all other quantities are in US Customary units. Otherwise they are in metric units. */ typedef enum { EN_CFS = 0, //!< Cubic feet per second EN_GPM = 1, //!< Gallons per minute EN_MGD = 2, //!< Million gallons per day EN_IMGD = 3, //!< Imperial million gallons per day EN_AFD = 4, //!< Acre-feet per day EN_LPS = 5, //!< Liters per second EN_LPM = 6, //!< Liters per minute EN_MLD = 7, //!< Million liters per day EN_CMH = 8, //!< Cubic meters per hour EN_CMD = 9 //!< Cubic meters per day } EN_FlowUnits; /// Demand models /** These choices for modeling consumer demands are used with @ref EN_getdemandmodel and @ref EN_setdemandmodel. A demand driven analysis requires that a junction's full demand be supplied in each time period independent of how much pressure is available. A pressure driven analysis makes demand be a power function of pressure, up to the point where the full demand is met. */ typedef enum { EN_DDA = 0, //!< Demand driven analysis EN_PDA = 1 //!< Pressure driven analysis } EN_DemandModel; /// Simulation options /** These constants identify the hydraulic and water quality simulation options that are applied on a network-wide basis. They are accessed using the @ref EN_getoption and @ref EN_setoption functions. */ typedef enum { EN_TRIALS = 0, //!< Maximum trials allowed for hydraulic convergence EN_ACCURACY = 1, //!< Total normalized flow change for hydraulic convergence EN_TOLERANCE = 2, //!< Water quality tolerance EN_EMITEXPON = 3, //!< Exponent in emitter discharge formula EN_DEMANDMULT = 4, //!< Global demand multiplier EN_HEADERROR = 5, //!< Maximum head loss error for hydraulic convergence EN_FLOWCHANGE = 6, //!< Maximum flow change for hydraulic convergence EN_HEADLOSSFORM = 7, //!< Head loss formula (see @ref EN_HeadLossType) EN_GLOBALEFFIC = 8, //!< Global pump efficiency (percent) EN_GLOBALPRICE = 9, //!< Global energy price per KWH EN_GLOBALPATTERN = 10, //!< Index of a global energy price pattern EN_DEMANDCHARGE = 11, //!< Energy charge per max. KW usage EN_SP_GRAVITY = 12, //!< Specific gravity EN_SP_VISCOS = 13, //!< Specific viscosity (relative to water at 20 deg C) EN_UNBALANCED = 14, //!< Extra trials allowed if hydraulics don't converge EN_CHECKFREQ = 15, //!< Frequency of hydraulic status checks EN_MAXCHECK = 16, //!< Maximum trials for status checking EN_DAMPLIMIT = 17, //!< Accuracy level where solution damping begins EN_SP_DIFFUS = 18, //!< Specific diffusivity (relative to chlorine at 20 deg C) EN_BULKORDER = 19, //!< Bulk water reaction order for pipes EN_WALLORDER = 20, //!< Wall reaction order for pipes (either 0 or 1) EN_TANKORDER = 21, //!< Bulk water reaction order for tanks EN_CONCENLIMIT = 22 //!< Limiting concentration for growth reactions } EN_Option; /// Simple control types /** These are the different types of simple (single statement) controls that can be applied to network links. They are used as an argument to @ref EN_addcontrol,@ref EN_getcontrol, and @ref EN_setcontrol. */ typedef enum { EN_LOWLEVEL = 0, //!< Act when pressure or tank level drops below a setpoint EN_HILEVEL = 1, //!< Act when pressure or tank level rises above a setpoint EN_TIMER = 2, //!< Act at a prescribed elapsed amount of time EN_TIMEOFDAY = 3 //!< Act at a particular time of day } EN_ControlType; /// Reporting statistic choices /** These options determine what kind of statistical post-processing should be done on the time series of simulation results generated before they are reported using @ref EN_report. An option can be chosen by using \b STATISTIC _option_ as the argument to @ref EN_setreport. */ typedef enum { EN_SERIES = 0, //!< Report all time series points EN_AVERAGE = 1, //!< Report average value over simulation period EN_MINIMUM = 2, //!< Report minimum value over simulation period EN_MAXIMUM = 3, //!< Report maximum value over simulation period EN_RANGE = 4 //!< Report maximum - minimum over simulation period } EN_StatisticType; /// Tank mixing models /** These are the different types of models that describe water quality mixing in storage tanks. The choice of model is accessed with the \b EN_MIXMODEL property of a Tank node using @ref EN_getnodevalue and @ref EN_setnodevalue. */ typedef enum { EN_MIX1 = 0, //!< Complete mix model EN_MIX2 = 1, //!< 2-compartment model EN_FIFO = 2, //!< First in, first out model EN_LIFO = 3 //!< Last in, first out model } EN_MixingModel; /// Hydraulic initialization options /** These options are used to initialize a new hydraulic analysis when @ref EN_initH is called. */ typedef enum { EN_NOSAVE = 0, //!< Don't save hydraulics; don't re-initialize flows EN_SAVE = 1, //!< Save hydraulics to file, don't re-initialize flows EN_INITFLOW = 10, //!< Don't save hydraulics; re-initialize flows EN_SAVE_AND_INIT = 11 //!< Save hydraulics; re-initialize flows } EN_InitHydOption; /// Types of pump curves /** @ref EN_getpumptype returns one of these values when it is called. */ typedef enum { EN_CONST_HP = 0, //!< Constant horsepower EN_POWER_FUNC = 1, //!< Power function EN_CUSTOM = 2, //!< User-defined custom curve EN_NOCURVE = 3 //!< No curve } EN_PumpType; /// Types of data curves /** These are the different types of physical relationships that a data curve can represent as returned by calling @ref EN_getcurvetype. */ typedef enum { EN_VOLUME_CURVE = 0, //!< Tank volume v. depth curve EN_PUMP_CURVE = 1, //!< Pump head v. flow curve EN_EFFIC_CURVE = 2, //!< Pump efficiency v. flow curve EN_HLOSS_CURVE = 3, //!< Valve head loss v. flow curve EN_GENERIC_CURVE = 4 //!< Generic curve } EN_CurveType; /// Deletion action codes /** These codes are used in @ref EN_deletenode and @ref EN_deletelink to indicate what action should be taken if the node or link being deleted appears in any simple or rule-based controls or if a deleted node has any links connected to it. */ typedef enum { EN_UNCONDITIONAL = 0, //!< Delete all controls and connecing links EN_CONDITIONAL = 1 //!< Cancel object deletion if it appears in controls or has connecting links } EN_ActionCodeType; /// Status reporting levels /** These choices specify the level of status reporting written to a project's report file during a hydraulic analysis. The level is set using the @ref EN_setstatusreport function. */ typedef enum { EN_NO_REPORT = 0, //!< No status reporting EN_NORMAL_REPORT = 1, //!< Normal level of status reporting EN_FULL_REPORT = 2 //!< Full level of status reporting } EN_StatusReport; /// Network objects used in rule-based controls typedef enum { EN_R_NODE = 6, //!< Clause refers to a node EN_R_LINK = 7, //!< Clause refers to a link EN_R_SYSTEM = 8 //!< Clause refers to a system parameter (e.g., time) } EN_RuleObject; /// Object variables used in rule-based controls typedef enum { EN_R_DEMAND = 0, //!< Nodal demand EN_R_HEAD = 1, //!< Nodal hydraulic head EN_R_GRADE = 2, //!< Nodal hydraulic grade EN_R_LEVEL = 3, //!< Tank water level EN_R_PRESSURE = 4, //!< Nodal pressure EN_R_FLOW = 5, //!< Link flow rate EN_R_STATUS = 6, //!< Link status EN_R_SETTING = 7, //!< Link setting EN_R_POWER = 8, //!< Pump power output EN_R_TIME = 9, //!< Elapsed simulation time EN_R_CLOCKTIME = 10, //!< Time of day EN_R_FILLTIME = 11, //!< Time to fill a tank EN_R_DRAINTIME = 12 //!< Time to drain a tank } EN_RuleVariable; /// Comparison operators used in rule-based controls typedef enum { EN_R_EQ = 0, //!< Equal to EN_R_NE = 1, //!< Not equal EN_R_LE = 2, //!< Less than or equal to EN_R_GE = 3, //!< Greater than or equal to EN_R_LT = 4, //!< Less than EN_R_GT = 5, //!< Greater than EN_R_IS = 6, //!< Is equal to EN_R_NOT = 7, //!< Is not equal to EN_R_BELOW = 8, //!< Is below EN_R_ABOVE = 9 //!< Is above } EN_RuleOperator; /// Link status codes used in rule-based controls typedef enum { EN_R_IS_OPEN = 1, //!< Link is open EN_R_IS_CLOSED = 2, //!< Link is closed EN_R_IS_ACTIVE = 3 //!< Control valve is active } EN_RuleStatus; #define EN_MISSING -1.E10 //!< Missing value indicator #endif //EPANET2_ENUMS_H