Skip to content

Commit bf21a7a

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

1 file changed

Lines changed: 23 additions & 11 deletions

File tree

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
@@ -819,13 +818,13 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
819818

820819
if resultfile is None:
821820
# default result file generated by OM
822-
self.resultfile = (self.tempdir / f"{self.modelName}_res.mat").as_posix()
821+
self.resultfile = self.tempdir / f"{self.modelName}_res.mat"
823822
elif os.path.exists(resultfile):
824-
self.resultfile = resultfile
823+
self.resultfile = pathlib.Path(resultfile)
825824
else:
826-
self.resultfile = (self.tempdir / resultfile).as_posix()
825+
self.resultfile = self.tempdir / resultfile
827826
# always define the resultfile to use
828-
om_cmd.arg_set(key="r", val=self.resultfile)
827+
om_cmd.arg_set(key="r", val=self.resultfile.as_posix())
829828

830829
# allow runtime simulation flags from user input
831830
if simflags is not None:
@@ -861,7 +860,16 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
861860

862861
om_cmd.arg_set(key="csvInput", val=self.csvFile.as_posix())
863862

864-
self.simulationFlag = om_cmd.run()
863+
# delete resultfile ...
864+
if self.resultfile.is_file():
865+
self.resultfile.unlink()
866+
# ... run simulation ...
867+
returncode = om_cmd.run()
868+
# and check returncode *AND* resultfile
869+
if returncode != 0 and self.resultfile.is_file():
870+
logger.warning(f"Return code = {returncode} but result file exists!")
871+
872+
self.simulationFlag = True
865873

866874
# to extract simulation results
867875
def getSolutions(self, varList=None, resultfile=None): # 12
@@ -877,7 +885,7 @@ def getSolutions(self, varList=None, resultfile=None): # 12
877885
>>> getSolutions(["Name1","Name2"],resultfile=""c:/a.mat"")
878886
"""
879887
if resultfile is None:
880-
resFile = self.resultfile
888+
resFile = self.resultfile.as_posix()
881889
else:
882890
resFile = resultfile
883891

@@ -1233,7 +1241,11 @@ def linearize(self, lintime: Optional[float] = None, simflags: Optional[str] = N
12331241
if simargs:
12341242
om_cmd.args_set(args=simargs)
12351243

1236-
self.simulationFlag = om_cmd.run()
1244+
returncode = om_cmd.run()
1245+
if returncode != 0:
1246+
raise ModelicaSystemError(f"Linearize failed with return code: {returncode}")
1247+
1248+
self.simulationFlag = True
12371249

12381250
# code to get the matrix and linear inputs, outputs and states
12391251
linearFile = self.tempdir / "linearized_model.py"

0 commit comments

Comments
 (0)