def test_set_current_time(): swmmobject = PySWMM(*get_model_files(MODEL_WEIR_SETTING_PATH)) swmmobject.swmm_open() print(swmmobject.getSimulationDateTime(0)) print(swmmobject.getSimulationDateTime(0) - timedelta(days=10)) swmmobject.setSimulationDateTime( 0, swmmobject.getSimulationDateTime(0) - timedelta(days=10), ) print(swmmobject.getSimulationDateTime(0)) print(swmmobject.getSimulationDateTime(1)) print(swmmobject.getSimulationDateTime(1) - timedelta(days=10)) swmmobject.setSimulationDateTime( 1, swmmobject.getSimulationDateTime(1) - timedelta(days=10), ) print(swmmobject.getSimulationDateTime(1)) print(swmmobject.getSimulationDateTime(2)) print(swmmobject.getSimulationDateTime(2) - timedelta(days=10)) swmmobject.setSimulationDateTime( 2, swmmobject.getSimulationDateTime(2) - timedelta(days=10), ) print(swmmobject.getSimulationDateTime(2)) swmmobject.swmm_start() i = 0 while (True): time = swmmobject.swmm_stride(600) i += 1 print(swmmobject.getCurrentSimualationTime()) print(type(swmmobject.getCurrentSimualationTime())) if (time <= 0.0): break if i % 144 == 0: print(i) swmmobject.swmm_end() swmmobject.swmm_close()
def test_current_time(): swmmobject = PySWMM(*get_model_files(MODEL_WEIR_SETTING_PATH)) swmmobject.swmm_open() date = swmmobject.getSimulationDateTime(0) print(date) swmmobject.swmm_start() i = 0 while (True): time = swmmobject.swmm_stride(600) print(time) i += 1 current_time = swmmobject.getCurrentSimualationTime() print(current_time) print(type(swmmobject.getCurrentSimualationTime())) if (time <= 0.0): break if i % 144 == 0: print(i) swmmobject.swmm_end() swmmobject.swmm_report() swmmobject.swmm_close()
class Simulation(object): """ Base class for a SWMM Simulation. The model object provides several options to run a simulation. Examples: Intialize a simulation and iterate through a simulation. This approach requires some clean up. >>> from pyswmm import Simulation >>> >>> sim = Simulation('./TestModel1_weirSetting.inp') >>> for step in sim: ... pass >>> >>> sim.report() >>> sim.close() Intialize using with statement. This automatically cleans up after a simulation >>> from pyswmm import Simulation >>> >>> with Simulation('./TestModel1_weirSetting.inp') as sim: ... for step in sim: ... pass ... sim.report() Initialize the simulation and execute. This style does not allow the user to interact with the simulation. However, this approach tends to be the fastest. >>> from pyswmm import Simulation >>> >>> sim = Simulation('./TestModel1_weirSetting.inp') >>> sim.execute() """ def __init__(self, inputfile, reportfile=None, outputfile=None): self._model = PySWMM(inputfile, reportfile, outputfile) self._model.swmm_open() self._advance_seconds = None self._isStarted = False def __enter__(self): """ Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... for step in sim: ... print(sim.current_time) ... sim.report() >>> >>> 2015-11-01 14:00:30 >>> 2015-11-01 14:01:00 >>> 2015-11-01 14:01:30 >>> 2015-11-01 14:02:00 """ return self def __iter__(self): """Iterator over Simulation""" return self def next(self): """Next""" # Start Simulation if not self._isStarted: self._model.swmm_start(True) self._isStarted = True # Simulation Step Amount if self._advance_seconds is None: time = self._model.swmm_step() else: time = self._model.swmm_stride(self._advance_seconds) if time <= 0.0: self._model.swmm_end() raise StopIteration return self._model def __exit__(self, *a): """close""" self._model.swmm_end() self._model.swmm_close() def step_advance(self, advance_seconds): """ Advances the model by X number of seconds instead of intervening at every routing step. This does not change the routing step for the simulation; only lets python take back control after each advance period. :param int advance_seconds: Seconds to Advance simulation Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... sim.step_advance(300) ... for step in sim: ... print(step.current_time) ... # or here! sim.step_advance(newvalue) ... sim.report() >>> >>> 2015-11-01 14:00:30 >>> 2015-11-01 14:01:00 >>> 2015-11-01 14:01:30 >>> 2015-11-01 14:02:00 """ self._advance_seconds = advance_seconds def report(self): """ Writes to report file after simulation Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... for step in sim: ... pass ... sim.report() """ self._model.swmm_report() def close(self): """ Intialize a simulation and iterate through a simulation. This approach requires some clean up. Examples: >>> from pyswmm import Simulation >>> >>> sim = Simulation('./TestModel1_weirSetting.inp') >>> for step in sim: ... pass >>> >>> sim.report() >>> sim.close() """ self.__exit__() def execute(self): """ Open an input file, run SWMM, then close the file. Examples: >>> sim = PYSWMM(r'\\test.inp') >>> sim.execute() """ self._model.swmmExec() @property def start_time(self): """Get/set Simulation start time Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... print sim.start_time ... sim.start_time = datetime(2015,5,10,15,15,1) >>> >>> datetime.datetime(2015,5,10,15,15,1) """ return self._model.getSimulationDateTime( SimulationTime.StartDateTime.value) @start_time.setter def start_time(self, dtimeval): """Set simulation Start time""" self._model.setSimulationDateTime(SimulationTime.StartDateTime.value, dtimeval) @property def end_time(self): """Get/set Simulation end time Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... print sim.end_time ... sim.end_time = datetime(2016,5,10,15,15,1) >>> >>> datetime.datetime(2016,5,10,15,15,1) """ return self._model.getSimulationDateTime( SimulationTime.EndDateTime.value) @end_time.setter def end_time(self, dtimeval): """Set simulation End time""" self._model.setSimulationDateTime(SimulationTime.EndDateTime.value, dtimeval) @property def report_start(self): """Get/set Simulation report start time Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... print sim.report_start ... sim.report_start = datetime(2015,5,10,15,15,1) >>> >>> datetime.datetime(2015,5,10,15,15,1) """ return self._model.getSimulationDateTime( SimulationTime.ReportStart.value) @report_start.setter def report_start(self, dtimeval): """Set simulation report start time""" self._model.setSimulationDateTime(SimulationTime.ReportStart.value, dtimeval) @property def flow_units(self): """ Get Simulation Units (CFS, GPM, MGD, CMS, LPS, MLD). :return: Flow Unit :rtype: str Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... print sim.flow_units >>> >>> CFS """ return self._model.getSimUnit(SimulationUnits.FlowUnits.value) @property def system_units(self): """Get system units (US, SI). :return: System Unit :rtype: str Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... print sim.system_units >>> >>> US """ return self._model.getSimUnit(SimulationUnits.UnitSystem.value) @property def current_time(self): """Get Simulation Current Time. :return: Current Simulation Time :rtype: Datetime Examples: >>> from pyswmm import Simulation >>> >>> with Simulation('../test/TestModel1_weirSetting.inp') as sim: ... for step in sim: ... print(sim.current_time) ... sim.report() >>> >>> 2015-11-01 14:00:30 >>> 2015-11-01 14:01:00 >>> 2015-11-01 14:01:30 >>> 2015-11-01 14:02:00 """ return self._model.getCurrentSimualationTime()