Skip to content

Commit a36fff5

Browse files
committed
Do not add simulation options to overrideFile
Pass them as arguments to simulation executable
1 parent 96e0b9d commit a36fff5

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

OMPython/ModelicaSystem.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import numpy as np
2121

22+
import re
23+
2224
from OMPython.OMCSession import (
2325
OMCSessionException,
2426
OMCSessionRunData,
@@ -1019,6 +1021,13 @@ def getOptimizationOptions(
10191021

10201022
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
10211023

1024+
def parse_om_version(self, version: str) -> tuple[int, int, int]:
1025+
match = re.search(r"v?(\d+)\.(\d+)\.(\d+)", version)
1026+
if not match:
1027+
raise ValueError(f"Version not found in: {version}")
1028+
major, minor, patch = map(int, match.groups())
1029+
return major, minor, patch
1030+
10221031
def simulate_cmd(
10231032
self,
10241033
result_file: OMCPath,
@@ -1065,11 +1074,24 @@ def simulate_cmd(
10651074
if self._override_variables or self._simulate_options_override:
10661075
override_file = result_file.parent / f"{result_file.stem}_override.txt"
10671076

1068-
override_content = (
1077+
# simulation options are not read from override file from version > 1.25.0,
1078+
# pass them to simulation executable directly as individual arguments
1079+
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1080+
version = self._session.sendExpression("getVersion()", parsed=True)
1081+
major, minor, patch = self.parse_om_version(version)
1082+
if (major, minor, patch) > (1, 25, 0):
1083+
for key, opt_value in self._simulate_options_override.items():
1084+
om_cmd.arg_set(key=key, val=str(opt_value))
1085+
override_content = (
1086+
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1087+
+ "\n"
1088+
)
1089+
else:
1090+
override_content = (
10691091
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
10701092
+ "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()])
10711093
+ "\n"
1072-
)
1094+
)
10731095

10741096
override_file.write_text(override_content)
10751097
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
@@ -1752,11 +1774,22 @@ def linearize(
17521774
modelname=self._model_name,
17531775
)
17541776

1755-
override_content = (
1777+
version = self._session.sendExpression("getVersion()", parsed=True)
1778+
major, minor, patch = self.parse_om_version(version)
1779+
if (major, minor, patch) > (1, 25, 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 = (
17561788
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
17571789
+ "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()])
17581790
+ "\n"
1759-
)
1791+
)
1792+
17601793
override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt'
17611794
override_file.write_text(override_content)
17621795

0 commit comments

Comments
 (0)