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