|
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, |
@@ -1019,6 +1021,13 @@ def getOptimizationOptions( |
1019 | 1021 |
|
1020 | 1022 | raise ModelicaSystemError("Unhandled input for getOptimizationOptions()") |
1021 | 1023 |
|
| 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 | + |
1022 | 1031 | def simulate_cmd( |
1023 | 1032 | self, |
1024 | 1033 | result_file: OMCPath, |
@@ -1065,11 +1074,24 @@ def simulate_cmd( |
1065 | 1074 | if self._override_variables or self._simulate_options_override: |
1066 | 1075 | override_file = result_file.parent / f"{result_file.stem}_override.txt" |
1067 | 1076 |
|
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 = ( |
1069 | 1091 | "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) |
1070 | 1092 | + "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()]) |
1071 | 1093 | + "\n" |
1072 | | - ) |
| 1094 | + ) |
1073 | 1095 |
|
1074 | 1096 | override_file.write_text(override_content) |
1075 | 1097 | om_cmd.arg_set(key="overrideFile", val=override_file.as_posix()) |
@@ -1752,11 +1774,22 @@ def linearize( |
1752 | 1774 | modelname=self._model_name, |
1753 | 1775 | ) |
1754 | 1776 |
|
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 = ( |
1756 | 1788 | "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) |
1757 | 1789 | + "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()]) |
1758 | 1790 | + "\n" |
1759 | | - ) |
| 1791 | + ) |
| 1792 | + |
1760 | 1793 | override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt' |
1761 | 1794 | override_file.write_text(override_content) |
1762 | 1795 |
|
|
0 commit comments