This commit is contained in:
Elad Salomons
2018-04-09 15:02:19 +03:00
40 changed files with 222 additions and 14233 deletions

View File

@@ -4,7 +4,7 @@ env:
global:
- EPANET_HOME=`pwd`
- BUILD_HOME=buildprod
- TEST_HOME=tests/epanet-nrtestsuite
- TEST_HOME=nrtestsuite
before_install:
- sudo apt-get -qq update
@@ -26,5 +26,5 @@ script:
# run regression tests
- cd $EPANET_HOME
- pip install -r tools/requirements.txt
- tools/gen-config.sh $EPANET_HOME/$BUILD_HOME/bin > $TEST_HOME/apps/epanet-$TRAVIS_COMMIT.json
- tools/before-test.sh $TEST_HOME $EPANET_HOME/$BUILD_HOME/bin $TRAVIS_COMMIT
- tools/run-nrtest.sh $TEST_HOME $TRAVIS_COMMIT

View File

@@ -16,7 +16,7 @@ image:
init:
- set EPANET_HOME=%APPVEYOR_BUILD_FOLDER%
- set BUILD_HOME=buildprod
- set TEST_HOME=tests\epanet-nrtestsuite
- set TEST_HOME=nrtestsuite
- set NRTEST_SCRIPT=C:\Python27\Scripts
- set GENERATOR="Visual Studio 10 2010"
- set BOOST_ROOT="C:\\Libraries\\boost"
@@ -41,7 +41,7 @@ build_script:
before_test:
- cd %EPANET_HOME%
- tools\gen-config.cmd %EPANET_HOME%\%BUILD_HOME%\bin\Release > %TEST_HOME%\apps\epanet-%APPVEYOR_REPO_COMMIT%.json
- tools\before-test.cmd %TEST_HOME% %EPANET_HOME%\%BUILD_HOME%\bin\Release %APPVEYOR_REPO_COMMIT%
# run custom test script
test_script:

9
tests/.gitignore vendored
View File

@@ -1,9 +0,0 @@
# Ignore app description files generated for nrtest
apps/
# Ignore results generated during nrtest execution
benchmark/
# Except changes to reference benchmark
!benchmark/epanet-2012 # Results for EPANET 2.0.12 MSVC 2010 32-bit

View File

@@ -1,7 +0,0 @@
{
"name" : "epanet",
"version" : "2.0.11a",
"description" : "Windows, MS VC2005 or older, 32 Bit",
"setup_script" : "",
"exe" : "epanet2011a.exe"
}

View File

@@ -1,7 +0,0 @@
{
"name" : "epanet",
"version" : "2.0.12",
"description" : "Windows, MS VC 2010, 32 Bit",
"setup_script" : "",
"exe" : "./epanet2012.exe"
}

View File

@@ -1,4 +0,0 @@
{
"duration": 0.87,
"max_memory_MB": 0.0
}

View File

@@ -1,4 +0,0 @@
{
"duration": 1.045,
"max_memory_MB": 0.0
}

View File

@@ -1,4 +0,0 @@
{
"duration": 0.246,
"max_memory_MB": 0.0
}

View File

@@ -1,42 +0,0 @@
{
"Application": {
"description": "Windows, MS VC 2010, 32 Bit",
"name": "epanet",
"version": "2.0.12"
},
"Tests": [
{
"description": "A simple example of modeling chlorine decay",
"error_msg": null,
"name": "Example 1",
"output_files": {
"example1.out": "epanet allclose",
"example1.rpt": "epanet report"
},
"passed": true,
"version": "1.0"
},
{
"description": "Example of modeling a 55-hour fluoride tracer study.",
"error_msg": null,
"name": "Example 2",
"output_files": {
"example2.out": "epanet allclose",
"example2.rpt": "epanet report"
},
"passed": true,
"version": "1.0"
},
{
"description": "Dual-source system example",
"error_msg": null,
"name": "Example 3",
"output_files": {
"example3.out": "epanet allclose",
"example3.rpt": "epanet report"
},
"passed": true,
"version": "1.0"
}
]
}

View File

@@ -1,180 +0,0 @@
[TITLE]
EPANET Example Network 1
A simple example of modeling chlorine decay. Both bulk and
wall reactions are included.
[JUNCTIONS]
;ID Elev Demand Pattern
10 710 0 ;
11 710 150 ;
12 700 150 ;
13 695 100 ;
21 700 150 ;
22 695 200 ;
23 690 150 ;
31 700 100 ;
32 710 100 ;
[RESERVOIRS]
;ID Head Pattern
9 800 ;
[TANKS]
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
2 850 120 100 150 50.5 0 ;
[PIPES]
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
10 10 11 10530 18 100 0 Open ;
11 11 12 5280 14 100 0 Open ;
12 12 13 5280 10 100 0 Open ;
21 21 22 5280 10 100 0 Open ;
22 22 23 5280 12 100 0 Open ;
31 31 32 5280 6 100 0 Open ;
110 2 12 200 18 100 0 Open ;
111 11 21 5280 10 100 0 Open ;
112 12 22 5280 12 100 0 Open ;
113 13 23 5280 8 100 0 Open ;
121 21 31 5280 8 100 0 Open ;
122 22 32 5280 6 100 0 Open ;
[PUMPS]
;ID Node1 Node2 Parameters
9 9 10 HEAD 1 ;
[VALVES]
;ID Node1 Node2 Diameter Type Setting MinorLoss
[TAGS]
[DEMANDS]
;Junction Demand Pattern Category
[STATUS]
;ID Status/Setting
[PATTERNS]
;ID Multipliers
;Demand Pattern
1 1.0 1.2 1.4 1.6 1.4 1.2
1 1.0 0.8 0.6 0.4 0.6 0.8
[CURVES]
;ID X-Value Y-Value
;PUMP: Pump Curve for Pump 9
1 1500 250
[CONTROLS]
LINK 9 OPEN IF NODE 2 BELOW 110
LINK 9 CLOSED IF NODE 2 ABOVE 140
[RULES]
[ENERGY]
Global Efficiency 75
Global Price 0.0
Demand Charge 0.0
[EMITTERS]
;Junction Coefficient
[QUALITY]
;Node InitQual
10 0.5
11 0.5
12 0.5
13 0.5
21 0.5
22 0.5
23 0.5
31 0.5
32 0.5
9 1.0
2 1.0
[SOURCES]
;Node Type Quality Pattern
[REACTIONS]
;Type Pipe/Tank Coefficient
[REACTIONS]
Order Bulk 1
Order Tank 1
Order Wall 1
Global Bulk -.5
Global Wall -1
Limiting Potential 0.0
Roughness Correlation 0.0
[MIXING]
;Tank Model
[TIMES]
Duration 24:00
Hydraulic Timestep 1:00
Quality Timestep 0:05
Pattern Timestep 2:00
Pattern Start 0:00
Report Timestep 1:00
Report Start 0:00
Start ClockTime 12 am
Statistic None
[REPORT]
Status Yes
Summary No
Nodes All
Links All
[OPTIONS]
Units GPM
Headloss H-W
Specific Gravity 1.0
Viscosity 1.0
Trials 40
Accuracy 0.001
CHECKFREQ 2
MAXCHECK 10
;DAMPLIMIT 0
Unbalanced Continue 10
Pattern 1
Demand Multiplier 1.0
Emitter Exponent 0.5
Quality Chlorine mg/L
Diffusivity 1.0
Tolerance 0.01
[COORDINATES]
;Node X-Coord Y-Coord
10 20.00 70.00
11 30.00 70.00
12 50.00 70.00
13 70.00 70.00
21 30.00 40.00
22 50.00 40.00
23 70.00 40.00
31 30.00 10.00
32 50.00 10.00
9 10.00 70.00
2 50.00 90.00
[VERTICES]
;Link X-Coord Y-Coord
[LABELS]
;X-Coord Y-Coord Label & Anchor Node
6.99 73.63 "Source"
13.48 68.13 "Pump"
43.85 91.21 "Tank"
[BACKDROP]
DIMENSIONS 7.00 6.00 73.00 94.00
UNITS None
FILE
OFFSET 0.00 0.00
[END]

View File

@@ -1,17 +0,0 @@
{
"name": "Example 1",
"version": "1.0",
"description": "A simple example of modeling chlorine decay",
"args": [
"example1.inp",
"example1.rpt",
"example1.out"
],
"input_files": [
"example1.inp"
],
"output_files": {
"example1.rpt": "epanet report",
"example1.out": "epanet allclose"
}
}

View File

