@@ -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