Skip to content

Commit dd9f162

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 8d4a7cb commit dd9f162

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
@@ -1025,6 +1025,33 @@ def getOptimizationOptions(
10251025

10261026
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
10271027

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

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

10941105
if self._inputs: # if model has input quantities
10951106
for key, val in self._inputs.items():
@@ -1769,25 +1780,12 @@ def linearize(
17691780
modelname=self._model_name,
17701781
)
17711782

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

17921790
if self._inputs:
17931791
for key, data in self._inputs.items():

0 commit comments

Comments
 (0)