@@ -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 :
@@ -400,7 +399,7 @@ def __init__(
400399 self .simulationFlag = False # if the model is simulated?
401400 self .outputFlag = False
402401 self .csvFile = '' # for storing inputs condition
403- self .resultfile = "" # for storing result file
402+ self .resultfile = None # for storing result file
404403 self .variableFilter = variableFilter
405404
406405 if self .fileName is not None and not self .fileName .is_file (): # if file does not exist
@@ -819,13 +818,13 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
819818
820819 if resultfile is None :
821820 # default result file generated by OM
822- self .resultfile = ( self .tempdir / f"{ self .modelName } _res.mat" ). as_posix ()
821+ self .resultfile = self .tempdir / f"{ self .modelName } _res.mat"
823822 elif os .path .exists (resultfile ):
824- self .resultfile = resultfile
823+ self .resultfile = pathlib . Path ( resultfile )
825824 else :
826- self .resultfile = ( self .tempdir / resultfile ). as_posix ()
825+ self .resultfile = self .tempdir / resultfile
827826 # always define the resultfile to use
828- om_cmd .arg_set (key = "r" , val = self .resultfile )
827+ om_cmd .arg_set (key = "r" , val = self .resultfile . as_posix () )
829828
830829 # allow runtime simulation flags from user input
831830 if simflags is not None :
@@ -861,7 +860,16 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
861860
862861 om_cmd .arg_set (key = "csvInput" , val = self .csvFile .as_posix ())
863862
864- self .simulationFlag = om_cmd .run ()
863+ # delete resultfile ...
864+ if self .resultfile .is_file ():
865+ self .resultfile .unlink ()
866+ # ... run simulation ...
867+ returncode = om_cmd .run ()
868+ # and check returncode *AND* resultfile
869+ if returncode != 0 and self .resultfile .is_file ():
870+ logger .warning (f"Return code = { returncode } but result file exists!" )
871+
872+ self .simulationFlag = True
865873
866874 # to extract simulation results
867875 def getSolutions (self , varList = None , resultfile = None ): # 12
@@ -877,7 +885,7 @@ def getSolutions(self, varList=None, resultfile=None): # 12
877885 >>> getSolutions(["Name1","Name2"],resultfile=""c:/a.mat"")
878886 """
879887 if resultfile is None :
880- resFile = self .resultfile
888+ resFile = self .resultfile . as_posix ()
881889 else :
882890 resFile = resultfile
883891
@@ -1233,7 +1241,11 @@ def linearize(self, lintime: Optional[float] = None, simflags: Optional[str] = N
12331241 if simargs :
12341242 om_cmd .args_set (args = simargs )
12351243
1236- self .simulationFlag = om_cmd .run ()
1244+ returncode = om_cmd .run ()
1245+ if returncode != 0 :
1246+ raise ModelicaSystemError (f"Linearize failed with return code: { returncode } " )
1247+
1248+ self .simulationFlag = True
12371249
12381250 # code to get the matrix and linear inputs, outputs and states
12391251 linearFile = self .tempdir / "linearized_model.py"
0 commit comments