Skip to content

Commit 548152a

Browse files
committed
[ModelicaSystem] split simulate() into two methods
(1) create ModelicasystemCmd instance - simulate_cmd() (2) run it - simulate()
1 parent d585207 commit 548152a

File tree

1 file changed

+49
-18
lines changed

1 file changed

+49
-18
lines changed

OMPython/ModelicaSystem.py

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -867,29 +867,36 @@ def getOptimizationOptions(self, names=None): # 10
867867

868868
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
869869

870-
def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = None,
871-
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
872-
timeout: Optional[int] = None): # 11
870+
def simulate_cmd(
871+
self,
872+
resultfile: pathlib.Path,
873+
simflags: Optional[str] = None,
874+
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
875+
timeout: Optional[int] = None,
876+
) -> ModelicaSystemCmd:
873877
"""
874-
This method simulates model according to the simulation options.
875-
usage
876-
>>> simulate()
877-
>>> simulate(resultfile="a.mat")
878-
>>> simulate(simflags="-noEventEmit -noRestart -override=e=0.3,g=10") # set runtime simulation flags
879-
>>> simulate(simargs={"noEventEmit": None, "noRestart": None, "override": "e=0.3,g=10"}) # using simargs
878+
This method prepares the simulates model according to the simulation options. It returns an instance of
879+
ModelicaSystemCmd which can be used to run the simulation.
880+
881+
Due to the tempdir being unique for the ModelicaSystem instance, *NEVER* use this to create several simulations
882+
with the same instance of ModelicaSystem! Restart each simulation process with a new instance of ModelicaSystem.
883+
884+
Parameters
885+
----------
886+
resultfile
887+
simflags
888+
simargs
889+
timeout
890+
891+
Returns
892+
-------
893+
An instance if ModelicaSystemCmd to run the requested simulation.
880894
"""
881895

882896
om_cmd = ModelicaSystemCmd(runpath=self.tempdir, modelname=self.modelName, timeout=timeout)
883897

884-
if resultfile is None:
885-
# default result file generated by OM
886-
self.resultfile = self.tempdir / f"{self.modelName}_res.mat"
887-
elif os.path.exists(resultfile):
888-
self.resultfile = pathlib.Path(resultfile)
889-
else:
890-
self.resultfile = self.tempdir / resultfile
891-
# always define the resultfile to use
892-
om_cmd.arg_set(key="r", val=self.resultfile.as_posix())
898+
# always define the result file to use
899+
om_cmd.arg_set(key="r", val=resultfile.as_posix())
893900

894901
# allow runtime simulation flags from user input
895902
if simflags is not None:
@@ -925,6 +932,30 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
925932

926933
om_cmd.arg_set(key="csvInput", val=self.csvFile.as_posix())
927934

935+
return om_cmd
936+
937+
def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = None,
938+
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
939+
timeout: Optional[int] = None): # 11
940+
"""
941+
This method simulates model according to the simulation options.
942+
usage
943+
>>> simulate()
944+
>>> simulate(resultfile="a.mat")
945+
>>> simulate(simflags="-noEventEmit -noRestart -override=e=0.3,g=10") # set runtime simulation flags
946+
>>> simulate(simargs={"noEventEmit": None, "noRestart": None, "override": "e=0.3,g=10"}) # using simargs
947+
"""
948+
949+
if resultfile is None:
950+
# default result file generated by OM
951+
self.resultfile = self.tempdir / f"{self.modelName}_res.mat"
952+
elif os.path.exists(resultfile):
953+
self.resultfile = pathlib.Path(resultfile)
954+
else:
955+
self.resultfile = self.tempdir / resultfile
956+
957+
om_cmd = self.simulate_cmd(resultfile=self.resultfile, simflags=simflags, simargs=simargs, timeout=timeout)
958+
928959
# delete resultfile ...
929960
if self.resultfile.is_file():
930961
self.resultfile.unlink()

0 commit comments

Comments
 (0)