@@ -1,80 +0,0 @@
;Measured Fluoride for Net2
;Node Hour MG/L
11 2.50 1.02
11 5.38 0.87
11 8.30 0.70
11 11.75 1.01
11 13.02 0.62
11 14.48 0.26
11 17.43 0.17
11 20.30 0.20
11 23.35 0.90
11 27.00 0.13
11 29.67 0.13
11 33.70 0.54
11 35.40 0.90
11 38.30 0.17
11 41.62 0.10
11 44.42 0.12
11 47.25 0.71
11 51.00 0.13
11 53.27 0.58
19 0.25 1.04
19 2.75 1.04
19 5.70 1.08
19 8.60 1.00
19 12.00 0.81
19 13.25 0.95
19 14.73 1.02
19 17.77 1.01
19 20.52 0.87
19 23.53 0.28
19 27.17 0.98
19 29.87 0.85
19 33.92 0.12
19 35.67 0.17
19 38.48 0.64
19 42.08 0.79
19 44.68 0.87
19 47.50 0.16
19 51.17 0.56
19 53.45 0.70
25 0.58 1.04
3.00 1.00
5.87 1.03
8.80 1.00
12.25 1.02
13.50 0.88
14.97 0.36
18.15 0.91
20.75 0.92
23.73 0.94
27.42 0.19
30.08 0.12
34.12 0.83
35.87 0.82
38.67 0.72
42.40 0.76
44.92 0.78
47.75 0.87
51.50 0.42
53.75 0.48
34 2.67 1.03
5.50 1.04
8.45 0.98
11.87 1.01
13.15 1.02
14.62 1.04
17.60 1.02
20.42 1.02
23.43 1.00
27.08 1.02
29.75 0.94
33.82 0.89
35.53 0.75
38.40 0.80
41.85 0.84
44.55 0.92
47.42 0.91
51.08 0.81
53.37 0.47

View File

@@ -1,310 +0,0 @@
[TITLE]
EPANET Example Network 2
Example of modeling a 55-hour fluoride tracer study.
Measured fluoride data is contained in the file Net2-FL.dat
and should be registered with the project to produce a
Calibration Report (select Calibration Data from the Project
menu).
[JUNCTIONS]
;ID Elev Demand Pattern
1 50 -694.4 2 ;
2 100 8 ;
3 60 14 ;
4 60 8 ;
5 100 8 ;
6 125 5 ;
7 160 4 ;
8 110 9 ;
9 180 14 ;
10 130 5 ;
11 185 34.78 ;
12 210 16 ;
13 210 2 ;
14 200 2 ;
15 190 2 ;
16 150 20 ;
17 180 20 ;
18 100 20 ;
19 150 5 ;
20 170 19 ;
21 150 16 ;
22 200 10 ;
23 230 8 ;
24 190 11 ;
25 230 6 ;
27 130 8 ;
28 110 0 ;
29 110 7 ;
30 130 3 ;
31 190 17 ;
32 110 17 ;
33 180 1.5 ;
34 190 1.5 ;
35 110 0 ;
36 110 1 ;
[RESERVOIRS]
;ID Head Pattern
[TANKS]
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
26 235 56.7 50 70 50 0 ;
[PIPES]
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
1 1 2 2400 12 100 0 Open ;
2 2 5 800 12 100 0 Open ;
3 2 3 1300 8 100 0 Open ;
4 3 4 1200 8 100 0 Open ;
5 4 5 1000 12 100 0 Open ;
6 5 6 1200 12 100 0 Open ;
7 6 7 2700 12 100 0 Open ;
8 7 8 1200 12 140 0 Open ;
9 7 9 400 12 100 0 Open ;
10 8 10 1000 8 140 0 Open ;
11 9 11 700 12 100 0 Open ;
12 11 12 1900 12 100 0 Open ;
13 12 13 600 12 100 0 Open ;
14 13 14 400 12 100 0 Open ;
15 14 15 300 12 100 0 Open ;
16 13 16 1500 8 100 0 Open ;
17 15 17 1500 8 100 0 Open ;
18 16 17 600 8 100 0 Open ;
19 17 18 700 12 100 0 Open ;
20 18 32 350 12 100 0 Open ;
21 16 19 1400 8 100 0 Open ;
22 14 20 1100 12 100 0 Open ;
23 20 21 1300 8 100 0 Open ;
24 21 22 1300 8 100 0 Open ;
25 20 22 1300 8 100 0 Open ;
26 24 23 600 12 100 0 Open ;
27 15 24 250 12 100 0 Open ;
28 23 25 300 12 100 0 Open ;
29 25 26 200 12 100 0 Open ;
30 25 31 600 12 100 0 Open ;
31 31 27 400 8 100 0 Open ;
32 27 29 400 8 100 0 Open ;
34 29 28 700 8 100 0 Open ;
35 22 33 1000 8 100 0 Open ;
36 33 34 400 8 100 0 Open ;
37 32 19 500 8 100 0 Open ;
38 29 35 500 8 100 0 Open ;
39 35 30 1000 8 100 0 Open ;
40 28 35 700 8 100 0 Open ;
41 28 36 300 8 100 0 Open ;
[PUMPS]
;ID Node1 Node2 Parameters
[VALVES]
;ID Node1 Node2 Diameter Type Setting MinorLoss
[TAGS]
[DEMANDS]
;Junction Demand Pattern Category
[STATUS]
;ID Status/Setting
[PATTERNS]
;ID Multipliers
;Demand Pattern
1 1.26 1.04 .97 .97 .89 1.19
1 1.28 .67 .67 1.34 2.46 .97
1 .92 .68 1.43 .61 .31 .78
1 .37 .67 1.26 1.56 1.19 1.26
1 .6 1.1 1.03 .73 .88 1.06
1 .99 1.72 1.12 1.34 1.12 .97
1 1.04 1.15 .91 .61 .68 .46
1 .51 .74 1.12 1.34 1.26 .97
1 .82 1.37 1.03 .81 .88 .81
1 .81
;Pump Station Outflow Pattern
2 .96 .96 .96 .96 .96 .96
2 .62 0 0 0 0 0
2 .8 1 1 1 1 .15
2 0 0 0 0 0 0
2 .55 .92 .92 .92 .92 .9
2 .9 .45 0 0 0 0
2 0 .7 1 1 1 1
2 .2 0 0 0 0 0
2 0 .74 .92 .92 .92 .92
2 .92
;Pump Station Fluoride Pattern
3 .98 1.02 1.05 .99 .64 .46
3 .35 .35 .35 .35 .35 .35
3 .17 .17 .13 .13 .13 .15
3 .15 .15 .15 .15 .15 .15
3 .15 .12 .1 .08 .11 .09
3 .09 .08 .08 .08 .08 .08
3 .08 .09 .07 .07 .09 .09
3 .09 .09 .09 .09 .09 .09
3 .09 .08 .35 .72 .82 .92
3 1
[CURVES]
;ID X-Value Y-Value
[CONTROLS]
[RULES]
[ENERGY]
Global Efficiency 75
Global Price 0.0
Demand Charge 0.0
[EMITTERS]
;Junction Coefficient
[QUALITY]
;Node InitQual
1 1.0
2 1.0
3 1.0
4 1.0
5 1.0
6 1.0
7 1.0
8 1.0
9 1.0
10 1.0
11 1.0
12 1.0
13 1.0
14 1.0
15 1.0
16 1.0
17 1.0
18 1.0
19 1.0
20 1.0
21 1.0
22 1.0
23 1.0
24 1.0
25 1.0
27 1.0
28 1.0
29 1.0
30 1.0
31 1.0
32 1.0
33 1.0
34 1.0
35 1.0
36 1.0
26 1.0
[SOURCES]
;Node Type Quality Pattern
1 CONCEN 1.0 3
[REACTIONS]
;Type Pipe/Tank Coefficient
[REACTIONS]
Order Bulk 1
Order Tank 1
Order Wall 1
Global Bulk 0.0
Global Wall 0.0
Limiting Potential 0.0
Roughness Correlation 0.0
[MIXING]
;Tank Model
[TIMES]
Duration 55:00
Hydraulic Timestep 1:00
Quality Timestep 0:05
Pattern Timestep 1:00
Pattern Start 0:00
Report Timestep 1:00
Report Start 0:00
Start ClockTime 8 am
Statistic None
[REPORT]
Status Yes
Summary No
Nodes All
Links All
[OPTIONS]
Units GPM
Headloss H-W
Specific Gravity 1.0
Viscosity 1.0
Trials 40
Accuracy 0.001
CHECKFREQ 2
MAXCHECK 10
;DAMPLIMIT 0
Unbalanced Continue 10
Pattern 1
Demand Multiplier 1.0
Emitter Exponent 0.5
Quality Fluoride mg/L
Diffusivity 1.0
Tolerance 0.01
[COORDINATES]
;Node X-Coord Y-Coord
1 21.00 4.00
2 19.00 20.00
3 11.00 21.00
4 14.00 28.00
5 19.00 25.00
6 28.00 23.00
7 36.00 39.00
8 38.00 30.00
9 36.00 42.00
10 37.00 23.00
11 37.00 49.00
12 39.00 60.00
13 38.00 64.00
14 38.00 66.00
15 37.00 69.00
16 27.00 65.00
17 27.00 69.00
18 23.00 68.00
19 21.00 59.00
20 45.00 68.00
21 51.00 62.00
22 54.00 69.00
23 35.00 74.00
24 37.00 71.00
25 35.00 76.00
27 39.00 87.00
28 49.00 85.00
29 42.00 86.00
30 47.00 80.00
31 37.00 80.00
32 23.00 64.00
33 56.00 73.00
34 56.00 77.00
35 43.00 81.00
36 53.00 87.00
26 33.00 76.00
[VERTICES]
;Link X-Coord Y-Coord
[LABELS]
;X-Coord Y-Coord Label & Anchor Node
24.00 7.00 "Pump"
24.00 4.00 "Station"
26.76 77.42 "Tank"
[BACKDROP]
DIMENSIONS 8.75 -0.15 58.25 91.15
UNITS None
FILE
OFFSET 0.00 0.00
[END]

