@@ -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 } : nonzero return code" )
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
0 commit comments