@@ -251,19 +251,18 @@ def run(self) -> int:
251
251
timeout = self ._timeout )
252
252
stdout = cmdres .stdout .strip ()
253
253
stderr = cmdres .stderr .strip ()
254
+ returncode = cmdres .returncode
254
255
255
256
logger .debug ("OM output for command %s:\n %s" , cmdl , stdout )
256
257
257
- if cmdres .returncode != 0 :
258
- raise ModelicaSystemError (f"Error running command { cmdl } : nonzero return code" )
259
258
if stderr :
260
259
raise ModelicaSystemError (f"Error running command { cmdl } : { stderr } " )
261
260
except subprocess .TimeoutExpired :
262
261
raise ModelicaSystemError (f"Timeout running command { repr (cmdl )} " )
263
262
except Exception as ex :
264
263
raise ModelicaSystemError (f"Error running command { cmdl } " ) from ex
265
264
266
- return True
265
+ return returncode
267
266
268
267
@staticmethod
269
268
def parse_simflags (simflags : str ) -> dict :
@@ -396,7 +395,7 @@ def __init__(
396
395
self .simulationFlag = False # if the model is simulated?
397
396
self .outputFlag = False
398
397
self .csvFile = '' # for storing inputs condition
399
- self .resultfile = "" # for storing result file
398
+ self .resultfile = None # for storing result file
400
399
self .variableFilter = variableFilter
401
400
402
401
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
820
819
821
820
if resultfile is None :
822
821
# 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"
824
823
elif os .path .exists (resultfile ):
825
- self .resultfile = resultfile
824
+ self .resultfile = Path ( resultfile )
826
825
else :
827
- self .resultfile = ( self .tempdir / resultfile ). as_posix ()
826
+ self .resultfile = self .tempdir / resultfile
828
827
# 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 () )
830
829
831
830
# allow runtime simulation flags from user input
832
831
if simflags is not None :
@@ -862,7 +861,16 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
862
861
863
862
om_cmd .arg_set (key = "csvInput" , val = self .csvFile .as_posix ())
864
863
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
866
874
867
875
# to extract simulation results
868
876
def getSolutions (self , varList = None , resultfile = None ): # 12
@@ -878,7 +886,7 @@ def getSolutions(self, varList=None, resultfile=None): # 12
878
886
>>> getSolutions(["Name1","Name2"],resultfile=""c:/a.mat"")
879
887
"""
880
888
if resultfile is None :
881
- resFile = self .resultfile
889
+ resFile = self .resultfile . as_posix ()
882
890
else :
883
891
resFile = resultfile
884
892
0 commit comments