View File

@@ -1,17 +0,0 @@
{
"name": "Example 2",
"version": "1.0",
"description": "Example of modeling a 55-hour fluoride tracer study.",
"args": [
"example2.inp",
"example2.rpt",
"example2.out"
],
"input_files": [
"example2.inp"
],
"output_files": {
"example2.rpt": "epanet report",
"example2.out": "epanet allclose"
}
}

View File

@@ -1,481 +0,0 @@
[TITLE]
EPANET Example Network 3
Example showing how the percent of Lake water in a dual-source
system changes over time.
[JUNCTIONS]
;ID Elev Demand Pattern
10 147 0 ;
15 32 1 3 ;
20 129 0 ;
35 12.5 1 4 ;
40 131.9 0 ;
50 116.5 0 ;
60 0 0 ;
601 0 0 ;
61 0 0 ;
101 42 189.95 ;
103 43 133.2 ;
105 28.5 135.37 ;
107 22 54.64 ;
109 20.3 231.4 ;
111 10 141.94 ;
113 2 20.01 ;
115 14 52.1 ;
117 13.6 117.71 ;
119 2 176.13 ;
120 0 0 ;
121 -2 41.63 ;
123 11 1 2 ;
125 11 45.6 ;
127 56 17.66 ;
129 51 0 ;
131 6 42.75 ;
139 31 5.89 ;
141 4 9.85 ;
143 -4.5 6.2 ;
145 1 27.63 ;
147 18.5 8.55 ;
149 16 27.07 ;
151 33.5 144.48 ;
153 66.2 44.17 ;
157 13.1 51.79 ;
159 6 41.32 ;
161 4 15.8 ;
163 5 9.42 ;
164 5 0 ;
166 -2 2.6 ;
167 -5 14.56 ;
169 -5 0 ;
171 -4 39.34 ;
173 -4 0 ;
177 8 58.17 ;
179 8 0 ;
181 8 0 ;
183 11 0 ;
184 16 0 ;
185 16 25.65 ;
187 12.5 0 ;
189 4 107.92 ;
191 25 81.9 ;
193 18 71.31 ;
195 15.5 0 ;
197 23 17.04 ;
199 -2 119.32 ;
201 0.1 44.61 ;
203 2 1 5 ;
204 21 0 ;
205 21 65.36 ;
206 1 0 ;
207 9 69.39 ;
208 16 0 ;
209 -2 0.87 ;
211 7 8.67 ;
213 7 13.94 ;
215 7 92.19 ;
217 6 24.22 ;
219 4 41.32 ;
225 8 22.8 ;
229 10.5 64.18 ;
231 5 16.48 ;
237 14 15.61 ;
239 13 44.61 ;
241 13 0 ;
243 14 4.34 ;
247 18 70.38 ;
249 18 0 ;
251 30 24.16 ;
253 36 54.52 ;
255 27 40.39 ;
257 17 0 ;
259 25 0 ;
261 0 0 ;
263 0 0 ;
265 0 0 ;
267 21 0 ;
269 0 0 ;
271 6 0 ;
273 8 0 ;
275 10 0 ;
[RESERVOIRS]
;ID Head Pattern
River 220.0 ;
Lake 167.0 ;
[TANKS]
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
1 131.9 13.1 .1 32.1 85 0 ;
2 116.5 23.5 6.5 40.3 50 0 ;
3 129.0 29.0 4.0 35.5 164 0 ;
[PIPES]
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
20 3 20 99 99 199 0 Open ;
40 1 40 99 99 199 0 Open ;
50 2 50 99 99 199 0 Open ;
60 River 60 1231 24 140 0 Open ;
101 10 101 14200 18 110 0 Open ;
103 101 103 1350 16 130 0 Open ;
105 101 105 2540 12 130 0 Open ;
107 105 107 1470 12 130 0 Open ;
109 103 109 3940 16 130 0 Open ;
111 109 111 2000 12 130 0 Open ;
112 115 111 1160 12 130 0 Open ;
113 111 113 1680 12 130 0 Open ;
114 115 113 2000 8 130 0 Open ;
115 107 115 1950 8 130 0 Open ;
116 113 193 1660 12 130 0 Open ;
117 263 105 2725 12 130 0 Open ;
119 115 117 2180 12 130 0 Open ;
120 119 120 730 12 130 0 Open ;
121 120 117 1870 12 130 0 Open ;
122 121 120 2050 8 130 0 Open ;
123 121 119 2000 30 141 0 Open ;
125 123 121 1500 30 141 0 Open ;
129 121 125 930 24 130 0 Open ;
131 125 127 3240 24 130 0 Open ;
133 20 127 785 20 130 0 Open ;
135 127 129 900 24 130 0 Open ;
137 129 131 6480 16 130 0 Open ;
145 129 139 2750 8 130 0 Open ;
147 139 141 2050 8 130 0 Open ;
149 143 141 1400 8 130 0 Open ;
151 15 143 1650 8 130 0 Open ;
153 145 141 3510 12 130 0 Open ;
155 147 145 2200 12 130 0 Open ;
159 147 149 880 12 130 0 Open ;
161 149 151 1020 8 130 0 Open ;
163 151 153 1170 12 130 0 Open ;
169 125 153 4560 8 130 0 Open ;
171 119 151 3460 12 130 0 Open ;
173 119 157 2080 30 141 0 Open ;
175 157 159 2910 30 141 0 Open ;
177 159 161 2000 30 141 0 Open ;
179 161 163 430 30 141 0 Open ;
180 163 164 150 14 130 0 Open ;
181 164 166 490 14 130 0 Open ;
183 265 169 590 30 141 0 Open ;
185 167 169 60 8 130 0 Open ;
186 187 204 99.9 8 130 0 Open ;
187 169 171 1270 30 141 0 Open ;
189 171 173 50 30 141 0 Open ;
191 271 171 760 24 130 0 Open ;
193 35 181 30 24 130 0 Open ;
195 181 177 30 12 130 0 Open ;
197 177 179 30 12 130 0 Open ;
199 179 183 210 12 130 0 Open ;
201 40 179 1190 12 130 0 Open ;
202 185 184 99.9 8 130 0 Open ;
203 183 185 510 8 130 0 Open ;
204 184 205 4530. 12 130 0 Open ;
205 204 185 1325. 12 130 0 Open ;
207 189 183 1350 12 130 0 Open ;
209 189 187 500 8 130 0 Open ;
211 169 269 646 12 130 0 Open ;
213 191 187 2560 12 130 0 Open ;
215 267 189 1230 12 130 0 Open ;
217 191 193 520 12 130 0 Open ;
219 193 195 360 12 130 0 Open ;
221 161 195 2300 8 130 0 Open ;
223 197 191 1150 12 130 0 Open ;
225 111 197 2790 12 130 0 Open ;
229 173 199 4000 24 141 0 Open ;
231 199 201 630 24 141 0 Open ;
233 201 203 120 24 130 0 Open ;
235 199 273 725 12 130 0 Open ;
237 205 207 1200 12 130 0 Open ;
238 207 206 450 12 130 0 Open ;
239 275 207 1430 12 130 0 Open ;
240 206 208 510 12 130 0 Open ;
241 208 209 885 12 130 0 Open ;
243 209 211 1210 16 130 0 Open ;
245 211 213 990 16 130 0 Open ;
247 213 215 4285 16 130 0 Open ;
249 215 217 1660 16 130 0 Open ;
251 217 219 2050 14 130 0 Open ;
257 217 225 1560 12 130 0 Open ;
261 213 229 2200 8 130 0 Open ;
263 229 231 1960 12 130 0 Open ;
269 211 237 2080 12 130 0 Open ;
271 237 229 790 8 130 0 Open ;
273 237 239 510 12 130 0 Open ;
275 239 241 35 12 130 0 Open ;
277 241 243 2200 12 130 0 Open ;
281 241 247 445 10 130 0 Open ;
283 239 249 430 12 130 0 Open ;
285 247 249 10 12 130 0 Open ;
287 247 255 1390 10 130 0 Open ;
289 50 255 925 10 130 0 Open ;
291 255 253 1100 10 130 0 Open ;
293 255 251 1100 8 130 0 Open ;
295 249 251 1450 12 130 0 Open ;
297 120 257 645 8 130 0 Open ;
299 257 259 350 8 130 0 Open ;
301 259 263 1400 8 130 0 Open ;
303 257 261 1400 8 130 0 Open ;
305 117 261 645 12 130 0 Open ;
307 261 263 350 12 130 0 Open ;
309 265 267 1580 8 130 0 Open ;
311 193 267 1170 12 130 0 Open ;
313 269 189 646 12 130 0 Open ;
315 181 271 260 24 130 0 Open ;
317 273 275 2230 8 130 0 Open ;
319 273 205 645 12 130 0 Open ;
321 163 265 1200 30 141 0 Open ;
323 201 275 300 12 130 0 Open ;
325 269 271 1290 8 130 0 Open ;
329 61 123 45500 30 140 0 Open ;
330 60 601 1 30 140 0 Closed ;
333 601 61 1 30 140 0 Open ;
[PUMPS]
;ID Node1 Node2 Parameters
10 Lake 10 HEAD 1 ;
335 60 61 HEAD 2 ;
[VALVES]
;ID Node1 Node2 Diameter Type Setting MinorLoss
[TAGS]
[DEMANDS]
;Junction Demand Pattern Category
[STATUS]
;ID Status/Setting
10 Closed
[PATTERNS]
;ID Multipliers
;General Default Demand Pattern
1 1.34 1.94 1.46 1.44 .76 .92
1 .85 1.07 .96 1.1 1.08 1.19
1 1.16 1.08 .96 .83 .79 .74
1 .64 .64 .85 .96 1.24 1.67
;Demand Pattern for Node 123
2 0 0 0 0 0 1219
2 0 0 0 1866 1836 1818
2 1818 1822 1822 1817 1824 1816
2 1833 1817 1830 1814 1840 1859
;Demand Pattern for Node 15
3 620 620 620 620 620 360
3 360 0 0 0 0 360
3 360 360 360 360 0 0
3 0 0 0 0 360 360
;Demand Pattern for Node 35
4 1637 1706 1719 1719 1791 1819
4 1777 1842 1815 1825 1856 1801
4 1819 1733 1664 1620 1613 1620
4 1616 1647 1627 1627 1671 1668
;Demand Pattern for Node 203
5 4439 4531 4511 4582 4531 4582
5 4572 4613 4643 4643 4592 4613
5 4531 4521 4449 4439 4449 4460
5 4439 4419 4368 4399 4470 4480
[CURVES]
;ID X-Value Y-Value
;PUMP: Pump Curve for Pump 10 (Lake Source)
1 0 104.
1 2000. 92.
1 4000. 63.
;PUMP: Pump Curve for Pump 335 (River Source)
2 0 200.
2 8000. 138.
2 14000. 86.
[CONTROLS]
;Lake source operates only part of the day
Link 10 OPEN AT TIME 1
Link 10 CLOSED AT TIME 15
;Pump 335 controlled by level in Tank 1
;When pump is closed, bypass pipe is opened
Link 335 OPEN IF Node 1 BELOW 17.1
Link 335 CLOSED IF Node 1 ABOVE 19.1
Link 330 CLOSED IF Node 1 BELOW 17.1
Link 330 OPEN IF Node 1 ABOVE 19.1
[RULES]
[ENERGY]
Global Efficiency 75
Global Price 0.0
Demand Charge 0.0
[EMITTERS]
;Junction Coefficient
[QUALITY]
;Node InitQual
[SOURCES]
;Node Type Quality Pattern
[REACTIONS]
;Type Pipe/Tank Coefficient
[REACTIONS]
Order Bulk 1
Order Tank 1
Order Wall 1
Global Bulk 0.0
Global Wall 0.0
Limiting Potential 0.0
Roughness Correlation 0.0
[MIXING]
;Tank Model
[TIMES]
Duration 24:00
Hydraulic Timestep 1:00
Quality Timestep 0:05
Pattern Timestep 1:00
Pattern Start 0:00
Report Timestep 1:00
Report Start 0:00
Start ClockTime 12 am
Statistic None
[REPORT]
Status Yes
Summary No
Nodes All
Links All
[OPTIONS]
Units GPM
Headloss H-W
Specific Gravity 1.0
Viscosity 1.0
Trials 40
Accuracy 0.001
CHECKFREQ 2
MAXCHECK 10
;DAMPLIMIT 0
Unbalanced Continue 10
Pattern 1
Demand Multiplier 1.0
Emitter Exponent 0.5
Quality Trace Lake
Diffusivity 1.0
Tolerance 0.01
[COORDINATES]
;Node X-Coord Y-Coord
10 9.00 27.85
15 38.68 23.76
20 29.44 26.91
35 25.46 10.52
40 27.02 9.81
50 33.01 3.01
60 23.90 29.94
601 23.00 29.49
61 23.71 29.03
101 13.81 22.94
103 12.96 21.31
105 16.97 21.28
107 18.45 20.46
109 17.64 18.92
111 20.21 17.53
113 22.04 16.61
115 20.98 19.18
117 21.69 21.28
119 23.70 22.76
120 22.08 23.10
121 23.54 25.50
123 23.37 27.31
125 24.59 25.64
127 29.29 26.40
129 30.32 26.39
131 37.89 29.55
139 33.28 24.54
141 35.68 23.08
143 37.47 21.97
145 33.02 19.29
147 30.24 20.38
149 29.62 20.74
151 28.29 21.39
153 28.13 22.63
157 24.85 20.16
159 23.12 17.50
161 25.10 15.28
163 25.39 14.98
164 25.98 15.14
166 26.48 15.13
167 25.88 12.98
169 25.68 12.74
171 26.65 11.80
173 26.87 11.59
179 25.71 10.40
181 25.72 10.74
183 25.45 10.18
184 25.15 9.52
185 25.01 9.67
187 23.64 11.04
189 24.15 11.37
191 22.10 14.07
193 22.88 14.35
195 23.18 14.72
197 20.97 15.18
199 29.42 8.44
201 30.89 8.57
203 31.14 8.89
204 23.80 10.90
205 29.20 6.46
206 31.66 6.64
207 31.00 6.61
208 32.54 6.81
209 33.76 6.59
211 34.20 5.54
213 35.26 6.16
215 39.95 8.73
217 42.11 8.67
219 44.86 9.32
225 43.53 7.38
229 36.16 3.49
231 38.38 2.54
237 35.37 3.08
239 35.76 2.31
241 35.87 2.11
243 37.04 0.00
247 35.02 2.05
249 35.02 1.81
251 34.15 1.10
253 32.17 1.88
255 33.51 2.45
257 21.17 23.32
259 20.80 23.40
261 20.79 21.45
263 20.32 21.57
265 25.39 13.60
267 23.38 12.95
269 25.03 12.14
271 25.97 11.00
273 29.16 7.38
275 31.07 8.29
River 24.15 31.06
Lake 8.00 27.53
1 27.46 9.84
2 32.99 3.45
3 29.41 27.27
[VERTICES]
;Link X-Coord Y-Coord
[LABELS]
;X-Coord Y-Coord Label & Anchor Node
8.00 29.42 "LAKE"
25.00 31.10 "RIVER"
[BACKDROP]
DIMENSIONS 6.16 -1.55 46.70 32.61
UNITS None
FILE
OFFSET 0.00 0.00
[END]

