Skip to content

Commit ae69964

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 08a8500 commit ae69964

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
@@ -410,7 +410,6 @@ def __init__(
410410
self.inputFlag = False # for model with input quantity
411411
self.simulationFlag = False # if the model is simulated?
412412
self.outputFlag = False
413-
self.csvFile: Optional[pathlib.Path] = None # for storing inputs condition
414413
self.resultfile: Optional[pathlib.Path] = None # for storing result file
415414
self.variableFilter = variableFilter
416415

@@ -901,6 +900,9 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
901900
om_cmd.arg_set(key="overrideFile", val=overrideFile.as_posix())
902901

903902
if self.inputFlag: # if model has input quantities
903+
# csvfile is based on name used for result file
904+
csvfile = resultfile.parent / f"{resultfile.stem}.csv"
905+
904906
for i in self.inputlist:
905907
val = self.inputlist[i]
906908
if val is None:
@@ -912,9 +914,11 @@ def simulate(self, resultfile: Optional[str] = None, simflags: Optional[str] = N
912914
raise ModelicaSystemError(f"startTime not matched for Input {i}!")
913915
if float(self.simulateOptions["stopTime"]) != val[-1][0]:
914916
raise ModelicaSystemError(f"stopTime not matched for Input {i}!")
915-
self.csvFile = self.createCSVData() # create csv file
916917

917-
om_cmd.arg_set(key="csvInput", val=self.csvFile.as_posix())
918+
# write csv file and store the name
919+
csvfile = self.createCSVData(csvfile=csvfile)
920+
921+
om_cmd.arg_set(key="csvInput", val=csvfile.as_posix())
918922

919923
# delete resultfile ...
920924
if self.resultfile.is_file():
@@ -1135,7 +1139,11 @@ def checkValidInputs(self, name):
11351139
else:
11361140
raise ModelicaSystemError('Error!!! Value must be in tuple format')
11371141

1138-
def createCSVData(self) -> pathlib.Path:
1142+
def createCSVData(self, csvfile: Optional[pathlib.Path] = None) -> pathlib.Path:
1143+
"""
1144+
Create a csv file with inputs for the simulation/optimization of the model. If csvfile is provided as argument,
1145+
this file is used; else a generic file name is created.
1146+
"""
11391147
start_time: float = float(self.simulateOptions["startTime"])
11401148
stop_time: float = float(self.simulateOptions["stopTime"])
11411149

@@ -1176,13 +1184,14 @@ def createCSVData(self) -> pathlib.Path:
11761184
]
11771185
csv_rows.append(row)
11781186

1179-
csvFile = self.tempdir / f'{self.modelName}.csv'
1187+
if csvfile is None:
1188+
csvfile = self.tempdir / f'{self.modelName}.csv'
11801189

1181-
with open(file=csvFile, mode="w", encoding="utf-8", newline="") as fh:
1190+
with open(file=csvfile, mode="w", encoding="utf-8", newline="") as fh:
11821191
writer = csv.writer(fh)
11831192
writer.writerows(csv_rows)
11841193

1185-
return csvFile
1194+
return csvfile
11861195

11871196
# to convert Modelica model to FMU
11881197
def convertMo2Fmu(self, version="2.0", fmuType="me_cs", fileNamePrefix="<default>", includeResources=True): # 19
@@ -1298,8 +1307,8 @@ def load_module_from_path(module_name, file_path):
12981307
for l in tupleList:
12991308
if l[0] < float(self.simulateOptions["startTime"]):
13001309
raise ModelicaSystemError('Input time value is less than simulation startTime')
1301-
self.csvFile = self.createCSVData()
1302-
om_cmd.arg_set(key="csvInput", val=self.csvFile.as_posix())
1310+
csvfile = self.createCSVData()
1311+
om_cmd.arg_set(key="csvInput", val=csvfile.as_posix())
13031312

13041313
om_cmd.arg_set(key="l", val=str(lintime or self.linearOptions["stopTime"]))
13051314

0 commit comments

Comments
 (0)