Skip to content

Commit 1f3ec87

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 237e5cb commit 1f3ec87

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
@@ -1031,6 +1031,33 @@ def _parse_om_version(self, version: str) -> tuple[int, int, int]:
10311031

10321032
return major, minor, patch
10331033

1034+
def _process_override_data(
1035+
self,
1036+
om_cmd: ModelicaSystemCmd,
1037+
override_file: OMCPath,
1038+
override_var: dict[str, str],
1039+
override_sim: dict[str, str],
1040+
) -> None:
1041+
if not override_var and not override_sim:
1042+
return
1043+
1044+
override_content = ""
1045+
if override_var:
1046+
override_content += "\n".join([f"{key}={value}" for key, value in override_var.items()]) + "\n"
1047+
1048+
# simulation options are not read from override file from version >= 1.26.0,
1049+
# pass them to simulation executable directly as individual arguments
1050+
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1051+
if override_sim:
1052+
if self._version >= (1, 26, 0):
1053+
for key, opt_value in override_sim.items():
1054+
om_cmd.arg_set(key=key, val=str(opt_value))
1055+
else:
1056+
override_content += "\n".join([f"{key}={value}" for key, value in override_sim.items()]) + "\n"
1057+
1058+
override_file.write_text(override_content)
1059+
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
1060+
10341061
def simulate_cmd(
10351062
self,
10361063
result_file: OMCPath,
@@ -1074,28 +1101,12 @@ def simulate_cmd(
10741101
if simargs:
10751102
om_cmd.args_set(args=simargs)
10761103

1077-
if self._override_variables or self._simulate_options_override:
1078-
override_file = result_file.parent / f"{result_file.stem}_override.txt"
1079-
1080-
# simulation options are not read from override file from version >= 1.26.0,
1081-
# pass them to simulation executable directly as individual arguments
1082-
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1083-
if self._version >= Version("1.26.0"):
1084-
for key, opt_value in self._simulate_options_override.items():
1085-
om_cmd.arg_set(key=key, val=str(opt_value))
1086-
override_content = (
1087-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1088-
+ "\n"
1089-
)
1090-
else:
1091-
override_content = (
1092-
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1093-
+ "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()])
1094-
+ "\n"
1095-
)
1096-
1097-
override_file.write_text(override_content)
1098-
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
1104+
self._process_override_data(
1105+
om_cmd=om_cmd,
1106+
override_file=result_file.parent / f"{result_file.stem}_override.txt",
1107+
override_var=self._override_variables,
1108+
override_sim=self._simulate_options_override,
1109+
)
10991110

11001111
if self._inputs: # if model has input quantities
11011112
for key, val in self._inputs.items():
@@ -1775,25 +1786,12 @@ def linearize(
17751786
modelname=self._model_name,
17761787
)
17771788

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

17981796
if self._inputs:
17991797
for key, data in self._inputs.items():

0 commit comments

Comments
 (0)