|
19 | 19 |
|
20 | 20 | import numpy as np |
21 | 21 |
|
| 22 | +import re |
| 23 | + |
22 | 24 | from OMPython.OMCSession import ( |
23 | 25 | OMCSessionException, |
24 | 26 | OMCSessionRunData, |
@@ -348,6 +350,8 @@ def __init__( |
348 | 350 | else: |
349 | 351 | self._session = OMCSessionLocal(omhome=omhome) |
350 | 352 |
|
| 353 | + # get OpenModelica version |
| 354 | + self._version = self._session.sendExpression("getVersion()", parsed=True) |
351 | 355 | # set commandLineOptions using default values or the user defined list |
352 | 356 | if command_line_options is None: |
353 | 357 | # set default command line options to improve the performance of linearization and to avoid recompilation if |
@@ -1019,6 +1023,13 @@ def getOptimizationOptions( |
1019 | 1023 |
|
1020 | 1024 | raise ModelicaSystemError("Unhandled input for getOptimizationOptions()") |
1021 | 1025 |
|
| 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 | + |
1022 | 1033 | def simulate_cmd( |
1023 | 1034 | self, |
1024 | 1035 | result_file: OMCPath, |
@@ -1065,11 +1076,23 @@ def simulate_cmd( |
1065 | 1076 | if self._override_variables or self._simulate_options_override: |
1066 | 1077 | override_file = result_file.parent / f"{result_file.stem}_override.txt" |
1067 | 1078 |
|
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 = ( |
1069 | 1092 | "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) |
1070 | 1093 | + "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()]) |
1071 | 1094 | + "\n" |
1072 | | - ) |
| 1095 | + ) |
1073 | 1096 |
|
1074 | 1097 | override_file.write_text(override_content) |
1075 | 1098 | om_cmd.arg_set(key="overrideFile", val=override_file.as_posix()) |
@@ -1752,11 +1775,22 @@ def linearize( |
1752 | 1775 | modelname=self._model_name, |
1753 | 1776 | ) |
1754 | 1777 |
|
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 = ( |
1756 | 1789 | "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) |
1757 | 1790 | + "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()]) |
1758 | 1791 | + "\n" |
1759 | | - ) |
| 1792 | + ) |
| 1793 | + |
1760 | 1794 | override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt' |
1761 | 1795 | override_file.write_text(override_content) |
1762 | 1796 |
|
|
0 commit comments