Skip to content

Commit ba9e882

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

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

OMPython/ModelicaSystem.py

Lines changed: 23 additions & 11 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}: 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

Comments
 (0)