22import unittest
33import warnings
44from os .path import abspath , dirname , join
5+ import copy
56
67import wntr
78
1112
1213
1314class TestValveSettingControls (unittest .TestCase ):
14- def test_status_open_when_setting_changes (self ):
15+ @classmethod
16+ def setUpClass (self ):
1517 wn = wntr .network .WaterNetworkModel ()
1618 wn .add_reservoir ("r1" , base_head = 10 )
1719 wn .add_junction ("j1" , base_demand = 0 )
1820 wn .add_junction ("j2" , base_demand = 0.05 )
1921 wn .add_pipe ("p1" , "r1" , "j1" )
20- wn .add_valve ("v1" , "j1" , "j2" , valve_type = "PRV" , initial_setting = 2 )
22+ wn .add_valve ("v1" , "j1" , "j2" , valve_type = "PRV" ,
23+ initial_setting = 2 , initial_status = 'Active' )
2124 wn .options .time .duration = 3600 * 5
22-
25+ self .wn = wn
26+
27+ @classmethod
28+ def tearDownClass (self ):
29+ pass
30+
31+ def test_status_open_when_setting_changes (self ):
32+ wn = copy .deepcopy (self .wn )
2333 action = wntr .network .ControlAction (
2434 wn .get_link ("v1" ), "status" , wntr .network .LinkStatus .Closed
2535 )
@@ -37,8 +47,64 @@ def test_status_open_when_setting_changes(self):
3747 self .assertEqual (
3848 results .link ["status" ].at [7200 , "v1" ], wntr .network .LinkStatus .Active
3949 )
40-
41-
50+
51+ def test_initial_status (self ):
52+ # Run simulations with open valve
53+ wn = copy .deepcopy (self .wn )
54+ valve_name = 'v1'
55+ valve = wn .get_link (valve_name )
56+ valve .initial_status = 'Open'
57+
58+ sim = wntr .sim .EpanetSimulator (wn )
59+ results_epanet_open = sim .run_sim ()
60+
61+ sim = wntr .sim .WNTRSimulator (wn )
62+ results_wntr_open = sim .run_sim ()
63+
64+ # Check that valve is open (1) and flow is not 0
65+ assert (results_epanet_open .link ['status' ].loc [:,'v1' ] == 1 ).all ()
66+ assert (results_wntr_open .link ['status' ].loc [:,'v1' ] == 1 ).all ()
67+ assert (results_epanet_open .link ['flowrate' ].loc [:,'v1' ].abs () > 0 ).all ()
68+ assert (results_wntr_open .link ['flowrate' ].loc [:,'v1' ].abs () > 0 ).all ()
69+
70+ # Run simulations with closed valve
71+ wn = copy .deepcopy (self .wn )
72+ valve_name = 'v1'
73+ valve = wn .get_link (valve_name )
74+ valve .initial_status = 'Closed'
75+
76+ sim = wntr .sim .EpanetSimulator (wn )
77+ results_epanet_closed = sim .run_sim ()
78+
79+ sim = wntr .sim .WNTRSimulator (wn )
80+ results_wntr_closed = sim .run_sim ()
81+
82+ # Check that valve is closed (0) and flow is 0
83+ assert (results_epanet_closed .link ['status' ].loc [:,'v1' ] == 0 ).all ()
84+ assert (results_wntr_closed .link ['status' ].loc [:,'v1' ] == 0 ).all ()
85+ assert (results_epanet_closed .link ['flowrate' ].loc [:,'v1' ] == 0 ).all ()
86+ assert (results_wntr_closed .link ['flowrate' ].loc [:,'v1' ] == 0 ).all ()
87+
88+ def test_initial_setting (self ):
89+ # Run simulations with valve setting of 4
90+ wn = copy .deepcopy (self .wn )
91+ valve_name = 'v1'
92+ valve = wn .get_link (valve_name )
93+ # pressure setting on its downstream side when the upstream pressure is above the setting
94+ valve .initial_setting = 4
95+
96+ sim = wntr .sim .EpanetSimulator (wn )
97+ results_epanet_open = sim .run_sim ()
98+
99+ sim = wntr .sim .WNTRSimulator (wn )
100+ results_wntr_open = sim .run_sim ()
101+
102+ # Check that valve is active (2) and the downstream pressure is 4
103+ assert (results_epanet_open .link ['status' ].loc [:,'v1' ] == 2 ).all ()
104+ assert (results_wntr_open .link ['status' ].loc [:,'v1' ] == 2 ).all ()
105+ assert (results_epanet_open .node ['pressure' ].loc [:,'j2' ] == 4 ).all ()
106+ assert (results_wntr_open .node ['pressure' ].loc [:,'j2' ] == 4 ).all ()
107+
42108class TestPumpSettingControls (unittest .TestCase ):
43109 def test_status_open_when_setting_changes (self ):
44110 wn = wntr .network .WaterNetworkModel ()
0 commit comments