EPANET
epanet2.h
1 /*
2  ******************************************************************************
3  Project: OWA EPANET
4  Version: 2.2
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: 09/28/2023
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 unneccesary 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 ENgetcount(int object, int *count);
88 
89  int DLLEXPORT ENsaveinpfile(const char *filename);
90 
91  int DLLEXPORT ENclose();
92 
93 /********************************************************************
94 
95  Hydraulic Analysis Functions
96 
97 ********************************************************************/
98 
99  int DLLEXPORT ENsolveH();
100 
101  int DLLEXPORT ENsaveH();
102 
103  int DLLEXPORT ENopenH();
104 
105  int DLLEXPORT ENinitH(int initFlag);
106 
107  int DLLEXPORT ENrunH(long *currentTime);
108 
109  int DLLEXPORT ENnextH(long *tStep);
110 
111  int DLLEXPORT ENcloseH();
112 
113  int DLLEXPORT ENsavehydfile(const char *filename);
114 
115  int DLLEXPORT ENusehydfile(const char *filename);
116 
117 /********************************************************************
118 
119  Water Quality Analysis Functions
120 
121 ********************************************************************/
122 
123  int DLLEXPORT ENsolveQ();
124 
125  int DLLEXPORT ENopenQ();
126 
127  int DLLEXPORT ENinitQ(int saveFlag);
128 
129  int DLLEXPORT ENrunQ(long *currentTime);
130 
131  int DLLEXPORT ENnextQ(long *tStep);
132 
133  int DLLEXPORT ENstepQ(long *timeLeft);
134 
135  int DLLEXPORT ENcloseQ();
136 
137 /********************************************************************
138 
139  Reporting Functions
140 
141 ********************************************************************/
142 
143  int DLLEXPORT ENwriteline(const char *line);
144 
145  int DLLEXPORT ENreport();
146 
147  int DLLEXPORT ENcopyreport(const char *filename);
148 
149  int DLLEXPORT ENclearreport();
150 
151  int DLLEXPORT ENresetreport();
152 
153  int DLLEXPORT ENsetreport(const char *format);
154 
155  int DLLEXPORT ENsetstatusreport(int level);
156 
157  int DLLEXPORT ENgetversion(int *version);
158 
159  int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen);
160 
161  int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE* value);
162 
163  int DLLEXPORT ENgetresultindex(int type, int index, int *value);
164 
165  int DLLEXPORT ENtimetonextevent(int *eventType, long *duration, int *elementIndex);
166 
167  int DLLEXPORT ENsetreportcallback(void (*callback)(void *userData, void *EN_projectHandle, const char*));
168  int DLLEXPORT ENsetreportcallbackuserdata(void *userData);
169 
170 
171 /********************************************************************
172 
173  Analysis Options Functions
174 
175 ********************************************************************/
176 
177  int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value);
178 
179  int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value);
180 
181  int DLLEXPORT ENgetflowunits(int *units);
182 
183  int DLLEXPORT ENsetflowunits(int units);
184 
185  int DLLEXPORT ENgettimeparam(int param, long *value);
186 
187  int DLLEXPORT ENsettimeparam(int param, long value);
188 
189  int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits,
190  int *traceNode);
191 
192  int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode);
193 
194  int DLLEXPORT ENsetqualtype(int qualType, const char *chemName,
195  const char *chemUnits, const char *traceNode);
196 
197 /********************************************************************
198 
199  Node Functions
200 
201 ********************************************************************/
202 
203  int DLLEXPORT ENaddnode(const char *id, int nodeType, int *index);
204 
205  int DLLEXPORT ENdeletenode(int index, int actionCode);
206 
207  int DLLEXPORT ENgetnodeindex(const char *id, int *index);
208 
209  int DLLEXPORT ENgetnodeid(int index, char *id);
210 
211  int DLLEXPORT ENsetnodeid(int index, const char *newid);
212 
213  int DLLEXPORT ENgetnodetype(int index, int *nodeType);
214 
215  int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value);
216 
217  int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value);
218 
219  int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev,
220  EN_API_FLOAT_TYPE dmnd, const char *dmndpat);
221 
222  int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev,
223  EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl,
224  EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam,
225  EN_API_FLOAT_TYPE minvol, const char *volcurve);
226 
227  int DLLEXPORT ENgetcoord(int index, double *x, double *y);
228 
229  int DLLEXPORT ENsetcoord(int index, double x, double y);
230 
231 /********************************************************************
232 
233  Nodal Demand Functions
234 
235 ********************************************************************/
236 
237  int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin,
238  EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp);
239 
240  int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin,
241  EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp);
242 
243  int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand,
244  const char *demandPattern, const char *demandName);
245 
246  int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex);
247 
248  int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands);
249 
250  int DLLEXPORT ENgetdemandindex(int nodeIndex, const char *demandName,
251  int *demandIndex);
252 
253  int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex,
254  EN_API_FLOAT_TYPE *baseDemand);
255 
256  int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex,
257  EN_API_FLOAT_TYPE baseDemand);
258 
259  int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *patIndex);
260 
261  int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex);
262 
263  int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName);
264 
265  int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, const char *demandName);
266 
267 /********************************************************************
268 
269  Link Functions
270 
271 ********************************************************************/
272 
273  int DLLEXPORT ENaddlink(const char *id, int linkType, const char *fromNode,
274  const char *toNode, int *index);
275 
276  int DLLEXPORT ENdeletelink(int index, int actionCode);
277 
278  int DLLEXPORT ENgetlinkindex(const char *id, int *index);
279 
280  int DLLEXPORT ENgetlinkid(int index, char *id);
281 
282  int DLLEXPORT ENsetlinkid(int index, const char *newid);
283 
284  int DLLEXPORT ENgetlinktype(int index, int *linkType);
285 
286  int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode);
287 
288  int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2);
289 
290  int DLLEXPORT ENsetlinknodes(int index, int node1, int node2);
291 
292  int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value);
293 
294  int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value);
295 
296  int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length,
297  EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough,
298  EN_API_FLOAT_TYPE mloss);
299 
300  int DLLEXPORT ENgetvertexcount(int index, int *count);
301 
302  int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y);
303 
304  int DLLEXPORT ENsetvertex(int index, int vertex, double x, double y);
305 
306  int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count);
307 
308 /********************************************************************
309 
310  Pump Functions
311 
312 ********************************************************************/
313 
314  int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType);
315 
316  int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex);
317 
318  int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex);
319 
320 /********************************************************************
321 
322  Time Pattern Functions
323 
324 ********************************************************************/
325 
326  int DLLEXPORT ENaddpattern(const char *id);
327 
328  int DLLEXPORT ENdeletepattern(int index);
329 
330  int DLLEXPORT ENgetpatternindex(const char *id, int *index);
331 
332  int DLLEXPORT ENgetpatternid(int index, char *id);
333 
334  int DLLEXPORT ENsetpatternid(int index, const char *id);
335 
336  int DLLEXPORT ENgetpatternlen(int index, int *len);
337 
338  int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value);
339 
340  int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value);
341 
342  int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value);
343 
344  int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len);
345 
346 /********************************************************************
347 
348  Data Curve Functions
349 
350 ********************************************************************/
351 
352  int DLLEXPORT ENaddcurve(const char *id);
353 
354  int DLLEXPORT ENdeletecurve(int index);
355 
356  int DLLEXPORT ENgetcurveindex(const char *id, int *index);
357 
358  int DLLEXPORT ENgetcurveid(int index, char *id);
359 
360  int DLLEXPORT ENsetcurveid(int index, const char *id);
361 
362  int DLLEXPORT ENgetcurvelen(int index, int *len);
363 
364  int DLLEXPORT ENgetcurvetype(int index, int *type);
365 
366  int DLLEXPORT ENsetcurvetype(int index, int type);
367 
368  int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex,
369  EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y);
370 
371  int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex,
372  EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
373 
374  int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints,
375  EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues);
376 
377  int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues,
378  EN_API_FLOAT_TYPE *yValues, int nPoints);
379 
380 /********************************************************************
381 
382  Simple Controls Functions
383 
384 ********************************************************************/
385 
386  int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting,
387  int nodeIndex, EN_API_FLOAT_TYPE level, int *index);
388 
389  int DLLEXPORT ENdeletecontrol(int index);
390 
391  int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex,
392  EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level);
393 
394  int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex,
395  EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level);
396 
397  int DLLEXPORT ENgetcontrolenabled(int index, int *out_enabled);
398 
399  int DLLEXPORT ENsetcontrolenabled(int index, int enabled);
400 
401 /********************************************************************
402 
403  Rule-Based Controls Functions
404 
405 ********************************************************************/
406 
407  int DLLEXPORT ENaddrule(char *rule);
408 
409  int DLLEXPORT ENdeleterule(int index);
410 
411  int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions,
412  int *nElseActions, EN_API_FLOAT_TYPE *priority);
413 
414  int DLLEXPORT ENgetruleID(int index, char* id);
415 
416  int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop,
417  int *object, int *objIndex, int *variable,
418  int *relop, int *status, EN_API_FLOAT_TYPE *value);
419 
420  int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop,
421  int object, int objIndex, int variable, int relop,
422  int status, EN_API_FLOAT_TYPE value);
423 
424  int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex);
425 
426  int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status);
427 
428  int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex,
429  EN_API_FLOAT_TYPE value);
430 
431  int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex,
432  int *status, EN_API_FLOAT_TYPE *setting);
433 
434  int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex,
435  int status, EN_API_FLOAT_TYPE setting);
436 
437  int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex,
438  int *status, EN_API_FLOAT_TYPE *setting);
439 
440  int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex,
441  int status, EN_API_FLOAT_TYPE setting);
442 
443  int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority);
444 
445  int DLLEXPORT ENgetruleenabled(int index, int *out_enabled);
446 
447  int DLLEXPORT ENsetruleenabled(int index, int enabled);
448 
449  #if defined(__cplusplus)
450  }
451  #endif
452 
453 #endif //EPANET2_H