View File

@@ -1,17 +0,0 @@
{
"name": "Example 3",
"version": "1.0",
"description": "Dual-source system example",
"args": [
"example3.inp",
"example3.rpt",
"example3.out"
],
"input_files": [
"example3.inp"
],
"output_files": {
"example3.rpt": "epanet report",
"example3.out": "epanet allclose"
}
}

Binary file not shown.

View File

@@ -1,178 +0,0 @@
[TITLE]
EPANET Example Network 1
A simple example of modeling chlorine decay. Both bulk and
wall reactions are included.
[JUNCTIONS]
;ID Elev Demand Pattern
10 710 0 ;
11 710 150 ;
12 700 150 ;
13 695 100 ;
21 700 150 ;
22 695 200 ;
23 690 150 ;
31 700 100 ;
32 710 100 ;
[RESERVOIRS]
;ID Head Pattern
9 800 ;
[TANKS]
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
2 850 120 100 150 50.5 0 ;
[PIPES]
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
10 10 11 10530 18 100 0 Open ;
11 11 12 5280 14 100 0 Open ;
12 12 13 5280 10 100 0 Open ;
21 21 22 5280 10 100 0 Open ;
22 22 23 5280 12 100 0 Open ;
31 31 32 5280 6 100 0 Open ;
110 2 12 200 18 100 0 Open ;
111 11 21 5280 10 100 0 Open ;
112 12 22 5280 12 100 0 Open ;
113 13 23 5280 8 100 0 Open ;
121 21 31 5280 8 100 0 Open ;
122 22 32 5280 6 100 0 Open ;
[PUMPS]
;ID Node1 Node2 Parameters
9 9 10 HEAD 1 ;
[VALVES]
;ID Node1 Node2 Diameter Type Setting MinorLoss
[TAGS]
[DEMANDS]
;Junction Demand Pattern Category
[STATUS]
;ID Status/Setting
[PATTERNS]
;ID Multipliers
;Demand Pattern
1 1.0 1.2 1.4 1.6 1.4 1.2
1 1.0 0.8 0.6 0.4 0.6 0.8
[CURVES]
;ID X-Value Y-Value
;PUMP: Pump Curve for Pump 9
1 1500 250
[CONTROLS]
LINK 9 OPEN IF NODE 2 BELOW 110
LINK 9 CLOSED IF NODE 2 ABOVE 140
[RULES]
[ENERGY]
Global Efficiency 75
Global Price 0.0
Demand Charge 0.0
[EMITTERS]
;Junction Coefficient
[QUALITY]
;Node InitQual
10 0.5
11 0.5
12 0.5
13 0.5
21 0.5
22 0.5
23 0.5
31 0.5
32 0.5
9 1.0
2 1.0
[SOURCES]
;Node Type Quality Pattern
[REACTIONS]
;Type Pipe/Tank Coefficient
[REACTIONS]
Order Bulk 1
Order Tank 1
Order Wall 1
Global Bulk -.5
Global Wall -1
Limiting Potential 0.0
Roughness Correlation 0.0
[MIXING]
;Tank Model
[TIMES]
Duration 24:00
Hydraulic Timestep 1:00
Quality Timestep 0:05
Pattern Timestep 2:00
Pattern Start 0:00
Report Timestep 1:00
Report Start 0:00
Start ClockTime 12 am
Statistic None
[REPORT]
Status Yes
Summary No
Page 0
[OPTIONS]
Units GPM
Headloss H-W
Specific Gravity 1.0
Viscosity 1.0
Trials 40
Accuracy 0.001
CHECKFREQ 2
MAXCHECK 10
DAMPLIMIT 0
Unbalanced Continue 10
Pattern 1
Demand Multiplier 1.0
Emitter Exponent 0.5
Quality Chlorine mg/L
Diffusivity 1.0
Tolerance 0.01
[COORDINATES]
;Node X-Coord Y-Coord
10 20.00 70.00
11 30.00 70.00
12 50.00 70.00
13 70.00 70.00
21 30.00 40.00
22 50.00 40.00
23 70.00 40.00
31 30.00 10.00
32 50.00 10.00
9 10.00 70.00
2 50.00 90.00
[VERTICES]
;Link X-Coord Y-Coord
[LABELS]
;X-Coord Y-Coord Label & Anchor Node
6.99 73.63 "Source"
13.48 68.13 "Pump"
43.85 91.21 "Tank"
[BACKDROP]
DIMENSIONS 7.00 6.00 73.00 94.00
UNITS None
FILE
OFFSET 0.00 0.00
[END]

