@@ -251,19 +251,18 @@ def run(self) -> int:
251251 timeout = self ._timeout )
252252 stdout = cmdres .stdout .strip ()
253253 stderr = cmdres .stderr .strip ()
254+ returncode = cmdres .returncode
254255
255256 logger .debug ("OM output for command %s:\n %s" , cmdl , stdout )
256257
257- if cmdres .returncode != 0 :
258- raise ModelicaSystemError (f"Error running command { cmdl } : return code = { cmdres .returncode } " )
259258 if stderr :
260259 raise ModelicaSystemError (f"Error running command { cmdl } : { stderr } " )
261260 except subprocess .TimeoutExpired :
262261 raise ModelicaSystemError (f"Timeout running command { repr (cmdl )} " )
263262 except Exception as ex :
264263 raise ModelicaSystemError (f"Error running command { cmdl } " ) from ex
265264
266- return True
265+ return returncode
267266
268267 @staticmethod
269268 def parse_simflags (simflags : str ) -> dict :
@@ -396,7 +395,7 @@ def __init__(
396395 self .simulationFlag = False # if the model is simulated?
397396 self .outputFlag = False
398397 self .csvFile = '' # for storing inputs condition
399- self .resultfile = "" # for storing result file
398+ self .resultfile = None # for storing result file
400399 self .variableFilter = variableFilter
401400
402401 if self .fileName is not None and not self .fileName .is_file (): # if file does not exist
@@ -820,13 +819,13 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
820819
821820 if resultfile is None :
822821 # default result file generated by OM
823- self .resultfile = ( self .tempdir / f"{ self .modelName } _res.mat" ). as_posix ()
822+ self .resultfile = self .tempdir / f"{ self .modelName } _res.mat"
824823 elif os .path .exists (resultfile ):
825- self .resultfile = resultfile
824+ self .resultfile = pathlib . Path ( resultfile )
826825 else :
827- self .resultfile = ( self .tempdir / resultfile ). as_posix ()
826+ self .resultfile = self .tempdir / resultfile
828827 # always define the resultfile to use
829- om_cmd .arg_set (key = "r" , val = self .resultfile )
828+ om_cmd .arg_set (key = "r" , val = self .resultfile . as_posix () )
830829
831830 # allow runtime simulation flags from user input
832831 if simflags is not None :
@@ -862,7 +861,16 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
862861
863862 om_cmd .arg_set (key = "csvInput" , val = self .csvFile .as_posix ())
864863
865- self .simulationFlag = om_cmd .run ()
864+ # delete resultfile ...
865+ if self .resultfile .is_file ():
866+ self .resultfile .unlink ()
867+ # ... run simulation ...
868+ returncode = om_cmd .run ()
869+ # and check returncode *AND* resultfile
870+ if returncode != 0 and self .resultfile .is_file ():
871+ logger .warning (f"Return code = { returncode } but result file exists!" )
872+
873+ self .simulationFlag = True
866874
867875 # to extract simulation results
868876 def getSolutions (self , varList = None , resultfile = None ): # 12
@@ -878,7 +886,7 @@ def getSolutions(self, varList=None, resultfile=None): # 12
878886 >>> getSolutions(["Name1","Name2"],resultfile=""c:/a.mat"")
879887 """
880888 if resultfile is None :
881- resFile = self .resultfile
889+ resFile = self .resultfile . as_posix ()
882890 else :
883891 resFile = resultfile
884892
@@ -1234,7 +1242,16 @@ def linearize(self, lintime: Optional[float] = None, simflags: Optional[str] = N
12341242 if simargs :
12351243 om_cmd .args_set (args = simargs )
12361244
1237- self .simulationFlag = om_cmd .run ()
1245+ # delete resultfile ...
1246+ if self .resultfile .is_file ():
1247+ self .resultfile .unlink ()
1248+ # ... run simulation ...
1249+ returncode = om_cmd .run ()
1250+ # and check returncode *AND* resultfile
1251+ if returncode != 0 and self .resultfile .is_file ():
1252+ logger .warning (f"Return code = { returncode } but result file exists!" )
1253+
1254+ self .simulationFlag = True
12381255
12391256 # code to get the matrix and linear inputs, outputs and states
12401257 linearFile = self .tempdir / "linearized_model.py"
0 commit comments