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: 02/14/2025
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 ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev,
227  EN_API_FLOAT_TYPE dmnd, const char *dmndpat);
228 
229  int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev,
230  EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl,
231  EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
232  EN_API_FLOAT_TYPE minvol, const char *volcurve);
233 
234  int DLLEXPORT ENgetcoord(int index, double *x, double *y);
235 
236  int DLLEXPORT ENsetcoord(int index, double x, double y);
237 
238 /********************************************************************
239 
240  Nodal Demand Functions
241 
242 ********************************************************************/
243 
244  int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin,
245  EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp);
246 
247  int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin,
248  EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp);
249 
250  int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand,
251  const char *demandPattern, const char *demandName);
252 
253  int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex);
254 
255  int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands);
256 
257  int DLLEXPORT ENgetdemandindex(int nodeIndex, const char *demandName,
258  int *demandIndex);
259 
260  int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex,
261  EN_API_FLOAT_TYPE *baseDemand);
262 
263  int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex,
264  EN_API_FLOAT_TYPE baseDemand);
265 
266  int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *patIndex);
267 
268  int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex);
269 
270  int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName);
271 
272  int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, const char *demandName);
273 
274 /********************************************************************
275 
276  Link Functions
277 
278 ********************************************************************/
279 
280  int DLLEXPORT ENaddlink(const char *id, int linkType, const char *fromNode,
281  const char *toNode, int *index);
282 
283  int DLLEXPORT ENdeletelink(int index, int actionCode);
284 
285  int DLLEXPORT ENgetlinkindex(const char *id, int *index);
286 
287  int DLLEXPORT ENgetlinkid(int index, char *id);
288 
289  int DLLEXPORT ENsetlinkid(int index, const char *newid);
290 
291  int DLLEXPORT ENgetlinktype(int index, int *linkType);
292 
293  int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode);
294 
295  int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2);
296 
297  int DLLEXPORT ENsetlinknodes(int index, int node1, int node2);
298 
299  int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value);
300 
301  int DLLEXPORT ENgetlinkvalues(int property, EN_API_FLOAT_TYPE *value);
302 
303  int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value);
304 
305  int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length,
306  EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough,
307  EN_API_FLOAT_TYPE mloss);
308 
309  int DLLEXPORT ENgetvertexcount(int index, int *count);
310 
311  int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y);
312 
313  int DLLEXPORT ENsetvertex(int index, int vertex, double x, double y);
314 
315  int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count);
316 
317 /********************************************************************
318 
319  Pump Functions
320 
321 ********************************************************************/
322 
323  int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType);
324 
325  int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex);
326 
327  int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex);
328 
329 /********************************************************************
330 
331  Time Pattern Functions
332 
333 ********************************************************************/
334 
335  int DLLEXPORT ENaddpattern(const char *id);
336 
337  int DLLEXPORT ENdeletepattern(int index);
338 
339  int DLLEXPORT ENgetpatternindex(const char *id, int *index);
340 
341  int DLLEXPORT ENgetpatternid(int index, char *id);
342 
343  int DLLEXPORT ENsetpatternid(int index, const char *id);
344 
345  int DLLEXPORT ENgetpatternlen(int index, int *len);
346 
347  int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value);
348 
349  int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value);
350 
351  int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value);
352 
353  int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len);
354 
355  int DLLEXPORT ENloadpatternfile(const char *filename, const char *id);
356 
357 /********************************************************************
358 
359  Data Curve Functions
360 
361 ********************************************************************/
362 
363  int DLLEXPORT ENaddcurve(const char *id);
364 
365  int DLLEXPORT ENdeletecurve(int index);
366 
367  int DLLEXPORT ENgetcurveindex(const char *id, int *index);
368 
369  int DLLEXPORT ENgetcurveid(int index, char *id);
370 
371  int DLLEXPORT ENsetcurveid(int index, const char *id);
372 
373  int DLLEXPORT ENgetcurvelen(int index, int *len);
374 
375  int DLLEXPORT ENgetcurvetype(int index, int *type);
376 
377  int DLLEXPORT ENsetcurvetype(int index, int type);
378 
379  int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex,
380  EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
381 
382  int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex,
383  EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
384 
385  int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints,
386  EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues);
387 
388  int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues,
389  EN_API_FLOAT_TYPE *yValues, int nPoints);
390 
391 /********************************************************************
392 
393  Simple Controls Functions
394 
395 ********************************************************************/
396 
397  int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting,
398  int nodeIndex, EN_API_FLOAT_TYPE level, int *index);
399 
400  int DLLEXPORT ENdeletecontrol(int index);
401 
402  int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex,
403  EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level);
404 
405  int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex,
406  EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level);
407 
408  int DLLEXPORT ENgetcontrolenabled(int index, int *out_enabled);
409 
410  int DLLEXPORT ENsetcontrolenabled(int index, int enabled);
411 
412 /********************************************************************
413 
414  Rule-Based Controls Functions
415 
416 ********************************************************************/
417 
418  int DLLEXPORT ENaddrule(char *rule);
419 
420  int DLLEXPORT ENdeleterule(int index);
421 
422  int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions,
423  int *nElseActions, EN_API_FLOAT_TYPE *priority);
424 
425  int DLLEXPORT ENgetruleID(int index, char* id);
426 
427  int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop,
428  int *object, int *objIndex, int *variable,
429  int *relop, int *status, EN_API_FLOAT_TYPE *value);
430 
431  int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop,
432  int object, int objIndex, int variable, int relop,
433  int status, EN_API_FLOAT_TYPE value);
434 
435  int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex);
436 
437  int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status);
438 
439  int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex,
440  EN_API_FLOAT_TYPE value);
441 
442  int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex,
443  int *status, EN_API_FLOAT_TYPE *setting);
444 
445  int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex,
446  int status, EN_API_FLOAT_TYPE setting);
447 
448  int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex,
449  int *status, EN_API_FLOAT_TYPE *setting);
450 
451  int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex,
452  int status, EN_API_FLOAT_TYPE setting);
453 
454  int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority);
455 
456  int DLLEXPORT ENgetruleenabled(int index, int *out_enabled);
457 
458  int DLLEXPORT ENsetruleenabled(int index, int enabled);
459 
460  #if defined(__cplusplus)
461  }
462  #endif
463 
464 #endif //EPANET2_H