View File

@@ -1,35 +0,0 @@
Type=Exe
Form=frmMain.frm
Module=basShellSync; ShellSync.bas
Module=basNetRes; basNetRes.bas
IconForm="frmMain"
Startup="frmMain"
HelpFile=""
Title="Testing"
ExeName32="BinaryCompare.exe"
Command32=""
Name="BinaryCompare"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=1
AutoIncrementVer=1
ServerSupportFiles=0
VersionComments="by Elad Salomons"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
DebugStartupOption=0

View File

@@ -1,39 +0,0 @@
Attribute VB_Name = "basShellSync"
Option Explicit
Private Const INFINITE = &HFFFFFFFF
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Function ShellSync(ByVal PathName As String, ByVal WindowStyle As VbAppWinStyle) As Long
'-----------------------------------------------------------------------------------------------
'Shell and wait. Return exit code result, raise an
'exception on any error.
Dim lngPid As Long
Dim lngHandle As Long
Dim lngExitCode As Long
lngPid = Shell(PathName, WindowStyle)
If lngPid <> 0 Then
lngHandle = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, 0, lngPid)
If lngHandle <> 0 Then
WaitForSingleObject lngHandle, INFINITE
If GetExitCodeProcess(lngHandle, lngExitCode) <> 0 Then
ShellSync = lngExitCode
CloseHandle lngHandle
Else
CloseHandle lngHandle
Err.Raise &H8004AA00, "ShellSync", "Failed to retrieve exit code, error " & CStr(Err.LastDllError)
End If
Else
Err.Raise &H8004AA01, "ShellSync", "Failed to open child process"
End If
Else
Err.Raise &H8004AA02, "ShellSync", "Failed to Shell child process"
End If
End Function

View File

