Skip to content

Commit 206ba19

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 131b8e4 commit 206ba19

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

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

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

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

10931104
if self._inputs: # if model has input quantities
10941105
for key, val in self._inputs.items():
@@ -1768,25 +1779,12 @@ def linearize(
17681779
modelname=self._model_name,
17691780
)
17701781

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

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

0 commit comments

Comments
 (0)