EPANET  3.0
EPANET Development Project
epanet3.h
1 /* EPANET 3
2  *
3  * Copyright (c) 2016 Open Water Analytics
4  * Licensed under the terms of the MIT License (see the LICENSE file for details).
5  *
6  */
7 
8 #ifndef EPANET3_H_
9 #define EPANET3_H_
10 
11 //************************************
12 // EPANET 3's API FUNCTION LIBRARY *
13 //************************************
14 
15 typedef void * EN_Project;
16 
17 enum NodeParams {
18 
19  EN_ELEVATION, //0
20  EN_BASEDEMAND, //1
21  EN_BASEPATTERN, //2
22  EN_EMITTERFLOW, //3
23  EN_INITQUAL, //4
24  EN_SOURCEQUAL, //5
25  EN_SOURCEPAT, //6
26  EN_SOURCETYPE, //7
27 
28  EN_TANKLEVEL, //8
29  EN_FULLDEMAND, //9
30  EN_HEAD, //10
31  EN_PRESSURE, //11
32  EN_QUALITY, //12
33  EN_SOURCEMASS, //13
34 
35  EN_INITVOLUME, //14
36  EN_MIXMODEL, //15
37  EN_MIXZONEVOL, //16
38  EN_TANKDIAM, //17
39  EN_MINVOLUME, //18
40  EN_VOLCURVE, //19
41  EN_MINLEVEL, //20
42  EN_MAXLEVEL, //21
43  EN_MIXFRACTION, //22
44  EN_TANK_KBULK, //23
45  EN_TANKVOLUME, //24
46 
47  EN_ACTUALDEMAND, //25
48  EN_OUTFLOW}; //26
49 
50 enum LinkParams {
51  EN_DIAMETER, //0
52  EN_LENGTH, //1
53  EN_ROUGHNESS, //2
54  EN_MINORLOSS, //3
55  EN_INITSTATUS, //4
56  EN_INITSETTING, //5
57  EN_KBULK, //6
58  EN_KWALL, //7
59  EN_FLOW, //8
60  EN_VELOCITY, //9
61  EN_HEADLOSS, //10
62  EN_STATUS, //11
63  EN_SETTING, //12
64  EN_ENERGY, //13
65  EN_LINKQUAL, //14
66  EN_LEAKCOEFF1, //15
67  EN_LEAKCOEFF2, //16
68  EN_LEAKAGE}; //17
69 
70 enum TimeParams {
71  EN_DURATION, //0
72  EN_HYDSTEP, //1
73  EN_QUALSTEP, //2
74  EN_PATTERNSTEP, //3
75  EN_PATTERNSTART, //4
76  EN_REPORTSTEP, //5
77  EN_REPORTSTART, //6
78  EN_RULESTEP, //7
79  EN_STATISTIC, //8
80  EN_PERIODS, //9
81  EN_STARTDATE}; //10
82 
83 enum ElementCounts {
84  EN_NODECOUNT, //0
85  EN_TANKCOUNT, //1
86  EN_LINKCOUNT, //2
87  EN_PATCOUNT, //3
88  EN_CURVECOUNT, //4
89  EN_CONTROLCOUNT, //5
90  EN_RULECOUNT, //6
91  EN_RESVCOUNT}; //7
92 
93 enum NodeTypes {
94  EN_JUNCTION, //0
95  EN_RESERVOIR, //1
96  EN_TANK}; //2
97 
98 enum LinkTypes {
99  EN_CVPIPE, //0
100  EN_PIPE, //1
101  EN_PUMP, //2
102  EN_PRV, //3
103  EN_PSV, //4
104  EN_PBV, //5
105  EN_FCV, //6
106  EN_TCV, //7
107  EN_GPV}; //8
108 
109 enum QualModelTypes {
110  EN_NONE, //0
111  EN_CHEM, //1
112  EN_AGE , //2
113  EN_TRACE}; //3
114 
115 enum QualSourceTypes {
116  EN_CONCEN, //0
117  EN_MASS, //1
118  EN_SETPOINT, //2
119  EN_FLOWPACED}; //3
120 
121 enum FlowUnitsTypes {
122  EN_CFS, //0
123  EN_GPM, //1
124  EN_MGD, //2
125  EN_IMGD, //3
126  EN_AFD, //4
127  EN_LPS, //5
128  EN_LPM, //6
129  EN_MLD, //7
130  EN_CMH, //8
131  EN_CMD}; //9
132 
133 enum OptionTypes {
134  EN_TRIALS, //0
135  EN_ACCURACY, //1
136  EN_QUALTOL, //2
137  EN_EMITEXPON, //3
138  EN_DEMANDMULT, //4
139  EN_HYDTOL, //5
140  EN_MINPRESSURE, //6
141  EN_MAXPRESSURE, //7
142  EN_PRESSEXPON, //8
143  EN_NETLEAKCOEFF1, //9
144  EN_NETLEAKCOEFF2}; //10
145 
146 enum ControlTypes {
147  EN_LOWLEVEL, //0
148  EN_HILEVEL, //1
149  EN_TIMER, //2
150  EN_TIMEOFDAY}; //3
151 
152 enum StatisticTypes {
153  EN_AVERAGE, //1
154  EN_MINIMUM, //2
155  EN_MAXIMUM, //3
156  EN_RANGE}; //4
157 
158 enum TankMixTypes {
159  EN_MIX1, //0
160  EN_MIX2, //1
161  EN_FIFO, //2
162  EN_LIFO}; //3
163 
164 enum InitFlowTypes {
165  EN_NOINITFLOW, //0
166  EN_INITFLOW}; //1
167 
168 
169 #ifdef __cplusplus
170 extern "C" {
171 #endif
172 
173 int EN_getVersion(int *);
174 int EN_runEpanet(const char* inpFile, const char* rptFile, const char* outFile);
175 
176 EN_Project EN_createProject();
177 int EN_cloneProject(EN_Project pClone, EN_Project pSource);
178 int EN_deleteProject(EN_Project p);
179 
180 int EN_loadProject(const char* fname, EN_Project p);
181 int EN_runProject(EN_Project p);
182 int EN_saveProject(const char* fname, EN_Project p);
183 int EN_clearProject(EN_Project p);
184 
185 int EN_initSolver(int initFlows, EN_Project p);
186 int EN_runSolver(int* t, EN_Project p);
187 int EN_advanceSolver(int* dt, EN_Project p);
188 
189 int EN_openOutputFile(const char* fname, EN_Project p);
190 int EN_saveOutput(EN_Project p);
191 
192 int EN_openReportFile(const char* fname, EN_Project p);
193 int EN_writeReport(EN_Project p);
194 int EN_writeSummary(EN_Project p);
195 int EN_writeResults(int t, EN_Project p);
196 int EN_writeMsgLog(EN_Project p);
197 
198 int EN_getCount(int, int *, EN_Project);
199 int EN_getNodeIndex(char *, int *, EN_Project);
200 int EN_getNodeId(int, char *, EN_Project);
201 int EN_getNodeType(int, int *, EN_Project);
202 int EN_getNodeValue(int, int, double *, EN_Project);
203 
204 int EN_getLinkIndex(char *, int *, EN_Project);
205 int EN_getLinkId(int, char *, EN_Project);
206 int EN_getLinkType(int, int *, EN_Project);
207 int EN_getLinkNodes(int, int *, int *, EN_Project);
208 int EN_getLinkValue(int, int, double *, EN_Project);
209 
210 //==================================================================================
211 /* TO BE ADDED
212 
213 int EN_getOption(int, double *, EN_Project);
214 int EN_getTimeParam(int, long *, EN_Project);
215 int EN_getFlowUnits(int *, EN_Project);
216 int EN_getPatternIndex(char *, int *, EN_Project);
217 int EN_getPatternId(int, char *, EN_Project);
218 int EN_getPatternPeriod(int, int*, EN_Project);
219 int EN_getPatternLen(int, int *,EN_Project);
220 int EN_getPatternValue(int, int, double *, EN_Project);
221 int EN_getQualModel(int *, EN_Project);
222 int EN_getError(int, char *, int, EN_Project);
223 int EN_getControl(int, int *, int *, double *, int *, double *, EN_Project);
224 
225 int EN_setControl(int, int, int, double, int, double, EN_Project);
226 int EN_setNodeValue(int, int, double, EN_Project);
227 int EN_setLinkValue(int, int, double, EN_Project);
228 int EN_addPattern(char *, EN_Project);
229 int EN_setPattern(int, double *, int, EN_Project);
230 int EN_setPatternValue(int, int, double, EN_Project);
231 int EN_setTimeParam(int, int, EN_Project);
232 int EN_setOption(int, double, EN_Project);
233 int EN_setStatusReport(int, EN_Project);
234 int EN_setQualType(int, char *, char *, char *, EN_Project);
235 
236 int EN_createNode(char *, int, EN_Project);
237 int EN_createLink(char *, int, int, int, EN_Project);
238 int EN_createCurve(char *, int, int, double *, double *, EN_Project);
239 int EN_createFixedPattern(char *, int, int, double *, EN_Project);
240 int EN_createVarPattern(char *, int, int *, double *, EN_Project);
241 int EN_createControl(char *, EN_Project);
242 
243 int EN_deleteNode(char *, EN_Project);
244 int EN_deleteLink(char *, EN_Project);
245 int EN_deleteCurve(char *, EN_Project);
246 int EN_deletePattern(char *, EN_Project);
247 */
248 
249 #ifdef __cplusplus
250 }
251 #endif
252 
253 #endif /* EPANET3_H_ */