Skip to content

Commit 6a5b523

Browse files
committed
one step back to older version, ctypesgen version renamed epamoduleNEW
1 parent 1844aff commit 6a5b523

2 files changed

Lines changed: 970 additions & 64 deletions

File tree

epamodule.py

Lines changed: 138 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
import platform
88
import datetime
99

10-
"""_plat= platform.system()
10+
_plat= platform.system()
1111
if _plat=='Linux':
1212
_lib = ctypes.CDLL("libepanet.so.2")
1313
elif _plat=='Windows':
1414
try:
1515
# if epanet2.dll compiled with __cdecl (as in OpenWaterAnalytics)
16-
_lib = ctypes.CDLL("epanet2.dll")
16+
_lib = ctypes.CDLL("epamodule\epanet2.dll")
1717
_lib.ENgetversion(ctypes.byref(ctypes.c_int()))
1818
except ValueError:
1919
# if epanet2.dll compiled with __stdcall (as in EPA original DLL)
@@ -24,17 +24,14 @@
2424
raise Exception("epanet2.dll not suitable")
2525

2626
else:
27-
Exception('Platform '+ _plat +' unsupported (not yet)')"""
28-
import epanet2 as _lib
27+
Exception('Platform '+ _plat +' unsupported (not yet)')
2928

3029

3130
_current_simulation_time= ctypes.c_long()
3231

3332
_max_label_len= 32
34-
label = ctypes.create_string_buffer(_max_label_len)
35-
3633
_err_max_char= 80
37-
errmsg= _lib.String(_err_max_char*"\0")
34+
3835

3936

4037

@@ -53,6 +50,7 @@ def ENepanet(nomeinp, nomerpt='', nomebin='', vfunc=None):
5350
else:
5451
callback= None
5552
ierr= _lib.ENepanet(ctypes.c_char_p(nomeinp), ctypes.c_char_p(nomerpt), ctypes.c_char_p(nomebin), callback)
53+
print ierr
5654
if ierr!=0: raise ENtoolkitError(ierr)
5755

5856

@@ -90,6 +88,7 @@ def ENgetnodeid(index):
9088
9189
Arguments:
9290
index: node index"""
91+
label = ctypes.create_string_buffer(_max_label_len)
9392
ierr= _lib.ENgetnodeid(index, ctypes.byref(label))
9493
if ierr!=0: raise ENtoolkitError(ierr)
9594
return label.value
@@ -163,9 +162,10 @@ def ENgetlinkid(index):
163162
164163
Arguments:
165164
index: link index"""
166-
ierr= _lib.ENgetlinkid(index, label)
165+
label = ctypes.create_string_buffer(_max_label_len)
166+
ierr= _lib.ENgetlinkid(index, ctypes.byref(label))
167167
if ierr!=0: raise ENtoolkitError(ierr)
168-
return str(label)
168+
return label.value
169169

170170

171171
def ENgetlinktype(index):
@@ -222,9 +222,10 @@ def ENgetpatternid(index):
222222
223223
Arguments:
224224
index: pattern index"""
225-
ierr= _lib.ENgetpatternid(index, label)
225+
label = ctypes.create_string_buffer(_max_label_len)
226+
ierr= _lib.ENgetpatternid(index, ctypes.byref(label))
226227
if ierr!=0: raise ENtoolkitError(ierr)
227-
return str(label)
228+
return label.value
228229

229230
def ENgetpatternindex(patternid):
230231
"""Retrieves the index of a particular time pattern.
@@ -706,8 +707,9 @@ def ENsetstatusreport(statuslevel):
706707

707708
def ENgeterror(errcode):
708709
"""Retrieves the text of the message associated with a particular error or warning code."""
709-
_lib.ENgeterror( errcode, errmsg , _err_max_char )
710-
return str(errmsg)
710+
errmsg= ctypes.create_string_buffer(_err_max_char)
711+
_lib.ENgeterror( errcode,ctypes.byref(errmsg), _err_max_char )
712+
return errmsg.value
711713

