EPANET
epanet2.h
1 /*
2  ******************************************************************************
3  Project: OWA EPANET
4  Version: 2.3
5  Module: epanet2.h
6  Description: declarations of the legacy style EPANET 2 API functions
7  Authors: see AUTHORS
8  Copyright: see AUTHORS
9  License: see LICENSE
10  Last Updated: 03/05/2026
11  ******************************************************************************
12  */
13 
14 /*
15 This module contains declarations of the legacy style EPANET API functions, with
16 version 2.2 updates, that apply only to single threaded applications. A second
17 set of thread safe API functions that allows one to run concurrent analyses on
18 multiple EPANET projects can be found in the epanet2_2.h header file. The two
19 APIs share the same function names and arguments with the difference being that
20 the thread safe functions use the prefix "EN_" and include an extra argument that
21 represents the EPANET project being analyzed. To avoid unnecessary repetition,
22 only the thread safe API functions have been documented. To see a description of
23 a legacy style API function declared here please refer to its complementary named
24 function in epanet2_2.h.
25 */
26 
27 #ifndef EPANET2_H
28 #define EPANET2_H
29 
30 // The legacy style EPANET API can be compiled with support for either single
31 // precision or double precision floating point arguments, with the default
32 // being single precision. To compile for double precision one must #define
33 // EN_API_FLOAT_TYPE as double both here and in any client code that uses the
34 // API.
35 #ifndef EN_API_FLOAT_TYPE
36  #define EN_API_FLOAT_TYPE float
37 #endif
38 
39 #ifndef DLLEXPORT
40  #ifdef _WIN32
41  #ifdef epanet2_EXPORTS
42  #define DLLEXPORT __declspec(dllexport) __stdcall
43  #else
44  #define DLLEXPORT __declspec(dllimport) __stdcall
45  #endif
46  #elif defined(__CYGWIN__)
47  #define DLLEXPORT __stdcall
48  #else
49  #define DLLEXPORT
50  #endif
51 #endif
52 
53 #include "epanet2_enums.h"
54 
55 // --- Declare the EPANET toolkit functions
56 #if defined(__cplusplus)
57 extern "C" {
58 #endif
59 
60 
61 /********************************************************************
62 
63  Project Functions
64 
65 ********************************************************************/
66 
67  int DLLEXPORT ENepanet(const char *inpFile, const char *rptFile,
68  const char *outFile, void (*pviewprog) (char *));
69 
70  int DLLEXPORT ENinit(const char *rptFile, const char *outFile,
71  int unitsType, int headlossType);
72 
73  int DLLEXPORT ENopen(const char *inpFile, const char *rptFile,
74  const char *outFile);
75 
76  int DLLEXPORT ENopenX(const char *inpFile, const char *rptFile,
77  const char *outFile);
78 
79  int DLLEXPORT ENgettitle(char *line1, char *line2, char *line3);
80 
81  int DLLEXPORT ENsettitle(const char *line1, const char *line2, const char *line3);
82 
83  int DLLEXPORT ENgetcomment(int object, int index, char *comment);
84 
85  int DLLEXPORT ENsetcomment(int object, int index, const char *comment);
86 
87  int DLLEXPORT ENgettag(int object, int index, char *tag);
88 
89  int DLLEXPORT ENsettag(int object, int index, const char *tag);
90 
91  int DLLEXPORT ENgetcount(int object, int *count);
92 
93  int DLLEXPORT ENsaveinpfile(const char *filename);
94 
95  int DLLEXPORT ENclose();
96 
97 /********************************************************************
98 
99  Hydraulic Analysis Functions
100 
101 ********************************************************************/
102 
103  int DLLEXPORT ENsolveH();
104 
105  int DLLEXPORT ENsaveH();
106 
107  int DLLEXPORT ENopenH();
108 
109  int DLLEXPORT ENinitH(int initFlag);
110 
111  int DLLEXPORT ENrunH(long *currentTime);
112 
113  int DLLEXPORT ENnextH(long *tStep);
114 
115  int DLLEXPORT ENcloseH();
116 
117  int DLLEXPORT ENsavehydfile(const char *filename);
118 
119  int DLLEXPORT ENusehydfile(const char *filename);
120 
121 /********************************************************************
122 
123  Water Quality Analysis Functions
124 
125 ********************************************************************/
126 
127  int DLLEXPORT ENsolveQ();
128 
129  int DLLEXPORT ENopenQ();
130 
131  int DLLEXPORT ENinitQ(int saveFlag);
132 
133  int DLLEXPORT ENrunQ(long *currentTime);
134 
135  int DLLEXPORT ENnextQ(long *tStep);
136 
137  int DLLEXPORT ENstepQ(long *timeLeft);
138 
139  int DLLEXPORT ENcloseQ();
140 
141 /********************************************************************
142 
143  Reporting Functions
144 
145 ********************************************************************/
146 
147  int DLLEXPORT ENwriteline(const char *line);
148 
149  int DLLEXPORT ENreport();
150 
151  int DLLEXPORT ENcopyreport(const char *filename);
152 
153  int DLLEXPORT ENclearreport();
154 
155  int DLLEXPORT ENresetreport();
156 
157  int DLLEXPORT ENsetreport(const char *format);
158 
159  int DLLEXPORT ENsetstatusreport(int level);
160 
161  int DLLEXPORT ENgetversion(int *version);
162 
163  int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen);
164 
165  int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE* value);
166 
167  int DLLEXPORT ENgetresultindex(int type, int index, int *value);
168 
169  int DLLEXPORT ENtimetonextevent(int *eventType, long *duration, int *elementIndex);
170 
171  int DLLEXPORT ENsetreportcallback(void (*callback)(void *userData, void *EN_projectHandle, const char*));
172 
173  int DLLEXPORT ENsetreportcallbackuserdata(void *userData);
174 
175 
176 /********************************************************************
177 
178  Analysis Options Functions
179 
180 ********************************************************************/
181 
182  int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value);
183 
184  int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value);
185 
186  int DLLEXPORT ENgetflowunits(int *units);
187 
188  int DLLEXPORT ENsetflowunits(int units);
189 
190  int DLLEXPORT ENgettimeparam(int param, long *value);
191 
192  int DLLEXPORT ENsettimeparam(int param, long value);
193 
194  int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits,
195  int *traceNode);
196 
197  int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode);
198 
199  int DLLEXPORT ENsetqualtype(int qualType, const char *chemName,
200  const char *chemUnits, const char *traceNode);
201 
202 /********************************************************************
203 
204  Node Functions
205 
206 ********************************************************************/
207 
208  int DLLEXPORT ENaddnode(const char *id, int nodeType, int *index);
209 
210  int DLLEXPORT ENdeletenode(int index, int actionCode);
211 
212  int DLLEXPORT ENgetnodeindex(const char *id, int *index);
213 
214  int DLLEXPORT ENgetnodeid(int index, char *id);
215 
216  int DLLEXPORT ENsetnodeid(int index, const char *newid);
217 
218  int DLLEXPORT ENgetnodetype(int index, int *nodeType);
219 
220  int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value);
221 
222  int DLLEXPORT ENgetnodevalues(int property, EN_API_FLOAT_TYPE *value);
223 
224  int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value);
225 
226  int DLLEXPORT ENsetnodevalues(int property, EN_API_FLOAT_TYPE *values, int *badIndex);
227 
228  int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev,
229  EN_API_FLOAT_TYPE dmnd, const char *dmndpat);
230 
231  int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev,
232  EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl,
233  EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
234  EN_API_FLOAT_TYPE minvol, const char *volcurve);
235 
236  int DLLEXPORT ENgetcoord(int index, double *x, double *y);
237 
238  int DLLEXPORT ENsetcoord(int index, double x, double y);
239 
240 /********************************************************************
241 
242  Nodal Demand Functions
243 
244 ********************************************************************/
245 
246  int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin,
247  EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp);
248 
249  int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin,
250  EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp);
251 
252  int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand,
253  const char *demandPattern, const char *demandName);
254 
255  int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex);
256 
257  int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands);
258 
259  int DLLEXPORT ENgetdemandindex(int nodeIndex, const char *demandName,
260  int *demandIndex);
261 
262  int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex,
263  EN_API_FLOAT_TYPE *baseDemand);
264 
265  int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex,
266  EN_API_FLOAT_TYPE baseDemand);
267 
268  int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *patIndex);
269 
270  int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex);
271 
272  int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName);
273 
274  int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, const char *demandName);
275 
276 /********************************************************************
277 
278  Link Functions
279 
280 ********************************************************************/
281 
282  int DLLEXPORT ENaddlink(const char *id, int linkType, const char *fromNode,
283  const char *toNode, int *index);
284 
285  int DLLEXPORT ENdeletelink(int index, int actionCode);
286 
287  int DLLEXPORT ENgetlinkindex(const char *id, int *index);
288 
289  int DLLEXPORT ENgetlinkid(int index, char *id);
290 
291  int DLLEXPORT ENsetlinkid(int index, const char *newid);
292 
293  int DLLEXPORT ENgetlinktype(int index, int *linkType);
294 
295  int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode);
296 
297  int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2);
298 
299  int DLLEXPORT ENsetlinknodes(int index, int node1, int node2);
300 
301  int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value);
302 
303  int DLLEXPORT ENgetlinkvalues(int property, EN_API_FLOAT_TYPE *value);
304 
305  int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value);
306 
307  int DLLEXPORT ENsetlinkvalues(int property, EN_API_FLOAT_TYPE *values, int *badIndex);
308 
309  int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length,
310  EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough,
311  EN_API_FLOAT_TYPE mloss);
312 
313  int DLLEXPORT ENgetvertexcount(int index, int *count);
314 
315  int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y);
316 
317  int DLLEXPORT ENsetvertex(int index, int vertex, double x, double y);
318 
319  int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count);
320 
321 /********************************************************************
322 
323  Pump Functions
324 
325 ********************************************************************/
326 
327  int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType);
328 
329  int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex);
330 
331  int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex);
332 
333 /********************************************************************
334 
335  Time Pattern Functions
336 
337 ********************************************************************/
338 
339  int DLLEXPORT ENaddpattern(const char *id);
340 
341  int DLLEXPORT ENdeletepattern(int index);
342 
343  int DLLEXPORT ENgetpatternindex(const char *id, int *index);
344 
345  int DLLEXPORT ENgetpatternid(int index, char *id);
346 
347  int DLLEXPORT ENsetpatternid(int index, const char *id);
348 
349  int DLLEXPORT ENgetpatternlen(int index, int *len);
350 
351  int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value);
352 
353  int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value);
354 
355  int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value);
356 
357  int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len);
358 
359  int DLLEXPORT ENloadpatternfile(const char *filename, const char *id);
360 
361 /********************************************************************
362 
363  Data Curve Functions
364 
365 ********************************************************************/
366 
367  int DLLEXPORT ENaddcurve(const char *id);
368 
369  int DLLEXPORT ENdeletecurve(int index);
370 
371  int DLLEXPORT ENgetcurveindex(const char *id, int *index);
372 
373  int DLLEXPORT ENgetcurveid(int index, char *id);
374 
375  int DLLEXPORT ENsetcurveid(int index, const char *id);
376 
377  int DLLEXPORT ENgetcurvelen(int index, int *len);
378 
379  int DLLEXPORT ENgetcurvetype(int index, int *type);
380 
381  int DLLEXPORT ENsetcurvetype(int index, int type);
382 
383  int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex,
384  EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
385 
386  int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex,
387  EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
388 
389  int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints,
390  EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues);
391 
392  int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues,
393  EN_API_FLOAT_TYPE *yValues, int nPoints);
394 
395 /********************************************************************
396 
397  Simple Controls Functions
398 
399 ********************************************************************/
400 
401  int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting,
402  int nodeIndex, EN_API_FLOAT_TYPE level, int *index);
403 
404  int DLLEXPORT ENdeletecontrol(int index);
405 
406  int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex,
407  EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level);
408 
409  int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex,
410  EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level);
411 
412  int DLLEXPORT ENgetcontrolenabled(int index, int *out_enabled);
413 
414  int DLLEXPORT ENsetcontrolenabled(int index, int enabled);
415 
416 /********************************************************************
417 
418  Rule-Based Controls Functions
419 
420 ********************************************************************/
421 
422  int DLLEXPORT ENaddrule(char *rule);
423 
424  int DLLEXPORT ENdeleterule(int index);
425 
426  int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions,
427  int *nElseActions, EN_API_FLOAT_TYPE *priority);
428 
429  int DLLEXPORT ENgetruleID(int index, char* id);
430 
431  int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop,
432  int *object, int *objIndex, int *variable,
433  int *relop, int *status, EN_API_FLOAT_TYPE *value);
434 
435  int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop,
436  int object, int objIndex, int variable, int relop,
437  int status, EN_API_FLOAT_TYPE value);
438 
439  int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex);
440 
441  int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status);
442 
443  int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex,
444  EN_API_FLOAT_TYPE value);
445 
446  int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex,
447  int *status, EN_API_FLOAT_TYPE *setting);
448 
449  int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex,
450  int status, EN_API_FLOAT_TYPE setting);
451 
452  int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex,
453  int *status, EN_API_FLOAT_TYPE *setting);
454 
455  int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex,
456  int status, EN_API_FLOAT_TYPE setting);
457 
458  int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority);
459 
460  int DLLEXPORT ENgetruleenabled(int index, int *out_enabled);
461 
462  int DLLEXPORT ENsetruleenabled(int index, int enabled);
463 
464  #if defined(__cplusplus)
465  }
466  #endif
467 
468 #endif //EPANET2_H