EPANET  2.1
 All Data Structures Files Functions Modules Pages
epanet2.h
Go to the documentation of this file.
1 
6 /*
7  *******************************************************************
8 
9  EPANET2.H - Prototypes for EPANET Functions Exported to DLL Toolkit
10 
11  VERSION: 2.00
12  DATE: 5/8/00
13  10/25/00
14  3/1/01
15  8/15/07 (2.00.11)
16  2/14/08 (2.00.12)
17  AUTHORS: L. Rossman - US EPA - NRMRL
18  OpenWaterAnalytics members: see git stats for contributors
19 
20  *******************************************************************
21  */
22 
23 
24 #ifndef EPANET2_H
25 #define EPANET2_H
26 
27 // the toolkit can be compiled with support for double-precision as well.
28 // just make sure that you use the correct #define in your client code.
29 #ifndef EN_API_FLOAT_TYPE
30  #define EN_API_FLOAT_TYPE float
31 #endif
32 
33 // --- define WINDOWS
34 #undef WINDOWS
35 #ifdef _WIN32
36  #define WINDOWS
37 #endif
38 #ifdef __WIN32__
39  #define WINDOWS
40 #endif
41 
42 // --- define DLLEXPORT
43 #ifndef DLLEXPORT
44  #ifdef WINDOWS
45  #ifdef __cplusplus
46  #define DLLEXPORT extern "C" __declspec(dllexport)
47  #else
48  #define DLLEXPORT __declspec(dllexport) __stdcall
49  #endif // __cplusplus
50  #elif defined(CYGWIN)
51  #define DLLEXPORT __stdcall
52  #elif defined(__APPLE__)
53  #ifdef __cplusplus
54  #define DLLEXPORT
55  #else
56  #define DLLEXPORT
57  #endif
58  #else
59  #define DLLEXPORT
60  #endif
61 #endif
62 
63 // --- Define the EPANET toolkit constants
64 
65 #define EN_ELEVATION 0 /* Node parameters */
66 #define EN_BASEDEMAND 1
67 #define EN_PATTERN 2
68 #define EN_EMITTER 3
69 #define EN_INITQUAL 4
70 #define EN_SOURCEQUAL 5
71 #define EN_SOURCEPAT 6
72 #define EN_SOURCETYPE 7
73 #define EN_TANKLEVEL 8
74 #define EN_DEMAND 9
75 #define EN_HEAD 10
76 #define EN_PRESSURE 11
77 #define EN_QUALITY 12
78 #define EN_SOURCEMASS 13
79 #define EN_INITVOLUME 14
80 #define EN_MIXMODEL 15
81 #define EN_MIXZONEVOL 16
82 
83 #define EN_TANKDIAM 17
84 #define EN_MINVOLUME 18
85 #define EN_VOLCURVE 19
86 #define EN_MINLEVEL 20
87 #define EN_MAXLEVEL 21
88 #define EN_MIXFRACTION 22
89 #define EN_TANK_KBULK 23
90 #define EN_TANKVOLUME 24
91 #define EN_MAXVOLUME 25
92 
93 #define EN_DIAMETER 0 /* Link parameters */
94 #define EN_LENGTH 1
95 #define EN_ROUGHNESS 2
96 #define EN_MINORLOSS 3
97 #define EN_INITSTATUS 4
98 #define EN_INITSETTING 5
99 #define EN_KBULK 6
100 #define EN_KWALL 7
101 #define EN_FLOW 8
102 #define EN_VELOCITY 9
103 #define EN_HEADLOSS 10
104 #define EN_STATUS 11
105 #define EN_SETTING 12
106 #define EN_ENERGY 13
107 #define EN_LINKQUAL 14
108 #define EN_LINKPATTERN 15
109 
110 #define EN_DURATION 0 /* Time parameters */
111 #define EN_HYDSTEP 1
112 #define EN_QUALSTEP 2
113 #define EN_PATTERNSTEP 3
114 #define EN_PATTERNSTART 4
115 #define EN_REPORTSTEP 5
116 #define EN_REPORTSTART 6
117 #define EN_RULESTEP 7
118 #define EN_STATISTIC 8
119 #define EN_PERIODS 9
120 #define EN_STARTTIME 10 /* Added TNT 10/2/2009 */
121 #define EN_HTIME 11
122 #define EN_QTIME 12
123 #define EN_HALTFLAG 13
124 #define EN_NEXTEVENT 14
125 
126 #define EN_ITERATIONS 0
127 #define EN_RELATIVEERROR 1
128 
129 #define EN_NODECOUNT 0 /* Component counts */
130 #define EN_TANKCOUNT 1
131 #define EN_LINKCOUNT 2
132 #define EN_PATCOUNT 3
133 #define EN_CURVECOUNT 4
134 #define EN_CONTROLCOUNT 5
135 
136 #define EN_JUNCTION 0 /* Node types */
137 #define EN_RESERVOIR 1
138 #define EN_TANK 2
139 
140 #define EN_CVPIPE 0 /* Link types. */
141 #define EN_PIPE 1 /* See LinkType in TYPES.H */
142 #define EN_PUMP 2
143 #define EN_PRV 3
144 #define EN_PSV 4
145 #define EN_PBV 5
146 #define EN_FCV 6
147 #define EN_TCV 7
148 #define EN_GPV 8
149 
150 #define EN_NONE 0 /* Quality analysis types. */
151 #define EN_CHEM 1 /* See QualType in TYPES.H */
152 #define EN_AGE 2
153 #define EN_TRACE 3
154 
155 #define EN_CONCEN 0 /* Source quality types. */
156 #define EN_MASS 1 /* See SourceType in TYPES.H. */
157 #define EN_SETPOINT 2
158 #define EN_FLOWPACED 3
159 
160 #define EN_CFS 0 /* Flow units types. */
161 #define EN_GPM 1 /* See FlowUnitsType */
162 #define EN_MGD 2 /* in TYPES.H. */
163 #define EN_IMGD 3
164 #define EN_AFD 4
165 #define EN_LPS 5
166 #define EN_LPM 6
167 #define EN_MLD 7
168 #define EN_CMH 8
169 #define EN_CMD 9
170 
171 #define EN_TRIALS 0 /* Misc. options */
172 #define EN_ACCURACY 1
173 #define EN_TOLERANCE 2
174 #define EN_EMITEXPON 3
175 #define EN_DEMANDMULT 4
176 
177 #define EN_LOWLEVEL 0 /* Control types. */
178 #define EN_HILEVEL 1 /* See ControlType */
179 #define EN_TIMER 2 /* in TYPES.H. */
180 #define EN_TIMEOFDAY 3
181 
182 #define EN_AVERAGE 1 /* Time statistic types. */
183 #define EN_MINIMUM 2 /* See TstatType in TYPES.H */
184 #define EN_MAXIMUM 3
185 #define EN_RANGE 4
186 
187 #define EN_MIX1 0 /* Tank mixing models */
188 #define EN_MIX2 1
189 #define EN_FIFO 2
190 #define EN_LIFO 3
191 
192 #define EN_NOSAVE 0 /* Save-results-to-file flag */
193 #define EN_SAVE 1
194 
195 #define EN_INITFLOW 10 /* Re-initialize flows flag */
196 
197 
227 // --- Declare the EPANET toolkit functions
228 #if defined(__cplusplus)
229 extern "C" {
230 #endif
231 
244  int DLLEXPORT ENepanet(char *inpFile, char *rptFile, char *binOutFile, void (*callback) (char *));
245 
254  int DLLEXPORT ENopen(char *inpFile, char *rptFile, char *binOutFile);
255 
262  int DLLEXPORT ENsaveinpfile(char *filename);
263 
268  int DLLEXPORT ENclose();
269 
275  int DLLEXPORT ENsolveH();
276 
285  int DLLEXPORT ENsaveH();
286 
292  int DLLEXPORT ENopenH();
293 
300  int DLLEXPORT ENinitH(int initFlag);
301 
314  int DLLEXPORT ENrunH(long *currentTime);
315 
320  int DLLEXPORT ENnextH(long *tStep);
321  int DLLEXPORT ENcloseH();
322  int DLLEXPORT ENsavehydfile(char *filename);
323  int DLLEXPORT ENusehydfile(char *filename);
324 
325  int DLLEXPORT ENsolveQ();
326  int DLLEXPORT ENopenQ();
327  int DLLEXPORT ENinitQ(int saveFlag);
328  int DLLEXPORT ENrunQ(long *currentTime);
329  int DLLEXPORT ENnextQ(long *tStep);
330  int DLLEXPORT ENstepQ(long *timeLeft);
331  int DLLEXPORT ENcloseQ();
332 
333  int DLLEXPORT ENwriteline(char *line);
334  int DLLEXPORT ENreport();
335  int DLLEXPORT ENresetreport();
336  int DLLEXPORT ENsetreport(char *reportFormat);
337 
338  int DLLEXPORT ENgetcontrol(int controlIndex, int *controlType, int *linkIdx, EN_API_FLOAT_TYPE *setting, int *nodeIdx, EN_API_FLOAT_TYPE *level);
339  int DLLEXPORT ENgetcount(int code, int *count);
340  int DLLEXPORT ENgetoption(int code, EN_API_FLOAT_TYPE *value);
341  int DLLEXPORT ENgettimeparam(int code, long *value);
342  int DLLEXPORT ENgetflowunits(int *code);
343  int DLLEXPORT ENgetpatternindex(char *id, int *index);
344  int DLLEXPORT ENgetpatternid(int index, char *id);
345  int DLLEXPORT ENgetpatternlen(int index, int *len);
346  int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value);
347  int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value);
348  int DLLEXPORT ENgetqualtype(int *qualcode, int *tracenode);
349  int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen);
350  int DLLEXPORT ENgetstatistic(int code, EN_API_FLOAT_TYPE* value);
351 
352  int DLLEXPORT ENgetnodeindex(char *id, int *index);
353  int DLLEXPORT ENgetnodeid(int index, char *id);
354  int DLLEXPORT ENgetnodetype(int index, int *code);
355  int DLLEXPORT ENgetnodevalue(int index, int code, EN_API_FLOAT_TYPE *value);
356  int DLLEXPORT ENgetcoord(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
357  int DLLEXPORT ENsetcoord(int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
358 
359  int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands);
360  int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE *baseDemand);
361  int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIdx, int *pattIdx);
362 
363  int DLLEXPORT ENgetlinkindex(char *id, int *index);
364  int DLLEXPORT ENgetlinkid(int index, char *id);
365  int DLLEXPORT ENgetlinktype(int index, int *code);
366  int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2);
367  int DLLEXPORT ENgetlinkvalue(int index, int code, EN_API_FLOAT_TYPE *value);
368 
369  int DLLEXPORT ENgetcurve(int curveIndex, char* id, int *nValues, EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues);
370  int DLLEXPORT ENgetheadcurve(int, char *);
371 
378  int DLLEXPORT ENgetpumptype(int linkIndex, int *outType);
379 
380  int DLLEXPORT ENgetversion(int *version);
381 
382  int DLLEXPORT ENsetcontrol(int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
383  int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v);
384  int DLLEXPORT ENsetlinkvalue(int index, int code, EN_API_FLOAT_TYPE v);
385  int DLLEXPORT ENaddpattern(char *id);
386  int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *f, int len);
387  int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value);
388  int DLLEXPORT ENsettimeparam(int code, long value);
389  int DLLEXPORT ENsetoption(int code, EN_API_FLOAT_TYPE v);
390  int DLLEXPORT ENsetstatusreport(int code);
391  int DLLEXPORT ENsetqualtype(int qualcode, char *chemname, char *chemunits, char *tracenode);
392  int DLLEXPORT ENgetqualinfo(int *qualcode, char *chemname, char *chemunits, int *tracenode);
393  int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE baseDemand);
394 
395  int DLLEXPORT ENgetcurveindex(char *id, int *index);
396  int DLLEXPORT ENgetcurveid(int index, char *id);
397  int DLLEXPORT ENgetcurvelen(int index, int *len);
398  int DLLEXPORT ENgetcurvevalue(int index, int pnt, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
399  int DLLEXPORT ENsetcurvevalue(int index, int pnt, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
400  int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y, int len);
401  int DLLEXPORT ENaddcurve(char *id);
402 
403 #if defined(__cplusplus)
404 }
405 #endif
406 
407 #endif //EPANET2_H
int DLLEXPORT ENclose()
Frees all memory and files used by EPANET.
Definition: epanet.c:273
int DLLEXPORT ENopen(char *inpFile, char *rptFile, char *binOutFile)
Opens EPANET input file & reads in network data.
Definition: epanet.c:187
int DLLEXPORT ENnextH(long *tStep)
Determine time (in seconds) until next hydraulic event.
Definition: epanet.c:497
int DLLEXPORT ENsaveinpfile(char *filename)
Saves current data to "INP" formatted text file.
Definition: epanet.c:259
int DLLEXPORT ENsaveH()
Saves hydraulic results to binary file.
Definition: epanet.c:371
int DLLEXPORT ENrunH(long *currentTime)
Run a hydraulic solution period.
Definition: epanet.c:475
int DLLEXPORT ENopenH()
Sets up data structures for hydraulic analysis.
Definition: epanet.c:405
int DLLEXPORT ENinitH(int initFlag)
Initializes hydraulic analysis.
Definition: epanet.c:433
int DLLEXPORT ENepanet(char *inpFile, char *rptFile, char *binOutFile, void(*callback)(char *))
runs a complete EPANET simulation
Definition: epanet.c:156
int DLLEXPORT ENsolveH()
Solves the network hydraulics for all time periods.
Definition: epanet.c:316
int DLLEXPORT ENgetpumptype(int linkIndex, int *outType)
Get the type of pump.
Definition: epanet.c:2785