Skip to content

Commit 79d80ca

Browse files
authored
Apply custom options alongside defaults options (#486)
Added a flag to avoid adding default options
1 parent dd95de5 commit 79d80ca

3 files changed

Lines changed: 38 additions & 9 deletions

File tree

‎OMPython/modelica_system_omc.py‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ def __init__(
3939
work_directory: Optional[str | os.PathLike] = None,
4040
omhome: Optional[str] = None,
4141
session: Optional[OMSessionABC] = None,
42+
use_default_command_line_options: bool = True,
4243
) -> None:
4344
"""Create a ModelicaSystem instance. To define the model use model() or convertFmu2Mo().
4445
4546
Args:
4647
command_line_options: List with extra command line options as elements. The list elements are
47-
provided to omc via setCommandLineOptions(). If set, the default values will be overridden.
48-
To disable any command line options, use an empty list.
48+
provided to omc via setCommandLineOptions() in addition to OMPython's default options.
49+
use_default_command_line_options: Whether to set OMPython's default options for linearization.
50+
Set to False to use only command_line_options, or no options if it is unspecified or empty.
4951
work_directory: Path to a directory to be used for temporary
5052
files like the model executable. If left unspecified, a tmp
5153
directory will be created.
@@ -62,15 +64,17 @@ def __init__(
6264
work_directory=work_directory,
6365
)
6466

65-
# set commandLineOptions using default values or the user defined list
66-
if command_line_options is None:
67+
options: list[str] = []
68+
if use_default_command_line_options:
6769
# set default command line options to improve the performance of linearization and to avoid recompilation if
6870
# the simulation executable is reused in linearize() via the runtime flag '-l'
69-
command_line_options = [
71+
options.extend([
7072
"--linearizationDumpLanguage=python",
7173
"--generateSymbolicLinearization",
72-
]
73-
for opt in command_line_options:
74+
])
75+
if command_line_options is not None:
76+
options.extend(command_line_options)
77+
for opt in options:
7478
self.set_command_line_options(command_line_option=opt)
7579

7680
def model(

‎tests/test_FMIImport.py‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ def test_FMIImport(model_firstorder):
3434
assert os.path.exists(fmu)
3535

3636
# import FMU & check & simulate
37-
# TODO: why is '--allowNonStandardModelica=reinitInAlgorithms' needed? any example without this possible?
38-
mod2 = OMPython.ModelicaSystemOMC(command_line_options=['--allowNonStandardModelica=reinitInAlgorithms'])
37+
# --allowNonStandardModelica=reinitInAlgorithms' is needed.
38+
# Since the generated code uses reinit inside algorithm section which is not standard Modelica.
39+
mod2 = OMPython.ModelicaSystemOMC(command_line_options=['--allowNonStandardModelica=reinitInAlgorithms'],
40+
use_default_command_line_options=False)
3941
mo = mod2.convertFmu2Mo(fmu=fmu)
4042
assert os.path.exists(mo)
4143

‎tests/test_ModelicaSystemOMC.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,29 @@ def model_firstorder(tmp_path, model_firstorder_content):
3838
return mod
3939

4040

41+
@pytest.mark.parametrize(
42+
("use_defaults", "custom_options", "expected_options"),
43+
[
44+
(True, ["--showAnnotations"], [
45+
"--linearizationDumpLanguage=python",
46+
"--generateSymbolicLinearization=true",
47+
"--showAnnotations=true",
48+
]),
49+
(False, ["--showAnnotations"], ["--showAnnotations=true"]),
50+
],
51+
)
52+
def test_command_line_options(use_defaults, custom_options, expected_options):
53+
session = OMPython.OMCSessionLocal()
54+
mod = OMPython.ModelicaSystemOMC(
55+
session=session,
56+
command_line_options=custom_options,
57+
use_default_command_line_options=use_defaults,
58+
)
59+
60+
current_options = mod.sendExpression("getCommandLineOptions()")
61+
assert all(option in current_options for option in expected_options)
62+
63+
4164
def test_ModelicaSystem_loop(model_firstorder):
4265
def worker():
4366
mod = OMPython.ModelicaSystemOMC()

0 commit comments

Comments
 (0)