Skip to content

Commit 77ac2b8

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

File tree

1 file changed

+63
-27
lines changed

1 file changed

+63
-27
lines changed

OMPython/ModelicaSystem.py

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -915,40 +915,36 @@ def getOptimizationOptions(self, names: Optional[str | list[str]] = None) -> dic
915915

916916
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
917917

918-
def simulate(self,
919-
resultfile: Optional[str] = None,
920-
simflags: Optional[str] = None,
921-
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
922-
timeout: Optional[float] = None) -> None:
923-
"""Simulate the model according to simulation options.
918+
def simulate_cmd(
919+
self,
920+
resultfile: pathlib.Path,
921+
simflags: Optional[str] = None,
922+
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
923+
timeout: Optional[int] = None,
924+
) -> ModelicaSystemCmd:
925+
"""
926+
This method prepares the simulates model according to the simulation options. It returns an instance of
927+
ModelicaSystemCmd which can be used to run the simulation.
924928
925-
See setSimulationOptions().
929+
Due to the tempdir being unique for the ModelicaSystem instance, *NEVER* use this to create several simulations
930+
with the same instance of ModelicaSystem! Restart each simulation process with a new instance of ModelicaSystem.
926931
927-
Args:
928-
resultfile: Path to a custom result file
929-
simflags: String of extra command line flags for the model binary.
930-
This argument is deprecated, use simargs instead.
931-
simargs: Dict with simulation runtime flags.
932-
timeout: Maximum execution time in seconds.
932+
Parameters
933+
----------
934+
resultfile
935+
simflags
936+
simargs
937+
timeout
933938
934-
Examples:
935-
mod.simulate()
936-
mod.simulate(resultfile="a.mat")
937-
mod.simulate(simflags="-noEventEmit -noRestart -override=e=0.3,g=10") # set runtime simulation flags, deprecated
938-
mod.simulate(simargs={"noEventEmit": None, "noRestart": None, "override": "override": {"e": 0.3, "g": 10}}) # using simargs
939+
Returns
940+
-------
941+
An instance if ModelicaSystemCmd to run the requested simulation.
939942
"""
940943

941944
om_cmd = ModelicaSystemCmd(runpath=self._tempdir, modelname=self._model_name, timeout=timeout)
942945

943-
if resultfile is None:
944-
# default result file generated by OM
945-
self._result_file = self._tempdir / f"{self._model_name}_res.mat"
946-
elif os.path.exists(resultfile):
947-
self._result_file = pathlib.Path(resultfile)
948-
else:
949-
self._result_file = self._tempdir / resultfile
950-
# always define the resultfile to use
951-
om_cmd.arg_set(key="r", val=self._result_file.as_posix())
946+
# always define the result file to use
947+
om_cmd.arg_set(key="r", val=resultfile.as_posix())
952948

953949
# allow runtime simulation flags from user input
954950
if simflags is not None:
@@ -984,6 +980,46 @@ def simulate(self,
984980

985981
om_cmd.arg_set(key="csvInput", val=self._csvFile.as_posix())
986982

983+
return om_cmd
984+
985+
def simulate(self,
986+
resultfile: Optional[str] = None,
987+
simflags: Optional[str] = None,
988+
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
989+
timeout: Optional[float] = None) -> None:
990+
"""Simulate the model according to simulation options.
991+
992+
See setSimulationOptions().
993+
994+
Args:
995+
resultfile: Path to a custom result file
996+
simflags: String of extra command line flags for the model binary.
997+
This argument is deprecated, use simargs instead.
998+
simargs: Dict with simulation runtime flags.
999+
timeout: Maximum execution time in seconds.
1000+
1001+
Examples:
1002+
mod.simulate()
1003+
mod.simulate(resultfile="a.mat")
1004+
mod.simulate(simflags="-noEventEmit -noRestart -override=e=0.3,g=10") # set runtime simulation flags, deprecated
1005+
mod.simulate(simargs={"noEventEmit": None, "noRestart": None, "override": "override": {"e": 0.3, "g": 10}}) # using simargs
1006+
"""
1007+
1008+
if resultfile is None:
1009+
# default result file generated by OM
1010+
self._result_file = self._tempdir / f"{self._model_name}_res.mat"
1011+
elif os.path.exists(resultfile):
1012+
self._result_file = pathlib.Path(resultfile)
1013+
else:
1014+
self._result_file = self._tempdir / resultfile
1015+
1016+
om_cmd = self.simulate_cmd(
1017+
resultfile=self._result_file,
1018+
simflags=simflags,
1019+
simargs=simargs,
1020+
timeout=timeout,
1021+
)
1022+
9871023
# delete resultfile ...
9881024
if self._result_file.is_file():
9891025
self._result_file.unlink()

0 commit comments

Comments
 (0)