2
2
3
3
#
4
4
# __init__.py - EPANET output package
5
- #
5
+ #
6
6
# Date Created: August 15, 2018
7
7
#
8
8
# Author: Michael E. Tryby
19
19
__credits__ = "Maurizio Cingi"
20
20
__license__ = "CC0 1.0 Universal"
21
21
22
- __version__ = "0.1.1 "
22
+ __version__ = "0.2.0 "
23
23
__date__ = "August 15, 2018"
24
24
25
25
__maintainer__ = "Michael Tryby"
29
29
30
30
from enum import Enum , auto
31
31
32
- from epanet .output import output as oapi
32
+ from epanet .output import output as oapi
33
33
34
34
35
35
class Units (Enum ):
@@ -41,107 +41,107 @@ class Units(Enum):
41
41
HEADLOSS = auto ()
42
42
RX_RATE = auto ()
43
43
UNITLESS = auto ()
44
- NONE = auto ()
44
+ NONE = auto ()
45
45
46
46
class RxUnits (Enum ):
47
- MGH = auto ()
47
+ MGH = auto ()
48
48
UGH = auto ()
49
49
50
50
51
51
class OutputMetadata ():
52
52
'''
53
53
Simple attribute name and unit lookup.
54
54
'''
55
-
55
+
56
56
_unit_labels_us_ = {
57
57
Units .HYD_HEAD : "ft" ,
58
58
Units .VELOCITY : "ft/sec" ,
59
- Units .HEADLOSS : "ft/1000ft" ,
59
+ Units .HEADLOSS : "ft/1000ft" ,
60
60
Units .UNITLESS : "unitless" ,
61
61
Units .NONE : "" ,
62
-
62
+
63
63
RxUnits .MGH : "mg/hr" ,
64
64
RxUnits .UGH : "ug/hr" ,
65
-
65
+
66
66
oapi .FlowUnits .CFS : "cu ft/s" ,
67
67
oapi .FlowUnits .GPM : "gal/min" ,
68
68
oapi .FlowUnits .MGD : "M gal/day" ,
69
69
oapi .FlowUnits .IMGD : "M Imp gal/day" ,
70
70
oapi .FlowUnits .AFD : "ac ft/day" ,
71
-
72
- oapi .PressUnits .PSI : "psi" ,
73
-
74
- oapi .QualUnits .NONE : "" ,
71
+
72
+ oapi .PressUnits .PSI : "psi" ,
73
+
74
+ oapi .QualUnits .NONE : "" ,
75
75
oapi .QualUnits .MGL : "mg/L" ,
76
76
oapi .QualUnits .UGL : "ug/L" ,
77
- oapi .QualUnits .HOURS : "hrs" ,
77
+ oapi .QualUnits .HOURS : "hrs" ,
78
78
oapi .QualUnits .PRCNT : "%" }
79
79
80
80
_unit_labels_si_ = {
81
81
Units .HYD_HEAD : "m" ,
82
82
Units .VELOCITY : "m/sec" ,
83
- Units .HEADLOSS : "m/Km" ,
83
+ Units .HEADLOSS : "m/Km" ,
84
84
Units .UNITLESS : "unitless" ,
85
85
Units .NONE : "" ,
86
-
86
+
87
87
RxUnits .MGH : "mg/hr" ,
88
88
RxUnits .UGH : "ug/hr" ,
89
-
89
+
90
90
oapi .FlowUnits .LPS : "L/sec" ,
91
91
oapi .FlowUnits .LPM : "L/min" ,
92
92
oapi .FlowUnits .MLD : "M L/day" ,
93
93
oapi .FlowUnits .CMH : "cu m/hr" ,
94
94
oapi .FlowUnits .CMD : "cu m/day" ,
95
-
95
+
96
96
oapi .PressUnits .MTR : "meters" ,
97
97
oapi .PressUnits .KPA : "kPa" ,
98
-
99
- oapi .QualUnits .NONE : "" ,
98
+
99
+ oapi .QualUnits .NONE : "" ,
100
100
oapi .QualUnits .MGL : "mg/L" ,
101
101
oapi .QualUnits .UGL : "ug/L" ,
102
- oapi .QualUnits .HOURS : "hrs" ,
102
+ oapi .QualUnits .HOURS : "hrs" ,
103
103
oapi .QualUnits .PRCNT : "%" }
104
104
105
-
105
+
106
106
def __init__ (self , output_handle ):
107
-
107
+
108
108
self .units = list ()
109
109
# If outputhandle not initialized use default settings
110
- if output_handle == None :
111
- self .units = [oapi .FlowUnits .GPM .value ,
112
- oapi .PressUnits .PSI .value ,
110
+ if output_handle == None :
111
+ self .units = [oapi .FlowUnits .GPM .value ,
112
+ oapi .PressUnits .PSI .value ,
113
113
oapi .QualUnits .NONE .value ]
114
114
# Else quary the output api for unit settings
115
115
else :
116
- for u in oapi .Units :
116
+ for u in oapi .Units :
117
117
self .units .append (oapi .getunits (output_handle , u ))
118
-
119
- # Convert unit settings to enums
118
+
119
+ # Convert unit settings to enums
120
120
self ._flow = oapi .FlowUnits (self .units [0 ])
121
121
self ._press = oapi .PressUnits (self .units [1 ])
122
122
self ._qual = oapi .QualUnits (self .units [2 ])
123
-
123
+
124
124
# Determine unit system from flow setting
125
125
if self ._flow .value <= oapi .FlowUnits .AFD .value :
126
126
self ._unit_labels = type (self )._unit_labels_us_
127
127
else :
128
- self ._unit_labels = type (self )._unit_labels_si_
129
-
128
+ self ._unit_labels = type (self )._unit_labels_si_
129
+
130
130
# Determine mass units from quality settings
131
131
if self ._qual == oapi .QualUnits .MGL :
132
132
self ._rx_rate = RxUnits .MGH
133
133
elif self ._qual == oapi .QualUnits .UGL :
134
134
self ._rx_rate = RxUnits .UGH
135
135
else :
136
- self ._rx_rate = Units .NONE
136
+ self ._rx_rate = Units .NONE
137
137
138
138
139
139
self ._metadata = {
140
140
oapi .NodeAttribute .DEMAND : ("Demand" , self ._unit_labels [self ._flow ]),
141
141
oapi .NodeAttribute .HEAD : ("Head" , self ._unit_labels [Units .HYD_HEAD ]),
142
142
oapi .NodeAttribute .PRESSURE : ("Pressure" , self ._unit_labels [self ._press ]),
143
143
oapi .NodeAttribute .QUALITY : ("Quality" , self ._unit_labels [self ._qual ]),
144
-
144
+
145
145
oapi .LinkAttribute .FLOW : ("Flow" , self ._unit_labels [self ._flow ]),
146
146
oapi .LinkAttribute .VELOCITY : ("Velocity" , self ._unit_labels [Units .VELOCITY ]),
147
147
oapi .LinkAttribute .HEADLOSS : ("Unit Headloss" , self ._unit_labels [Units .HEADLOSS ]),
@@ -152,7 +152,7 @@ def __init__(self, output_handle):
152
152
oapi .LinkAttribute .FRCTN_FCTR : ("Friction Factor" , self ._unit_labels [Units .UNITLESS ])
153
153
}
154
154
155
-
155
+
156
156
def get_attribute_metadata (self , attribute ):
157
157
'''
158
158
Takes an attribute enum and returns a tuple with name and units.
0 commit comments