Skip to content

Commit 70da158

Browse files
committed
[ModelicaSystem] simplify processing of override data
Would it make sense to combine this code and the code in linearize() in one new function? def _process_override_data(self, om_cmd, sim_override, file_override) -> None: The code could: (1) check the version; set command line parameters as needed (2) create the content of the override file (3) create the overwrite file and set it as command line parameter The advantage would be, that the modified code is not in two places but only in one ...
1 parent 8d8fd87 commit 70da158

1 file changed

Lines changed: 39 additions & 41 deletions

File tree

OMPython/ModelicaSystem.py

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,33 @@ def getOptimizationOptions(
10231023

10241024
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
10251025

1026+
def _process_override_data(
1027+
self,
1028+
om_cmd: ModelicaSystemCmd,
1029+
override_file: OMCPath,
1030+
override_var: dict[str, str],
1031+
override_sim: dict[str, str],
1032+
) -> None:
1033+
if not override_var and not override_sim:
1034+
return
1035+
1036+
override_content = ""
1037+
if override_var:
1038+
override_content += "\n".join([f"{key}={value}" for key, value in override_var.items()]) + "\n"
1039+
1040+
# simulation options are not read from override file from version >= 1.26.0,
1041+
# pass them to simulation executable directly as individual arguments
1042+
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1043+
if override_sim:
1044+
if self._version >= Version("1.26.0"):
1045+
for key, opt_value in override_sim.items():
1046+
om_cmd.arg_set(key=key, val=str(opt_value))
1047+
else:
1048+
override_content += "\n".join([f"{key}={value}" for key, value in override_sim.items()]) + "\n"
1049+
1050+
override_file.write_text(override_content)
1051+
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
1052+
10261053
def simulate_cmd(
10271054
self,
10281055
result_file: OMCPath,
@@ -1066,28 +1093,12 @@ def simulate_cmd(
10661093
if simargs:
10671094
om_cmd.args_set(args=simargs)
10681095

1069-
if self._override_variables or self._simulate_options_override:
1070-
override_file = result_file.parent / f"{result_file.stem}_override.txt"
1071-
1072-
# simulation options are not read from override file from version >= 1.26.0,
1073-
# pass them to simulation executable directly as individual arguments
1074-
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1075-
if self._version >= Version("1.26.0"):
1076-
for key, opt_value in self._simulate_options_override.items():
1077-
om_cmd.arg_set(key=key, val=str(opt_value))
1078-
override_content = (
1079-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1080-
+ "\n"
1081-
)
1082-
else:
1083-
override_content = (
1084-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1085-
+ "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()])
1086-
+ "\n"
1087-
)
1088-
1089-
override_file.write_text(override_content)
1090-
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
1096+
self._process_override_data(
1097+
om_cmd=om_cmd,
1098+
override_file=result_file.parent / f"{result_file.stem}_override.txt",
1099+
override_var=self._override_variables,
1100+
override_sim=self._simulate_options_override,
1101+
)
10911102

10921103
if self._inputs: # if model has input quantities
10931104
for key, val in self._inputs.items():
@@ -1767,25 +1778,12 @@ def linearize(
17671778
modelname=self._model_name,
17681779
)
17691780

1770-
# See comment in simulate_cmd regarding override file and OM version
1771-
if self._version >= Version("1.26.0"):
1772-
for key, opt_value in self._linearization_options.items():
1773-
om_cmd.arg_set(key=key, val=str(opt_value))
1774-
override_content = (
1775-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1776-
+ "\n"
1777-
)
1778-
else:
1779-
override_content = (
1780-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1781-
+ "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()])
1782-
+ "\n"
1783-
)
1784-
1785-
override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt'
1786-
override_file.write_text(override_content)
1787-
1788-
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
1781+
self._process_override_data(
1782+
om_cmd=om_cmd,
1783+
override_file=self.getWorkDirectory() / f'{self._model_name}_override_linear.txt',
1784+
override_var=self._override_variables,
1785+
override_sim=self._linearization_options,
1786+
)
17891787

17901788
if self._inputs:
17911789
for key, data in self._inputs.items():

0 commit comments

Comments
 (0)