Skip to content

Commit 4160545

Browse files
authored
Add required_intermediate_variables to instantiate_fmu() (#851)
fixes #840
1 parent 2eb207d commit 4160545

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

src/fmpy/fmi1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def struct_to_str(s):
281281
v = v.value
282282
a += hex(0 if v is None else v)
283283
elif t == c_bool:
284-
a += str(v.value)
284+
a += str(v.value) if hasattr(v, "value") else str(v)
285285
elif t == POINTER(c_uint):
286286
# value references
287287
if v is None:

src/fmpy/fmi3.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def fmi3InstantiateCoSimulation(
176176
self,
177177
instanceName: fmi3String | bytes,
178178
instantiationToken: fmi3String | bytes,
179-
resourcePath: fmi3String | bytes,
179+
resourcePath: fmi3String | bytes | None,
180180
visible: fmi3Boolean | bool,
181181
loggingOn: fmi3Boolean | bool,
182182
eventModeUsed: fmi3Boolean | bool,
@@ -1898,12 +1898,18 @@ def instantiate(
18981898
earlyReturnAllowed=False,
18991899
logMessage=None,
19001900
intermediateUpdate=None,
1901+
requiredIntermediateVariables=None,
19011902
):
19021903
# save callbacks from GC
19031904
self.logMessage = fmi3LogMessageCallback(
19041905
printLogMessage if logMessage is None else logMessage
19051906
)
19061907

1908+
if requiredIntermediateVariables is None:
1909+
requiredIntermediateVariables = (fmi3ValueReference * 0)()
1910+
else:
1911+
requiredIntermediateVariables = (fmi3ValueReference * len(requiredIntermediateVariables))(*requiredIntermediateVariables)
1912+
19071913
if intermediateUpdate is None:
19081914
self.intermediateUpdate = fmi3IntermediateUpdateCallback()
19091915
else:
@@ -1919,8 +1925,8 @@ def instantiate(
19191925
fmi3Boolean(loggingOn),
19201926
fmi3Boolean(eventModeUsed),
19211927
fmi3Boolean(earlyReturnAllowed),
1922-
None,
1923-
0,
1928+
requiredIntermediateVariables,
1929+
len(requiredIntermediateVariables),
19241930
fmi3InstanceEnvironment(),
19251931
self.logMessage,
19261932
self.intermediateUpdate,

src/fmpy/simulation.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,21 @@ def simulate_fmu(filename,
799799
return result
800800

801801

802-
def instantiate_fmu(unzipdir, model_description, fmi_type=None, visible=False, debug_logging=False, logger=None, fmi_call_logger=None, library_path=None, early_return_allowed=False, event_mode_used=False, intermediate_update=None, require_functions=True):
802+
def instantiate_fmu(
803+
unzipdir,
804+
model_description,
805+
fmi_type=None,
806+
visible=False,
807+
debug_logging=False,
808+
logger=None,
809+
fmi_call_logger=None,
810+
library_path=None,
811+
early_return_allowed=False,
812+
event_mode_used=False,
813+
intermediate_update=None,
814+
require_functions=True,
815+
required_intermediate_variables=None
816+
):
803817
"""
804818
Create an instance of fmpy.fmi1._FMU (see simulate_fmu() for documentation of the parameters).
805819
"""
@@ -855,7 +869,8 @@ def instantiate_fmu(unzipdir, model_description, fmi_type=None, visible=False, d
855869
fmu = fmi3.FMU3Slave(**fmu_args)
856870
fmu.instantiate(visible=visible, loggingOn=debug_logging, eventModeUsed=event_mode_used,
857871
earlyReturnAllowed=early_return_allowed, logMessage=logger,
858-
intermediateUpdate=intermediate_update)
872+
intermediateUpdate=intermediate_update,
873+
requiredIntermediateVariables=required_intermediate_variables)
859874

860875
elif fmi_type in [None, 'ModelExchange'] and model_description.modelExchange is not None:
861876

0 commit comments

Comments
 (0)