313 lines
12 KiB
C
313 lines
12 KiB
C
/** @file epanet2_enums.h
|
|
*/
|
|
/*
|
|
******************************************************************************
|
|
Project: OWA EPANET
|
|
Version: 2.2
|
|
Module: epanet2_enums.h
|
|
Description: enumerations of symbolic constants used by the API
|
|
Authors: see AUTHORS
|
|
Copyright: see AUTHORS
|
|
License: see LICENSE
|
|
Last Updated: 01/08/2019
|
|
******************************************************************************
|
|
*/
|
|
|
|
|
|
#ifndef EPANET2_ENUMS_H
|
|
#define EPANET2_ENUMS_H
|
|
|
|
|
|
// --- Define the EPANET toolkit constants
|
|
|
|
#define EN_MAXID 31 //!< Max. # characters in ID name
|
|
#define EN_MAXMSG 255 //!< Max. # characters in message text
|
|
|
|
/// Node property codes
|
|
typedef enum {
|
|
EN_ELEVATION = 0, //!< Elevation
|
|
EN_BASEDEMAND = 1, //!< Junction baseline demand, from last demand category
|
|
EN_PATTERN = 2, //!< Junction baseline demand pattern
|
|
EN_EMITTER = 3, //!< Junction emitter coefficient
|
|
EN_INITQUAL = 4, //!< Initial quality
|
|
EN_SOURCEQUAL = 5, //!< Quality source strength
|
|
EN_SOURCEPAT = 6, //!< Quality source pattern
|
|
EN_SOURCETYPE = 7, //!< Qualiy source type
|
|
EN_TANKLEVEL = 8, //!< Current computed tank water level
|
|
EN_DEMAND = 9, //!< Current computed demand
|
|
EN_HEAD = 10, //!< Current computed hydraulic head
|
|
EN_PRESSURE = 11, //!< Current computed pressure
|
|
EN_QUALITY = 12, //!< Current computed quality
|
|
EN_SOURCEMASS = 13, //!< Current computed quality source mass inflow
|
|
EN_INITVOLUME = 14, //!< Tank initial volume
|
|
EN_MIXMODEL = 15, //!< Tank mixing model
|
|
EN_MIXZONEVOL = 16, //!< Tank mixing zone volume
|
|
EN_TANKDIAM = 17, //!< Tank diameter
|
|
EN_MINVOLUME = 18, //!< Tank minimum volume
|
|
EN_VOLCURVE = 19, //!< Tank volume curve
|
|
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
|
|
EN_MAXVOLUME = 25 //!< Tank maximum volume
|
|
} EN_NodeProperty;
|
|
|
|
/// Link property codes
|
|
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 (e.g., OPEN/CLOSED)
|
|
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
|
|
EN_VELOCITY = 9, //!< Current computed flow velocity
|
|
EN_HEADLOSS = 10, //!< Current computed head loss
|
|
EN_STATUS = 11, //!< Current link status
|
|
EN_SETTING = 12, //!< Current link setting
|
|
EN_ENERGY = 13, //!< Current computed pump energy usage
|
|
EN_LINKQUAL = 14, //!< Current computed link quality
|
|
EN_LINKPATTERN = 15, //!< Pump speed time pattern
|
|
|
|
EN_PUMP_STATE = 16, //!< Current computed pump state
|
|
EN_PUMP_EFFIC = 17, //!< Current computed pump efficiency
|
|
EN_PUMP_POWER = 18, //!< Pump constant power rating
|
|
EN_PUMP_HCURVE = 19, //!< Pump head v. flow curve
|
|
EN_PUMP_ECURVE = 20, //!< Pump efficiency v. flow curve
|
|
EN_PUMP_ECOST = 21, //!< Pump average energy price
|
|
EN_PUMP_EPAT = 22 //!< Pump energy price time pattern
|
|
} EN_LinkProperty;
|
|
|
|
/// Time parameter codes (all in seconds)
|
|
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 evaluation time step
|
|
EN_STATISTIC = 8, //!< Reporting statistic code
|
|
EN_PERIODS = 9, //!< Number of reporting time periods
|
|
EN_STARTTIME = 10, //!< Simulation starting time of day
|
|
EN_HTIME = 11, //!< Elapsed time of current hydraulic solution
|
|
EN_QTIME = 12, //!< Elapsed time of current quality solution
|
|
EN_HALTFLAG = 13, //!< Flag indicating if the simulation was halted
|
|
EN_NEXTEVENT = 14, //!< Next time until a tank becomes empty or full
|
|
EN_NEXTEVENTIDX = 15 //!< Index of next tank that becomes empty or full
|
|
} EN_TimeProperty;
|
|
|
|
/// Statistics for the most current hydraulic/quality analysis made
|
|
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_AnalysisStatistic;
|
|
|
|
/// Object count codes
|
|
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 type codes
|
|
typedef enum {
|
|
EN_JUNCTION = 0, //!< Junction node
|
|
EN_RESERVOIR = 1, //!< Reservoir node
|
|
EN_TANK = 2 //!< Storage tank node
|
|
} EN_NodeType;
|
|
|
|
/// Link type codes
|
|
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;
|
|
|
|
/// Water quality analysis types
|
|
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
|
|
typedef enum {
|
|
EN_CONCEN = 0, //!< Concentration inflow source
|
|
EN_MASS = 1, //!< Mass inflow source
|
|
EN_SETPOINT = 2, //!< Concentration setpoint source
|
|
EN_FLOWPACED = 3 //!< Concentration flow paced source
|
|
} EN_SourceType;
|
|
|
|
/// Head loss formulas
|
|
typedef enum {
|
|
EN_HW = 0, //!< Hazen-Williams
|
|
EN_DW = 1, //!< Darcy-Weisbach
|
|
EN_CM = 2 //!< Chezy-Manning
|
|
} EN_HeadLossType;
|
|
|
|
/// Flow units types
|
|
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 model types
|
|
typedef enum {
|
|
EN_DDA = 0, //!< Demand driven analysis
|
|
EN_PDA = 1 //!< Pressure driven analysis
|
|
} EN_DemandModel;
|
|
|
|
/// Simulation option codes
|
|
typedef enum {
|
|
EN_TRIALS = 0, //!< Maximum hydraulic trials allowed
|
|
EN_ACCURACY = 1, //!< Hydraulic convergence accuracy
|
|
EN_TOLERANCE = 2, //!< Water quality tolerance
|
|
EN_EMITEXPON = 3, //!< Exponent for emitter head loss formula
|
|
EN_DEMANDMULT = 4, //!< Global demand multiplier
|
|
EN_HEADERROR = 5, //!< Maximum allowable head loss error
|
|
EN_FLOWCHANGE = 6, //!< Maximum allowable flow change
|
|
EN_DEFDEMANDPAT = 7, //!< Default demand time pattern
|
|
EN_HEADLOSSFORM = 8, //!< Head loss formula
|
|
EN_GLOBALEFFIC = 9, //!< Global pump efficiency
|
|
EN_GLOBALPRICE = 10, //!< Global energy price per KWH
|
|
EN_GLOBALPATTERN = 11, //!< Global energy price pattern
|
|
EN_DEMANDCHARGE = 12 //!< Energy charge per max. KW usage
|
|
} EN_Option;
|
|
|
|
/// Simple control types
|
|
typedef enum {
|
|
EN_LOWLEVEL = 0, //!< Act when level drops below a setpoint
|
|
EN_HILEVEL = 1, //!< Act when 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 types
|
|
typedef enum {
|
|
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
|
|
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
|
|
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_SaveOption;
|
|
|
|
/// Pump curve types
|
|
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;
|
|
|
|
/// Data curve types
|
|
typedef enum {
|
|
EN_VOLUME_CURVE = 0, //!< Tank volume curve
|
|
EN_PUMP_CURVE = 1, //!< Pump head curve
|
|
EN_EFFIC_CURVE = 2, //!< Pump efficiency curve
|
|
EN_HLOSS_CURVE = 3, //!< Valve head loss curve
|
|
EN_GENERIC_CURVE = 4 //!< Generic curve
|
|
} EN_CurveType;
|
|
|
|
/// Deletion action codes
|
|
typedef enum {
|
|
EN_UNCONDITIONAL = 0, //!< Delete all controls that contain object
|
|
EN_CONDITIONAL = 1 //!< Cancel object deletion if contained in controls
|
|
} EN_ActionCodeType;
|
|
|
|
/// Options for reporting on the status of the hydraulic solver at each time period
|
|
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;
|
|
|
|
/// Codes for objects referred to in the clauses of 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;
|
|
|
|
/// Codes for variables used in the clauses of 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 the premises of 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;
|
|
|
|
/// Status codes used in the clauses of 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;
|
|
|
|
|
|
#endif //EPANET2_ENUMS_H
|