@@ -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
@@ -825,13 +824,13 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
825824
826825 if resultfile is None :
827826 # default result file generated by OM
828- self .resultfile = ( self .tempdir / f"{ self .modelName } _res.mat" ). as_posix ()
827+ self .resultfile = self .tempdir / f"{ self .modelName } _res.mat"
829828 elif os .path .exists (resultfile ):
830- self .resultfile = resultfile
829+ self .resultfile = pathlib . Path ( resultfile )
831830 else :
832- self .resultfile = ( self .tempdir / resultfile ). as_posix ()
831+ self .resultfile = self .tempdir / resultfile
833832 # always define the resultfile to use
834- om_cmd .arg_set (key = "r" , val = self .resultfile )
833+ om_cmd .arg_set (key = "r" , val = self .resultfile . as_posix () )
835834
836835 # allow runtime simulation flags from user input
837836 if simflags is not None :
@@ -867,7 +866,16 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
867866
868867 om_cmd .arg_set (key = "csvInput" , val = self .csvFile .as_posix ())
869868
870- self .simulationFlag = om_cmd .run ()
869+ # delete resultfile ...
870+ if self .resultfile .is_file ():
871+ self .resultfile .unlink ()
872+ # ... run simulation ...
873+ returncode = om_cmd .run ()
874+ # and check returncode *AND* resultfile
875+ if returncode != 0 and self .resultfile .is_file ():
876+ logger .warning (f"Return code = { returncode } but result file exists!" )
877+
878+ self .simulationFlag = True
871879
872880 # to extract simulation results
873881 def getSolutions (self , varList = None , resultfile = None ): # 12
@@ -883,7 +891,7 @@ def getSolutions(self, varList=None, resultfile=None): # 12
883891 >>> getSolutions(["Name1","Name2"],resultfile=""c:/a.mat"")
884892 """
885893 if resultfile is None :
886- resFile = self .resultfile
894+ resFile = self .resultfile . as_posix ()
887895 else :
888896 resFile = resultfile
889897
@@ -1239,7 +1247,11 @@ def linearize(self, lintime: Optional[float] = None, simflags: Optional[str] = N
12391247 if simargs :
12401248 om_cmd .args_set (args = simargs )
12411249
1242- self .simulationFlag = om_cmd .run ()
1250+ returncode = om_cmd .run ()
1251+ if returncode != 0 :
1252+ raise ModelicaSystemError (f"Linearize failed with return code: { returncode } " )
1253+
1254+ self .simulationFlag = True
12431255
12441256 # code to get the matrix and linear inputs, outputs and states
12451257 linearFile = self .tempdir / "linearized_model.py"
0 commit comments