Skip to content

Commit 76b73e5

Browse files
authored
Do not add simulation options to overrideFile (#400)
Pass them as arguments to simulation executable
1 parent 96e0b9d commit 76b73e5

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

OMPython/ModelicaSystem.py

Lines changed: 38 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,
@@ -348,6 +350,8 @@ def __init__(
348350
else:
349351
self._session = OMCSessionLocal(omhome=omhome)
350352

353+
# get OpenModelica version
354+
self._version = self._session.sendExpression("getVersion()", parsed=True)
351355
# set commandLineOptions using default values or the user defined list
352356
if command_line_options is None:
353357
# set default command line options to improve the performance of linearization and to avoid recompilation if
@@ -1019,6 +1023,13 @@ def getOptimizationOptions(
10191023

10201024
raise ModelicaSystemError("Unhandled input for getOptimizationOptions()")
10211025

1026+
def parse_om_version(self, version: str) -> tuple[int, int, int]:
1027+
match = re.search(r"v?(\d+)\.(\d+)\.(\d+)", version)
1028+
if not match:
1029+
raise ValueError(f"Version not found in: {version}")
1030+
major, minor, patch = map(int, match.groups())
1031+
return major, minor, patch
1032+
10221033
def simulate_cmd(
10231034
self,
10241035
result_file: OMCPath,
@@ -1065,11 +1076,23 @@ def simulate_cmd(
10651076
if self._override_variables or self._simulate_options_override:
10661077
override_file = result_file.parent / f"{result_file.stem}_override.txt"
10671078

1068-
override_content = (
1079+
# simulation options are not read from override file from version >= 1.26.0,
1080+
# pass them to simulation executable directly as individual arguments
1081+
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1082+
major, minor, patch = self.parse_om_version(self._version)
1083+
if (major, minor, patch) >= (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 = (
10691092
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
10701093
+ "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()])
10711094
+ "\n"
1072-
)
1095+
)
10731096

10741097
override_file.write_text(override_content)
10751098
om_cmd.arg_set(key="overrideFile", val=override_file.as_posix())
@@ -1752,11 +1775,22 @@ def linearize(
17521775
modelname=self._model_name,
17531776
)
17541777

1755-
override_content = (
1778+
# See comment in simulate_cmd regarding override file and OM version
1779+
major, minor, patch = self.parse_om_version(self._version)
1780+
if (major, minor, patch) >= (1, 26, 0):
1781+
for key, opt_value in self._linearization_options.items():
1782+
om_cmd.arg_set(key=key, val=str(opt_value))
1783+
override_content = (
1784+
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
1785+
+ "\n"
1786+
)
1787+
else:
1788+
override_content = (
17561789
"\n".join([f"{key}={value}" for key, value in self._override_variables.items()])
17571790
+ "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()])
17581791
+ "\n"
1759-
)
1792+
)
1793+
17601794
override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt'
17611795
override_file.write_text(override_content)
17621796

0 commit comments

Comments
 (0)