From a36fff553adcb85faaae5257bfe65d6b10d31c0c Mon Sep 17 00:00:00 2001 From: Adeel Asghar Date: Thu, 18 Dec 2025 10:26:18 +0100 Subject: [PATCH] Do not add simulation options to overrideFile Pass them as arguments to simulation executable --- OMPython/ModelicaSystem.py | 41 ++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/OMPython/ModelicaSystem.py b/OMPython/ModelicaSystem.py index 59efe177..b6de6bed 100644 --- a/OMPython/ModelicaSystem.py +++ b/OMPython/ModelicaSystem.py @@ -19,6 +19,8 @@ import numpy as np +import re + from OMPython.OMCSession import ( OMCSessionException, OMCSessionRunData, @@ -1019,6 +1021,13 @@ def getOptimizationOptions( raise ModelicaSystemError("Unhandled input for getOptimizationOptions()") + def parse_om_version(self, version: str) -> tuple[int, int, int]: + match = re.search(r"v?(\d+)\.(\d+)\.(\d+)", version) + if not match: + raise ValueError(f"Version not found in: {version}") + major, minor, patch = map(int, match.groups()) + return major, minor, patch + def simulate_cmd( self, result_file: OMCPath, @@ -1065,11 +1074,24 @@ def simulate_cmd( if self._override_variables or self._simulate_options_override: override_file = result_file.parent / f"{result_file.stem}_override.txt" - override_content = ( + # simulation options are not read from override file from version > 1.25.0, + # pass them to simulation executable directly as individual arguments + # see https://github.com/OpenModelica/OpenModelica/pull/14813 + version = self._session.sendExpression("getVersion()", parsed=True) + major, minor, patch = self.parse_om_version(version) + if (major, minor, patch) > (1, 25, 0): + for key, opt_value in self._simulate_options_override.items(): + om_cmd.arg_set(key=key, val=str(opt_value)) + override_content = ( + "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) + + "\n" + ) + else: + override_content = ( "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) + "\n".join([f"{key}={value}" for key, value in self._simulate_options_override.items()]) + "\n" - ) + ) override_file.write_text(override_content) om_cmd.arg_set(key="overrideFile", val=override_file.as_posix()) @@ -1752,11 +1774,22 @@ def linearize( modelname=self._model_name, ) - override_content = ( + version = self._session.sendExpression("getVersion()", parsed=True) + major, minor, patch = self.parse_om_version(version) + if (major, minor, patch) > (1, 25, 0): + for key, opt_value in self._linearization_options.items(): + om_cmd.arg_set(key=key, val=str(opt_value)) + override_content = ( + "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) + + "\n" + ) + else: + override_content = ( "\n".join([f"{key}={value}" for key, value in self._override_variables.items()]) + "\n".join([f"{key}={value}" for key, value in self._linearization_options.items()]) + "\n" - ) + ) + override_file = self.getWorkDirectory() / f'{self._model_name}_override_linear.txt' override_file.write_text(override_content)