77import platform
88import datetime
99
10- """ _plat= platform.system()
10+ _plat = platform .system ()
1111if _plat == 'Linux' :
1212 _lib = ctypes .CDLL ("libepanet.so.2" )
1313elif _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)
2424 raise Exception ("epanet2.dll not suitable" )
2525
2626else :
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
171171def 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
229230def ENgetpatternindex (patternid ):
230231 """Retrieves the index of a particular time pattern.
@@ -706,8 +707,9 @@ def ENsetstatusreport(statuslevel):
706707
707708def 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
712714def ENwriteline (line ):
713715 """Writes a line of text to the EPANET report file."""
@@ -732,11 +734,12 @@ def __str__(self):
732734#----------------------------------------------------------------------------------
733735if 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