Skip to content

Commit f6ba447

Browse files
committed
[ModelicaSystemCmd] do *NOT* raise error if returncode != 0
could be a simulation which stoped before the final time ...
1 parent b6855c5 commit f6ba447

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

OMPython/ModelicaSystem.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = 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

Comments
 (0)