Skip to content

Commit b2f82cc

Browse files
committed
[backport] Do not add simulation options to overrideFile (OpenModelica#400) - 3.6.1
1 parent c6a204e commit b2f82cc

1 file changed

Lines changed: 54 additions & 23 deletions

File tree

OMPython/__init__.py

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class which means it will use OMCSessionZMQ by default. If you want to use
4141
import logging
4242
import json
4343
import os
44+
import pathlib
4445
import platform
4546
import psutil
4647
import re
@@ -831,6 +832,8 @@ def __init__(self, fileName=None, modelName=None, lmodel=[], useCorba=False, com
831832
self._omc_log_file = self.getconn._omc_log_file
832833
self._omc_process = self.getconn._omc_process
833834

835+
# get OpenModelica version
836+
self._version = self.sendExpression("getVersion()", parsed=True)
834837
## set commandLineOptions if provided by users
835838
if commandLineOptions is not None:
836839
exp="".join(["setCommandLineOptions(","\"",commandLineOptions,"\"",")"])
@@ -1216,6 +1219,14 @@ def getOptimizationOptions(self, names=None): # 10
12161219
elif(isinstance(names, list)):
12171220
return ([self.optimizeOptions.get(x,"NotExist") for x in names])
12181221

1222+
def parse_om_version(self, version: str) -> tuple[int, int, int]:
1223+
match = re.search(r"v?(\d+)\.(\d+)\.(\d+)", version)
1224+
if not match:
1225+
raise ValueError(f"Version not found in: {version}")
1226+
major, minor, patch = map(int, match.groups())
1227+
1228+
return major, minor, patch
1229+
12191230
# to simulate or re-simulate model
12201231
def simulate(self, resultfile=None, simflags=None, verbose=True): # 11
12211232
"""
@@ -1243,18 +1254,29 @@ def simulate(self, resultfile=None, simflags=None, verbose=True): # 11
12431254
simflags=" " + simflags
12441255

12451256
overrideFile = os.path.join(self.tempdir, '{}.{}'.format(self.modelName + "_override", "txt")).replace("\\", "/")
1257+
override_file = pathlib.Path(overrideFile)
1258+
override = ""
12461259
if (self.overridevariables or self.simoptionsoverride):
1247-
tmpdict=self.overridevariables.copy()
1248-
tmpdict.update(self.simoptionsoverride)
1249-
# write to override file
1250-
file = open(overrideFile, "w")
1251-
for (key, value) in tmpdict.items():
1252-
name = key + "=" + value + "\n"
1253-
file.write(name)
1254-
file.close()
1255-
override =" -overrideFile=" + overrideFile
1256-
else:
1257-
override =""
1260+
# simulation options are not read from override file from version >= 1.26.0,
1261+
# pass them to simulation executable directly as individual arguments
1262+
# see https://github.com/OpenModelica/OpenModelica/pull/14813
1263+
major, minor, patch = self.parse_om_version(self._version)
1264+
if (major, minor, patch) >= (1, 26, 0):
1265+
for key, opt_value in self.simoptionsoverride.items():
1266+
override += f" -{key}={str(opt_value)}"
1267+
override_content = (
1268+
"\n".join([f"{key}={value}" for key, value in self.overridevariables.items()])
1269+
+ "\n"
1270+
)
1271+
else:
1272+
override_content = (
1273+
"\n".join([f"{key}={value}" for key, value in self.overridevariables.items()])
1274+
+ "\n".join([f"{key}={value}" for key, value in self.simoptionsoverride.items()])
1275+
+ "\n"
1276+
)
1277+
1278+
override_file.write_text(override_content)
1279+
override += " -overrideFile=" + overrideFile
12581280

12591281
if (self.inputFlag): # if model has input quantities
12601282
for i in self.inputlist:
@@ -1700,18 +1722,27 @@ def linearize(self, lintime = None, simflags= None): # 22
17001722
return print("Linearization cannot be performed as the model is not build, use ModelicaSystem() to build the model first")
17011723

17021724
overrideLinearFile = os.path.join(self.tempdir, '{}.{}'.format(self.modelName + "_override_linear", "txt")).replace("\\", "/")
1703-
1704-
file = open(overrideLinearFile, "w")
1705-
for (key, value) in self.overridevariables.items():
1706-
name = key + "=" + value + "\n"
1707-
file.write(name)
1708-
for (key, value) in self.linearOptions.items():
1709-
name = key + "=" + str(value) + "\n"
1710-
file.write(name)
1711-
file.close()
1712-
1713-
override =" -overrideFile=" + overrideLinearFile
1714-
# print(override)
1725+
override_file = pathlib.Path(overrideLinearFile)
1726+
override = ""
1727+
1728+
# See comment in simulate_cmd regarding override file and OM version
1729+
major, minor, patch = self.parse_om_version(self._version)
1730+
if (major, minor, patch) >= (1, 26, 0):
1731+
for key, opt_value in self.linearOptions.items():
1732+
override += f" -{key}={str(opt_value)}"
1733+
override_content = (
1734+
"\n".join([f"{key}={value}" for key, value in self.overridevariables.items()])
1735+
+ "\n"
1736+
)
1737+
else:
1738+
override_content = (
1739+
"\n".join([f"{key}={value}" for key, value in self.overridevariables.items()])
1740+
+ "\n".join([f"{key}={value}" for key, value in self.linearOptions.items()])
1741+
+ "\n"
1742+
)
1743+
1744+
override_file.write_text(override_content)
1745+
override += " -overrideFile=" + overrideLinearFile
17151746

17161747
if self.inputFlag:
17171748
nameVal = self.getInputs()

0 commit comments

Comments
 (0)