@@ -1,188 +0,0 @@
Attribute VB_Name = "basNetRes"
Public Type typNetRes
nNodes As Long
nLinks As Long
NodesID() As String
LinksID() As String
NodesDemand() As Single
NodesHead() As Single
NodesPressure() As Single
NodesQuality() As Single
LinksFlow() As Single
LinksHeadloss() As Single
LinksQuality() As Single
LinksSetting() As Single
LinksStatus() As Single
LinksVelocity() As Single
End Type
Public Function ReadOutputFile(OutFile As String, NetRes As typNetRes)
'---------------------------------------------------------------------------------------
Dim i As Long, F As Long, r As Long, nRep As Long, j As Long
Dim tmpArr() As Single
Dim pos As Long, N As Long
Dim tmpLong As Long, tmpSingle As Single
Dim ReportingTimeStep As Long, ReportingStartTime As Long
Dim SimulationDuration As Long
Dim ProblemTitletLine As String * 80
Dim NumberOfNodes As Long
Dim NumberOfLinks As Long
Dim NumberOfReservoirsAndTanks As Long
Dim NumberOfPumps As Long
Dim NumberOfValves As Long
Dim WaterQualityOption As Long
Dim FlowUnitsOption As Long, PressureUnitsOption As Long
Dim NameOfFile As String * 260, tmpString32 As String * 32
Dim ii As Long
Dim WarningFlag As Long
With NetRes
pos = 1: N = 0
F = FreeFile
Open OutFile For Binary As #F
Get #F, pos, tmpLong: pos = pos + 4
Get #F, pos, tmpLong: pos = pos + 4
Get #F, pos, NumberOfNodes: pos = pos + 4
Get #F, pos, NumberOfReservoirsAndTanks: pos = pos + 4
Get #F, pos, NumberOfLinks: pos = pos + 4
Get #F, pos, NumberOfPumps: pos = pos + 4
Get #F, pos, NumberOfValves: pos = pos + 4
Get #F, pos, WaterQualityOption: pos = pos + 4
Get #F, pos, tmpLong: pos = pos + 4
Get #F, pos, FlowUnitsOption: pos = pos + 4
Get #F, pos, PressureUnitsOption: pos = pos + 4
Get #F, pos, tmpLong: pos = pos + 4
Get #F, pos, ReportingStartTime: pos = pos + 4
Get #F, pos, ReportingTimeStep: pos = pos + 4
Get #F, pos, SimulationDuration: pos = pos + 4
Get #F, pos, ProblemTitletLine: pos = pos + 80
Get #F, pos, ProblemTitletLine: pos = pos + 80
Get #F, pos, ProblemTitletLine: pos = pos + 80
Get #F, pos, NameOfFile: pos = pos + 260
Get #F, pos, NameOfFile: pos = pos + 260
Get #F, pos, tmpString32: pos = pos + 32
Get #F, pos, tmpString32: pos = pos + 32
.nNodes = NumberOfNodes
.nLinks = NumberOfLinks
ReDim .NodesID(.nNodes)
For j = 1 To NumberOfNodes
Get #F, pos, tmpString32: pos = pos + 32
i = InStr(1, tmpString32, Chr(0))
.NodesID(j) = Mid(tmpString32, 1, i - 1)
Next j
ReDim .LinksID(.nLinks)
For j = 1 To NumberOfLinks
Get #F, pos, tmpString32: pos = pos + 32
i = InStr(1, tmpString32, Chr(0))
.LinksID(j) = Mid(tmpString32, 1, i - 1)
Next j
For j = 1 To NumberOfLinks * 3 'Index of Start Node of Each Link + Index of End Node of Each Link + Type Code of Each Link
Get #F, pos, tmpLong: pos = pos + 4
Next j
For j = 1 To NumberOfReservoirsAndTanks 'Node Index of Each Tank
Get #F, pos, tmpLong: pos = pos + 4
Next j
For j = 1 To NumberOfReservoirsAndTanks 'Cross-Sectional Area of Each Tank
Get #F, pos, tmpSingle: pos = pos + 4
Next j
For j = 1 To NumberOfNodes 'Elevation of Each Node
Get #F, pos, tmpSingle: pos = pos + 4
Next j
For j = 1 To NumberOfLinks 'Length of Each Link
Get #F, pos, tmpSingle: pos = pos + 4
Next j
For j = 1 To NumberOfLinks 'Diameter of Each Link
Get #F, pos, tmpSingle: pos = pos + 4
Next j
For j = 1 To NumberOfPumps 'Energy Use Section
Get #F, pos, tmpLong: pos = pos + 4 'Pump Index in List of Links
Get #F, pos, tmpSingle: pos = pos + 4 'Pump Utilization (%)
Get #F, pos, tmpSingle: pos = pos + 4 'Average Efficiency (%)
Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts/Million Gallons (/Meter3)
Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts
Get #F, pos, tmpSingle: pos = pos + 4 'Peak Kwatts
Get #F, pos, tmpSingle: pos = pos + 4 'Average Cost Per Day
Next j
Get #F, pos, tmpSingle: pos = pos + 4 'Overall Peak Energy Usage
'reporting
nRep = SimulationDuration / ReportingTimeStep + 1
ReDim tmpArr(nRep)
ReDim .NodesDemand(.nNodes, nRep)
ReDim .NodesHead(.nNodes, nRep)
ReDim .NodesPressure(.nNodes, nRep)
ReDim .NodesQuality(.nNodes, nRep)
ReDim .LinksFlow(.nLinks, nRep)
ReDim .LinksHeadloss(.nLinks, nRep)
ReDim .LinksQuality(.nLinks, nRep)
ReDim .LinksSetting(.nLinks, nRep)
ReDim .LinksStatus(.nLinks, nRep)
ReDim .LinksVelocity(.nLinks, nRep)
For r = 1 To nRep
For j = 1 To NumberOfNodes 'Demand at Each Node
Get #F, pos, tmpSingle: pos = pos + 4
.NodesDemand(j, r) = tmpSingle
Next j
For j = 1 To NumberOfNodes 'Hydraulic Head at Each Node
Get #F, pos, tmpSingle: pos = pos + 4
.NodesHead(j, r) = tmpSingle
Next j
For j = 1 To NumberOfNodes 'Pressure at Each Node
Get #F, pos, tmpSingle: pos = pos + 4
.NodesPressure(j, r) = tmpSingle
Next j
For j = 1 To NumberOfNodes 'Water Quality at Each Node
Get #F, pos, tmpSingle: pos = pos + 4
.NodesPressure(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Flow in Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksFlow(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Velocity in Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksVelocity(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Headloss per 1000 Units of Length for Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksHeadloss(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Average Water Quality in Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksQuality(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Status Code for Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksStatus(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Setting for Each Link
Get #F, pos, tmpSingle: pos = pos + 4
.LinksSetting(j, r) = tmpSingle
Next j
For j = 1 To NumberOfLinks 'Reaction Rate for Each Link (mass/L/day)
Get #F, pos, tmpSingle: pos = pos + 4
Next j
For j = 1 To NumberOfLinks 'Friction Factor for Each Link
Get #F, pos, tmpSingle: pos = pos + 4
Next j
Next r
'Epilog Section
Get #F, pos, tmpSingle: pos = pos + 4 'Average bulk reaction rate (mass/hr)
Get #F, pos, tmpSingle: pos = pos + 4 'Average wall reaction rate (mass/hr)
Get #F, pos, tmpSingle: pos = pos + 4 'Average tank reaction rate (mass/hr)
Get #F, pos, tmpSingle: pos = pos + 4 'Average source inflow rate (mass/hr)
Get #F, pos, tmpLong: pos = pos + 4 'Number of Reporting Periods
Get #F, pos, WarningFlag: pos = pos + 4 'Warning Flag
Get #F, pos, tmpLong: pos = pos + 4 'Magic Number ( = 516114521)
Close #F
End With
End Function

View File

@@ -1,179 +0,0 @@
VERSION 5.00
Begin VB.Form frmMain
Caption = "Form1"
ClientHeight = 5304
ClientLeft = 48
ClientTop = 396
ClientWidth = 9648
LinkTopic = "Form1"
ScaleHeight = 5304
ScaleWidth = 9648
StartUpPosition = 3 'Windows Default
Begin VB.ListBox List1
Height = 4272
Left = 1680
TabIndex = 1
Top = 360
Width = 7092
End
Begin VB.CommandButton cmdRun
Caption = "RUN"
Height = 372
Left = 360
TabIndex = 0
Top = 360
Width = 972
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim NetName As String
Dim net1 As typNetRes
Dim net2 As typNetRes
Private Sub CompareVersions(NetName As String)
'-----------------------------------------------
Dim i As Long
Dim v1 As Single, v2 As Single
Dim T As Long
Dim L As Long
Dim maxDiff As Single
Dim diff As Single
Dim nRep As Long
Dim F As Long
i = ShellSync("epanet2d.exe nets\" & NetName & ".inp nets\" & NetName & "_1.rep nets\" & NetName & "_1.out", vbNormalFocus)
i = ReadOutputFile("nets\" & NetName & "_1.out", net1)
i = ShellSync("epanet2.exe nets\" & NetName & ".inp nets\" & NetName & "_2.rep nets\" & NetName & "_2.out", vbNormalFocus)
i = ReadOutputFile("nets\" & NetName & "_2.out", net2)
F = FreeFile
Open App.Path & "\Nets\" & NetName & ".dif" For Output As #F
nRep = UBound(net1.LinksFlow, 2)
maxDiff = 100: diff = 101
For L = 1 To net1.nLinks
For T = 1 To nRep
v1 = net1.LinksFlow(L, T)
v2 = net2.LinksFlow(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Links Flow max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nLinks
For T = 1 To nRep
v1 = net1.LinksHeadloss(L, T)
v2 = net2.LinksHeadloss(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Links Headloss max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nLinks
For T = 1 To nRep
v1 = net1.LinksQuality(L, T)
v2 = net2.LinksQuality(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Links Quality max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nLinks
For T = 1 To nRep
v1 = net1.LinksVelocity(L, T)
v2 = net2.LinksVelocity(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Links Velocity max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nNodes
For T = 1 To nRep
v1 = net1.NodesDemand(L, T)
v2 = net2.NodesDemand(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Nodes Demand max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nNodes
For T = 1 To nRep
v1 = net1.NodesHead(L, T)
v2 = net2.NodesHead(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Nodes Head max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nNodes
For T = 1 To nRep
v1 = net1.NodesPressure(L, T)
v2 = net2.NodesPressure(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Nodes Pressure max diff = " & Format(maxDiff, "0")
maxDiff = 100: diff = 101
For L = 1 To net1.nNodes
For T = 1 To nRep
v1 = net1.NodesQuality(L, T)
v2 = net2.NodesQuality(L, T)
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2))) / Log(10)
If diff < maxDiff Then maxDiff = diff
Next T
Next L
Print #F, "Nodes Quality max diff = " & Format(maxDiff, "0")
Close #F
End Sub
Private Sub cmdRun_Click()
'----------------------------------------------
Dim fName As String
fName = Dir(App.Path & "\Nets\*.inp")
If fName <> "" Then
Do
List1.AddItem fName: DoEvents
fName = StrReverse(fName)
fName = Mid(fName, 5)
fName = StrReverse(fName)
Call CompareVersions(fName)
fName = Dir
Loop Until fName = ""
End If
End Sub
Private Sub Form_Load()
List1.Clear
End Sub

View File

@@ -1,8 +0,0 @@
Links Flow max diff = 3
Links Headloss max diff = 4
Links Quality max diff = 3
Links Velocity max diff = 6
Nodes Demand max diff = 3
Nodes Head max diff = 5
Nodes Pressure max diff = 3
Nodes Quality max diff = 100

View File

@@ -1,311 +0,0 @@
[TITLE]
EPANET Example Network 2
Example of modeling a 55-hour fluoride tracer study.
Measured fluoride data is contained in the file Net2-FL.dat
and should be registered with the project to produce a
Calibration Report (select Calibration Data from the Project
menu).
[JUNCTIONS]
;ID Elev Demand Pattern
1 50 -694.4 2 ;
2 100 8 ;
3 60 14 ;
4 60 8 ;
5 100 8 ;
6 125 5 ;
7 160 4 ;
8 110 9 ;
9 180 14 ;
10 130 5 ;
11 185 34.78 ;
12 2100 16 ;
13 210 2 ;
14 200 2 ;
15 190 2 ;
16 150 20 ;
17 180 20 ;
18 100 20 ;
19 150 5 ;
20 170 19 ;
21 150 16 ;
22 200 10 ;
23 230 8 ;
24 190 11 ;
25 230 6 ;
27 130 8 ;
28 110 0 ;
29 110 7 ;
30 130 3 ;
31 190 17 ;
32 110 17 ;
33 180 1.5 ;
34 190 1.5 ;
35 110 0 ;
36 110 1 ;
[RESERVOIRS]
;ID Head Pattern
[TANKS]
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
26 235 56.7 50 70 50 0 ;
[PIPES]
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
1 1 2 2400 12 100 0 Open ;
2 2 5 800 12 100 0 Open ;
3 2 3 1300 8 100 0 Open ;
4 3 4 1200 8 100 0 Open ;
5 4 5 1000 12 100 0 Open ;
6 5 6 1200 12 100 0 Open ;
7 6 7 2700 12 100 0 Open ;
8 7 8 1200 12 140 0 Open ;
9 7 9 400 12 100 0 Open ;
10 8 10 1000 8 140 0 Open ;
11 9 11 700 12 100 0 Open ;
12 11 12 1900 12 100 0 Open ;
13 12 13 600 12 100 0 Open ;
14 13 14 400 12 100 0 Open ;
15 14 15 300 12 100 0 Open ;
16 13 16 1500 8 100 0 Open ;
17 15 17 1500 8 100 0 Open ;
18 16 17 600 8 100 0 Open ;
19 17 18 700 12 100 0 Open ;
20 18 32 350 12 100 0 Open ;
21 16 19 1400 8 100 0 Open ;
22 14 20 1100 12 100 0 Open ;
23 20 21 1300 8 100 0 Open ;
24 21 22 1300 8 100 0 Open ;
25 20 22 1300 8 100 0 Open ;
26 24 23 600 12 100 0 Open ;
27 15 24 250 12 100 0 Open ;
28 23 25 300 12 100 0 Open ;
29 25 26 200 12 100 0 Open ;
30 25 31 600 12 100 0 Open ;
31 31 27 400 8 100 0 Open ;
32 27 29 400 8 100 0 Open ;
34 29 28 700 8 100 0 Open ;
35 22 33 1000 8 100 0 Open ;
36 33 34 400 8 100 0 Open ;
37 32 19 500 8 100 0 Open ;
38 29 35 500 8 100 0 Open ;
39 35 30 1000 8 100 0 Open ;
40 28 35 700 8 100 0 Open ;
41 28 36 300 8 100 0 Open ;
[PUMPS]
;ID Node1 Node2 Parameters
[VALVES]
;ID Node1 Node2 Diameter Type Setting MinorLoss
[TAGS]
[DEMANDS]
;Junction Demand Pattern Category
[STATUS]
;ID Status/Setting
[PATTERNS]
;ID Multipliers
;Demand Pattern
1 1.26 1.04 .97 .97 .89 1.19
1 1.28 .67 .67 1.34 2.46 .97
1 .92 .68 1.43 .61 .31 .78
1 .37 .67 1.26 1.56 1.19 1.26
1 .6 1.1 1.03 .73 .88 1.06
1 .99 1.72 1.12 1.34 1.12 .97
1 1.04 1.15 .91 .61 .68 .46
1 .51 .74 1.12 1.34 1.26 .97
1 .82 1.37 1.03 .81 .88 .81
1 .81
;Pump Station Outflow Pattern
2 .96 .96 .96 .96 .96 .96
2 .62 0 0 0 0 0
2 .8 1 1 1 1 .15
2 0 0 0 0 0 0
2 .55 .92 .92 .92 .92 .9
2 .9 .45 0 0 0 0
2 0 .7 1 1 1 1
2 .2 0 0 0 0 0
2 0 .74 .92 .92 .92 .92
2 .92
;Pump Station Fluoride Pattern
3 .98 1.02 1.05 .99 .64 .46
3 .35 .35 .35 .35 .35 .35
3 .17 .17 .13 .13 .13 .15
3 .15 .15 .15 .15 .15 .15
3 .15 .12 .1 .08 .11 .09
3 .09 .08 .08 .08 .08 .08
3 .08 .09 .07 .07 .09 .09
3 .09 .09 .09 .09 .09 .09
3 .09 .08 .35 .72 .82 .92
3 1
[CURVES]
;ID X-Value Y-Value
[CONTROLS]
[RULES]
[ENERGY]
Global Efficiency 75
Global Price 0.0
Demand Charge 0.0
[EMITTERS]
;Junction Coefficient
[QUALITY]
;Node InitQual
1 1.0
2 1.0
3 1.0
4 1.0
5 1.0
6 1.0
7 1.0
8 1.0
9 1.0
10 1.0
11 1.0
12 1.0
13 1.0
14 1.0
15 1.0
16 1.0
17 1.0
18 1.0
19 1.0
20 1.0
21 1.0
22 1.0
23 1.0
24 1.0
25 1.0
27 1.0
28 1.0
29 1.0
30 1.0
31 1.0
32 1.0
33 1.0
34 1.0
35 1.0
36 1.0
26 1.0
[SOURCES]
;Node Type Quality Pattern
1 CONCEN 1.0 3
[REACTIONS]
;Type Pipe/Tank Coefficient
[REACTIONS]
Order Bulk 1
Order Tank 1
Order Wall 1
Global Bulk 0.0
Global Wall 0.0
Limiting Potential 0.0
Roughness Correlation 0.0
[MIXING]
;Tank Model
[TIMES]
Duration 55:00
Hydraulic Timestep 1:00
Quality Timestep 0:05
Pattern Timestep 1:00
Pattern Start 0:00
Report Timestep 1:00
Report Start 0:00
Start ClockTime 8 am
Statistic NONE
[REPORT]
Status Full
Summary No
Page 0
[OPTIONS]
Units GPM
Headloss H-W
Specific Gravity 1.0
Viscosity 1.0
Trials 40
Accuracy 0.001
CHECKFREQ 2
MAXCHECK 10
DAMPLIMIT 0
Unbalanced Continue 10
Pattern 1
Demand Multiplier 1.0
Emitter Exponent 0.5
Quality Fluoride mg/L
Diffusivity 1.0
Tolerance 0.01
[COORDINATES]
;Node X-Coord Y-Coord
1 21.00 4.00
2 19.00 20.00
3 11.00 21.00
4 14.00 28.00
5 19.00 25.00
6 28.00 23.00
7 36.00 39.00
8 38.00 30.00
9 36.00 42.00
10 37.00 23.00
11 37.00 49.00
12 39.00 60.00
13 38.00 64.00
14 38.00 66.00
15 37.00 69.00
16 27.00 65.00
17 27.00 69.00
18 23.00 68.00
19 21.00 59.00
20 45.00 68.00
21 51.00 62.00
22 54.00 69.00
23 35.00 74.00
24 37.00 71.00
25 35.00 76.00
27 39.00 87.00
28 49.00 85.00
29 42.00 86.00
30 47.00 80.00
31 37.00 80.00
32 23.00 64.00
33 56.00 73.00
34 56.00 77.00
35 43.00 81.00
36 53.00 87.00
26 33.00 76.00
[VERTICES]
;Link X-Coord Y-Coord
[LABELS]
;X-Coord Y-Coord Label & Anchor Node
24.00 7.00 "Pump"
24.00 4.00 "Station"
26.76 77.42 "Tank"
[BACKDROP]
DIMENSIONS 8.75 -0.15 58.25 91.15
UNITS None
FILE
OFFSET 0.00 0.00
[END]

View File

@@ -1,12 +0,0 @@
The program will run all INP files in the Nets sub-directory.
A report, binary output files and a .dif file will be created for each INP file.
The report is the min(—log10(abs(X1-X2))) where X1 and X2 are the results arrays obtains from the two binary files.
Files needed in the code directory:
epanet2d.exe is the official EPANET standalone version.
epanet2.exe is the current development version (the one being tested).
How to use: run the program and click the RUN button.
By Elad Salomons
email: selad@optiwater.com

View File

@@ -1,35 +0,0 @@
#! /bin/bash
test_networks()
{
returnValue=0
for d in network_tests/*/ ; do
for netfile in `ls $d*.inp`; do
officialBinFile=${netfile%.*}.enb
candidateBinFile=${netfile%.*}-candidate.enb
echo "testing $netfile with known good binary output $officialBinFile"
if ../build/CMake/buildproducts/bin/runepanet $netfile ${netfile%.*}-candidate.rpt $candidateBinFile
then
echo "epanet run for $netfile SUCCESS"
else
echo "epanet run for $netfile FAILED"
returnValue=1
fi
if python ENBinaryOutDiff.py $officialBinFile $candidateBinFile
then
echo "binary output for $netfile PASSED"
else
echo "binary output for $netfile FAILED"
returnValue=1
fi
echo "+++++"
done
done
return $returnValue
}
cp ../build/CMake/buildproducts/bin/libENBinaryOut.* ./libENBinaryOut.so
cp ../tools/outputapi/*.py ./
test_networks

46
tools/app-config.sh Executable file
View File

@@ -0,0 +1,46 @@
#! /bin/bash
#
# app-config.sh - Generates nrtest app configuration file for test executable
#
# Date Created: 3/19/2018
#
# Author: Michael E. Tryby
# US EPA - ORD/NRMRL
#
# Arguments:
# 1 - absolute path to test executable
#
# NOT IMPLEMENTED YET
# 2 - test executable version number
# 3 - build description
#
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) ;&
Darwin*) abs_build_path=$1
test_cmd="runepanet"
;;
MINGW*) ;&
MSYS*) # Remove leading '/c' from file path for nrtest
abs_build_path="$( echo "$1" | sed -e 's#/c##' )"
test_cmd="runepanet.exe"
;;
*) # Machine unknown
esac
version=""
build_description=""
cat<<EOF
{
"name" : "epanet",
"version" : "${version}",
"description" : "${build_description}",
"setup_script" : "",
"exe" : "${abs_build_path}/${test_cmd}"
}
EOF

60
tools/before-test.cmd Normal file
View File

@@ -0,0 +1,60 @@
::
:: before-test.cmd - Prepares AppVeyor CI worker to run epanet regression tests
::
:: Date Created: 4/3/2018
::
:: Author: Michael E. Tryby
:: US EPA - ORD/NRMRL
::
:: Arguments:
:: 1 - relative path regression test file staging location
:: 2 - absolute path to location of software under test
:: 3 - build identifier for software under test
::
:: Note:
:: Tests and benchmark files are stored in the epanet-example-networks repo.
:: This script retreives them using a stable URL associated with a release on
:: GitHub and stages the files for nrtest to run. The script assumes that
:: before-test.cmd and gen-config.cmd are located together in the same folder.
::
@echo off
setlocal
set SCRIPT_HOME=%~dp0
set TEST_HOME=%~1
set EXAMPLES_VER=1.0.0
set BENCHMARK_VER=2012
set TESTFILES_URL=https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/v%EXAMPLES_VER%.zip
set BENCHFILES_URL=https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/v%EXAMPLES_VER%/epanet-benchmark-%BENCHMARK_VER%.zip
echo INFO: Staging files for regression testing
:: create a clean directory for staging regression tests
if exist %TEST_HOME% (
rmdir /s /q %TEST_HOME%
)
mkdir %TEST_HOME%
cd %TEST_HOME%
:: retrieve epanet-examples for regression testing
curl -fsSL -o examples.zip %TESTFILES_URL%
:: retrieve epanet benchmark results
curl -fsSL -o benchmark.zip %BENCHFILES_URL%
:: extract tests and benchmarks
7z x examples.zip *\epanet-tests\* > nul
7z x benchmark.zip -obenchmark\ > nul
:: set up symlink for tests directory
mklink /D .\tests .\epanet-example-networks-%EXAMPLES_VER%\epanet-tests
:: generate json configuration file for software under test
mkdir apps
%SCRIPT_HOME%\gen-config.cmd %~2 > apps\epanet-%~3.json

58
tools/before-test.sh Executable file
View File

@@ -0,0 +1,58 @@
#! /bin/bash
#
# before-test.sh - Prepares Travis CI worker to run epanet regression tests
#
# Date Created: 04/04/2018
#
# Author: Michael E. Tryby
# US EPA - ORD/NRMRL
#
# Arguments:
# 1 - relative path regression test file staging location
# 2 - absolute path to location of software under test
# 3 - build identifier for software under test
#
# Note:
# Tests and benchmark files are stored in the epanet-example-networks repo.
# This script retreives them using a stable URL associated with a release on
# GitHub and stages the files for nrtest to run. The script assumes that
# before-test.sh and gen-config.sh are located together in the same folder.
SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TEST_HOME=$1
EXAMPLES_VER="1.0.0"
BENCHMARK_VER="2012"
TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/v${EXAMPLES_VER}.tar.gz"
BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/v${EXAMPLES_VER}/epanet-benchmark-${BENCHMARK_VER}.tar.gz"
echo INFO: Staging files for regression testing
# create a clean directory for staging regression tests
if [ -d ${TEST_HOME} ]; then
rm -rf ${TEST_HOME}
fi
mkdir ${TEST_HOME}
cd ${TEST_HOME}
# retrieve epanet-examples for regression testing
curl -fsSL -o examples.tar.gz ${TEST_URL}
# retrieve epanet benchmark results
curl -fsSL -o benchmark.tar.gz ${BENCH_URL}
# extract tests and benchmarks
tar xzf examples.tar.gz
ln -s epanet-example-networks-${EXAMPLES_VER}/epanet-tests tests
mkdir benchmark
tar xzf benchmark.tar.gz -C benchmark
# generate json configuration file for software under test
mkdir apps
${SCRIPT_HOME}/gen-config.sh $2 > apps/epanet-$3.json

View File

@@ -107,8 +107,8 @@ def epanet_report_compare(path_test, path_ref, rtol, atol):
RunTimeError()
...
'''
HEADER = 11
FOOTER = 3
HEADER = 10
FOOTER = 2
with open(path_test ,'r') as ftest, open(path_ref, 'r') as fref:

View File

@@ -1,14 +1,15 @@
#
# requirements.txt
# requirements-appveyor.txt
#
# Date Created: 10/10/2017
# Author: Michael E. Tryby
# US EPA ORD/NRMRL
#
# Useful for configuring a python environment to run epanet-nrtestsuite.
# Useful for configuring a python environment to run epanet-nrtestsuite
# on AppVeyor CI.
#
# command:
# $ pip install --src build/packages -r tools/requirements.txt
# $ pip install --src build/packages -r tools/requirements-appveyor.txt
#
nrtest>=0.2.3

View File

@@ -20,7 +20,7 @@ set TEST_SUITE_PATH=%~2
set NRTEST_EXECUTE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest execute
set TEST_APP_PATH=apps\epanet-%3.json
set TESTS=tests\examples
set TESTS=tests\examples tests\exeter tests\large tests\network_one tests\small tests\tanks tests\valves
set TEST_OUTPUT_PATH=benchmark\epanet-%3
set NRTEST_COMPARE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest compare
@@ -41,6 +41,8 @@ set NRTEST_COMMAND=%NRTEST_EXECUTE_CMD% %TEST_APP_PATH% %TESTS% -o %TEST_OUTPUT_
:: if there is an error exit the script with error value 1
%NRTEST_COMMAND% || exit /B 1
echo.
echo INFO: Comparing test and ref benchmark
set NRTEST_COMMAND=%NRTEST_COMPARE_CMD% %TEST_OUTPUT_PATH% %REF_OUTPUT_PATH% --rtol %RTOL_VALUE% --atol %ATOL_VALUE%
%NRTEST_COMMAND%

View File

@@ -9,7 +9,7 @@
# US EPA - ORD/NRMRL
#
# Arguments:
# 1 - test suite path
# 1 - relative path to location there test suite is staged
# 2 - version/build identifier
#
@@ -22,7 +22,7 @@ test_suite_path=$1
nrtest_execute_cmd="nrtest execute"
test_app_path="apps/epanet-$2.json"
tests="tests/examples"
tests="tests/examples tests/exeter tests/large tests/network_one tests/small tests/tanks tests/valves"
test_output_path="benchmark/epanet-$2"
nrtest_compare_cmd="nrtest compare"

43
tools/test-config.sh Normal file
View File

@@ -0,0 +1,43 @@
#! /bin/bash
#
# test-config.sh - Generates nrtest test configuration file for test case.
#
# Date Created: 3/19/2018
#
# Author: Michael E. Tryby
# US EPA - ORD/NRMRL
#
# Arguments:
# 1 - name
# 2 - version
# 3 - description
#
# Suggested Usage:
# $ for file in .//*; do ./test-config.sh $file 1.0 > "${file%.*}.json"; done
#
filename="$1"
name="${filename%.*}"
version="$2"
description="$3"
cat<<EOF
{
"name": "${name}",
"version": "${version}",
"description": "${description}",
"args": [
"${name}.inp",
"${name}.rpt",
"${name}.out"
],
"input_files": [
"${name}.inp"
],
"output_files": {
"${name}.rpt": "epanet report",
"${name}.out": "epanet allclose"
}
}
EOF