712714
def ENwriteline(line ):
713715
"""Writes a line of text to the EPANET report file."""
@@ -732,11 +734,12 @@ def __str__(self):
732734
#----------------------------------------------------------------------------------
733735
if hasattr(_lib,"ENgetcurve"):
734736
def ENgetcurve(curveIndex):
737+
curveid = ctypes.create_string_buffer(_max_label_len)
735738
nValues = ctypes.c_int()
736739
xValues= ctypes.POINTER(ctypes.c_float)()
737740
yValues= ctypes.POINTER(ctypes.c_float)()
738741
ierr= _lib.ENgetcurve(curveIndex,
739-
label,
742+
ctypes.byref(curveid),
740743
ctypes.byref(nValues),
741744
ctypes.byref(xValues),
742745
ctypes.byref(yValues)
@@ -750,71 +753,142 @@ def ENgetcurve(curveIndex):
750753
return curve
751754

752755
def ENgetcurveid(curveIndex):
756+
curveid = ctypes.create_string_buffer(_max_label_len)
753757
nValues = ctypes.c_int()
754758
xValues= ctypes.POINTER(ctypes.c_float)()
755759
yValues= ctypes.POINTER(ctypes.c_float)()
756760
ierr= _lib.ENgetcurve(curveIndex,
757-
label,
761+
ctypes.byref(curveid),
758762
ctypes.byref(nValues),
759763
ctypes.byref(xValues),
760764
ctypes.byref(yValues)
761765
)
762766
# strange behavior of ENgetcurve: it returns also curveID
763767
# better split in two distinct functions ....
764768
if ierr!=0: raise ENtoolkitError(ierr)
765-
return str(label)
769+
return curveid.value
766770

767771
#-----end of functions added from OpenWaterAnalytics ----------------------------------
768772

769-
# /* Node parameters */
770-
from epanet2 import EN_ELEVATION, EN_BASEDEMAND, EN_PATTERN, EN_EMITTER, EN_INITQUAL, EN_SOURCEQUAL
771-
from epanet2 import EN_SOURCEPAT,EN_SOURCETYPE,EN_TANKLEVEL, EN_DEMAND, EN_HEAD, EN_PRESSURE
772-
from epanet2 import EN_QUALITY, EN_SOURCEMASS, EN_INITVOLUME, EN_MIXMODEL, EN_MIXZONEVOL
773-
774-
from epanet2 import EN_TANKDIAM,EN_MINVOLUME,EN_VOLCURVE,EN_MINLEVEL,EN_MAXLEVEL,EN_MIXFRACTION,EN_TANK_KBULK
775-
776-
# /* Link parameters */
777-
from epanet2 import EN_DIAMETER,EN_LENGTH,EN_ROUGHNESS,EN_MINORLOSS,EN_INITSTATUS,EN_INITSETTING
778-
from epanet2 import EN_KBULK,EN_KWALL,EN_FLOW,EN_VELOCITY,EN_HEADLOSS,EN_STATUS,EN_SETTING,EN_ENERGY
779-
780-
# /* Time parameters */
781-
from epanet2 import EN_DURATION,EN_HYDSTEP,EN_QUALSTEP,EN_PATTERNSTEP,EN_PATTERNSTART
782-
from epanet2 import EN_REPORTSTEP,EN_REPORTSTART,EN_RULESTEP,EN_STATISTIC,EN_PERIODS
783-
784-
# /* Component counts */
785-
from epanet2 import EN_NODECOUNT,EN_TANKCOUNT,EN_LINKCOUNT,EN_PATCOUNT,EN_CURVECOUNT,EN_CONTROLCOUNT
786-
787-
# /* Node types */
788-
from epanet2 import EN_JUNCTION,EN_RESERVOIR,EN_TANK
789-
790-
# /* Link types */
791-
from epanet2 import EN_CVPIPE,EN_PIPE,EN_PUMP,EN_PRV,EN_PSV,EN_PBV,EN_FCV,EN_TCV,EN_GPV
792-
793-
# /* Quality analysis types */
794-
from epanet2 import EN_NONE,EN_CHEM,EN_AGE,EN_TRACE
795-
796-
# /* Source quality types */
797-
from epanet2 import EN_CONCEN,EN_MASS,EN_SETPOINT,EN_FLOWPACED
798-
799-
# /* Flow units types */
800-
from epanet2 import EN_CFS,EN_GPM,EN_MGD,EN_IMGD,EN_AFD,EN_LPS,EN_LPM,EN_MLD,EN_CMH,EN_CMD
801-
802-
# /* Misc. options */
803-
from epanet2 import EN_TRIALS,EN_ACCURACY,EN_TOLERANCE,EN_EMITEXPON,EN_DEMANDMULT
804-
805-
# /* Control types */
806-
from epanet2 import EN_LOWLEVEL,EN_HILEVEL,EN_TIMER,EN_TIMEOFDAY
807-
808-
# /* Time statistic types. */
809-
from epanet2 import EN_AVERAGE,EN_MINIMUM,EN_MAXIMUM,EN_RANGE
810-
811-
# /* Tank mixing models */
812-
from epanet2 import EN_MIX1,EN_MIX2,EN_FIFO,EN_LIFO
813773

814-
# /* Save-results-to-file flag */
815-
from epanet2 import EN_NOSAVE,EN_SAVE
816-
# /* Re-initialize flow flag */
817-
from epanet2 import EN_INITFLOW
774+
EN_ELEVATION = 0 # /* Node parameters */
775+
EN_BASEDEMAND = 1
776+
EN_PATTERN = 2
777+
EN_EMITTER = 3
778+
EN_INITQUAL = 4
779+
EN_SOURCEQUAL = 5
780+
EN_SOURCEPAT = 6
781+
EN_SOURCETYPE = 7
782+
EN_TANKLEVEL = 8
783+
EN_DEMAND = 9
784+
EN_HEAD = 10
785+
EN_PRESSURE = 11
786+
EN_QUALITY = 12
787+
EN_SOURCEMASS = 13
788+
EN_INITVOLUME = 14
789+
EN_MIXMODEL = 15
790+
EN_MIXZONEVOL = 16
791+
792+
EN_TANKDIAM = 17
793+
EN_MINVOLUME = 18
794+
EN_VOLCURVE = 19
795+
EN_MINLEVEL = 20
796+
EN_MAXLEVEL = 21
797+
EN_MIXFRACTION = 22
798+
EN_TANK_KBULK = 23
799+
800+
EN_DIAMETER = 0 # /* Link parameters */
801+
EN_LENGTH = 1
802+
EN_ROUGHNESS = 2
803+
EN_MINORLOSS = 3
804+
EN_INITSTATUS = 4
805+
EN_INITSETTING = 5
806+
EN_KBULK = 6
807+
EN_KWALL = 7
808+
EN_FLOW = 8
809+
EN_VELOCITY = 9
810+
EN_HEADLOSS = 10
811+
EN_STATUS = 11
812+
EN_SETTING = 12
813+
EN_ENERGY = 13
814+
815+
EN_DURATION = 0 # /* Time parameters */
816+
EN_HYDSTEP = 1
817+
EN_QUALSTEP = 2
818+
EN_PATTERNSTEP = 3
819+
EN_PATTERNSTART = 4
820+
EN_REPORTSTEP = 5
821+
EN_REPORTSTART = 6
822+
EN_RULESTEP = 7
823+
EN_STATISTIC = 8
824+
EN_PERIODS = 9
825+
826+
EN_NODECOUNT = 0 # /* Component counts */
827+
EN_TANKCOUNT = 1
828+
EN_LINKCOUNT = 2
829+
EN_PATCOUNT = 3
830+
EN_CURVECOUNT = 4
831+
EN_CONTROLCOUNT = 5
832+
833+
EN_JUNCTION = 0 # /* Node types */
834+
EN_RESERVOIR = 1
835+
EN_TANK = 2
836+
837+
EN_CVPIPE = 0 # /* Link types */
838+
EN_PIPE = 1
839+
EN_PUMP = 2
840+
EN_PRV = 3
841+
EN_PSV = 4
842+
EN_PBV = 5
843+
EN_FCV = 6
844+
EN_TCV = 7
845+
EN_GPV = 8
846+
847+
EN_NONE = 0 # /* Quality analysis types */
848+
EN_CHEM = 1
849+
EN_AGE = 2
850+
EN_TRACE = 3
851+
852+
EN_CONCEN = 0 # /* Source quality types */
853+
EN_MASS = 1
854+
EN_SETPOINT = 2
855+
EN_FLOWPACED = 3
856+
857+
EN_CFS = 0 # /* Flow units types */
858+
EN_GPM = 1
859+
EN_MGD = 2
860+
EN_IMGD = 3
861+
EN_AFD = 4
862+
EN_LPS = 5
863+
EN_LPM = 6
864+
EN_MLD = 7
865+
EN_CMH = 8
866+
EN_CMD = 9
867+
868+
EN_TRIALS = 0 # /* Misc. options */
869+
EN_ACCURACY = 1
870+
EN_TOLERANCE = 2
871+
EN_EMITEXPON = 3
872+
EN_DEMANDMULT = 4
873+
874+
EN_LOWLEVEL = 0 # /* Control types */
875+
EN_HILEVEL = 1
876+
EN_TIMER = 2
877+
EN_TIMEOFDAY = 3
878+
879+
EN_AVERAGE = 1 # /* Time statistic types. */
880+
EN_MINIMUM = 2
881+
EN_MAXIMUM = 3
882+
EN_RANGE = 4
883+
884+
EN_MIX1 = 0 # /* Tank mixing models */
885+
EN_MIX2 = 1
886+
EN_FIFO = 2
887+
EN_LIFO = 3
888+
889+
EN_NOSAVE = 0 # /* Save-results-to-file flag */
890+
EN_SAVE = 1
891+
EN_INITFLOW = 10 # /* Re-initialize flow flag */
818892

819893

820894

0 commit comments

Comments
 (0)