Skip to content

Commit e01044c

Browse files
committed
[ModelicaSystem] remove class variable csvFile; define name based on resultfile in simulate()
reason: * variable not needed / used as class variable * using name based on resultfile allows to run the same model executable several times
1 parent d2cea9c commit e01044c

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

OMPython/ModelicaSystem.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,6 @@ def __init__(
389389
self._file_name = pathlib.Path(fileName).resolve() if fileName is not None else None # Model file/package name
390390
self._has_inputs = False # for model with input quantity
391391
self._simulated = False # True if the model has already been simulated
392-
self._csvFile: Optional[pathlib.Path] = None # for storing inputs condition
393392
self._result_file: Optional[pathlib.Path] = None # for storing result file
394393
self._variable_filter = variableFilter
395394

@@ -969,6 +968,9 @@ def simulate(self,
969968
om_cmd.arg_set(key="overrideFile", val=overrideFile.as_posix())
970969

971970
if self._has_inputs: # if model has input quantities
971+
# csvfile is based on name used for result file
972+
csvfile = self._result_file.parent / f"{self._result_file.stem}.csv"
973+
972974
for i in self._inputs:
973975
val = self._inputs[i]
974976
if val is None:
@@ -980,9 +982,11 @@ def simulate(self,
980982
raise ModelicaSystemError(f"startTime not matched for Input {i}!")
981983
if float(self._simulate_options["stopTime"]) != val[-1][0]:
982984
raise ModelicaSystemError(f"stopTime not matched for Input {i}!")
983-
self._csvFile = self._createCSVData() # create csv file
984985

985-
om_cmd.arg_set(key="csvInput", val=self._csvFile.as_posix())
986+
# write csv file and store the name
987+
csvfile = self._createCSVData(csvfile=csvfile)
988+
989+
om_cmd.arg_set(key="csvInput", val=csvfile.as_posix())
986990

987991
# delete resultfile ...
988992
if self._result_file.is_file():
@@ -1231,7 +1235,11 @@ def _checkValidInputs(self, name):
12311235
else:
12321236
raise ModelicaSystemError('Error!!! Value must be in tuple format')
12331237

1234-
def _createCSVData(self) -> pathlib.Path:
1238+
def _createCSVData(self, csvfile: Optional[pathlib.Path] = None) -> pathlib.Path:
1239+
"""
1240+
Create a csv file with inputs for the simulation/optimization of the model. If csvfile is provided as argument,
1241+
this file is used; else a generic file name is created.
1242+
"""
12351243
start_time: float = float(self._simulate_options["startTime"])
12361244
stop_time: float = float(self._simulate_options["stopTime"])
12371245

@@ -1272,13 +1280,14 @@ def _createCSVData(self) -> pathlib.Path:
12721280
]
12731281
csv_rows.append(row)
12741282

1275-
csvFile = self._tempdir / f'{self._model_name}.csv'
1283+
if csvfile is None:
1284+
csvFile = self._tempdir / f'{self._model_name}.csv'
12761285

1277-
with open(file=csvFile, mode="w", encoding="utf-8", newline="") as fh:
1286+
with open(file=csvfile, mode="w", encoding="utf-8", newline="") as fh:
12781287
writer = csv.writer(fh)
12791288
writer.writerows(csv_rows)
12801289

1281-
return csvFile
1290+
return csvfile
12821291

12831292
def convertMo2Fmu(self, version: str = "2.0", fmuType: str = "me_cs",
12841293
fileNamePrefix: str = "<default>",
@@ -1422,8 +1431,8 @@ def load_module_from_path(module_name, file_path):
14221431
for l in tupleList:
14231432
if l[0] < float(self._simulate_options["startTime"]):
14241433
raise ModelicaSystemError('Input time value is less than simulation startTime')
1425-
self._csvFile = self._createCSVData()
1426-
om_cmd.arg_set(key="csvInput", val=self._csvFile.as_posix())
1434+
csvfile = self._createCSVData()
1435+
om_cmd.arg_set(key="csvInput", val=csvfile.as_posix())
14271436

14281437
om_cmd.arg_set(key="l", val=str(lintime or self._linearization_options["stopTime"]))
14291438

0 commit comments

Comments
 (0)