Skip to content

Commit 7099242

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

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
@@ -858,29 +858,36 @@ def getOptimizationOptions(self, names=None): # 10
858858

859859
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
860860

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

873887
om_cmd = ModelicaSystemCmd(runpath=self.tempdir, modelname=self.modelName, timeout=timeout)
874888

875-
if resultfile is None:
876-
# default result file generated by OM
877-
self.resultfile = self.tempdir / f"{self.modelName}_res.mat"
878-
elif os.path.exists(resultfile):
879-
self.resultfile = pathlib.Path(resultfile)
880-
else:
881-
self.resultfile = self.tempdir / resultfile
882-
# always define the resultfile to use
883-
om_cmd.arg_set(key="r", val=self.resultfile.as_posix())
889+
# always define the result file to use
890+
om_cmd.arg_set(key="r", val=resultfile.as_posix())
884891

885892
# allow runtime simulation flags from user input
886893
if simflags is not None:
@@ -916,6 +923,30 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
916923

917924
om_cmd.arg_set(key="csvInput", val=self.csvFile.as_posix())
918925

926+
return om_cmd
927+
928+
def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = None,
929+
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
930+
timeout: Optional[int] = None): # 11
931+
"""
932+
This method simulates model according to the simulation options.
933+
usage
934+
>>> simulate()
935+
>>> simulate(resultfile="a.mat")
936+
>>> simulate(simflags="-noEventEmit -noRestart -override=e=0.3,g=10") # set runtime simulation flags
937+
>>> simulate(simargs={"noEventEmit": None, "noRestart": None, "override": "e=0.3,g=10"}) # using simargs
938+
"""
939+
940+
if resultfile is None:
941+
# default result file generated by OM
942+
self.resultfile = self.tempdir / f"{self.modelName}_res.mat"
943+
elif os.path.exists(resultfile):
944+
self.resultfile = pathlib.Path(resultfile)
945+
else:
946+
self.resultfile = self.tempdir / resultfile
947+
948+
om_cmd = self.simulate_cmd(resultfile=self.resultfile, simflags=simflags, simargs=simargs, timeout=timeout)
949+
919950
# delete resultfile ...
920951
if self.resultfile.is_file():
921952
self.resultfile.unlink()

0 commit comments

Comments
 (0)