Skip to content

Commit e6f1f06

Browse files
fix: don't pass dt as an observed to ImperativeAffect in MTKFMIExt
1 parent 744f652 commit e6f1f06

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

ext/MTKFMIExt.jl

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ function MTK.FMIComponent(::Val{Ver}; fmu = nothing, tolerance = 1e-6,
261261

262262
# use `ImperativeAffect` for instance management here
263263
cb_observed = (; inputs = __mtk_internal_x, params = copy(params),
264-
t, wrapper, dt = communication_step_size)
264+
t, wrapper)
265265
cb_modified = (;)
266266
# modify the outputs if present
267267
if symbolic_type(__mtk_internal_o) != NotSymbolic()
@@ -272,11 +272,12 @@ function MTK.FMIComponent(::Val{Ver}; fmu = nothing, tolerance = 1e-6,
272272
cb_modified = (cb_modified..., states = __mtk_internal_u)
273273
end
274274
initialize_affect = MTK.ImperativeAffect(fmiCSInitialize!; observed = cb_observed,
275-
modified = cb_modified, ctx = _functor)
275+
modified = cb_modified, ctx = (_functor, communication_step_size))
276276
finalize_affect = MTK.FunctionalAffect(fmiFinalize!, [], [wrapper], [])
277277
# the callback affect performs the stepping
278278
step_affect = MTK.ImperativeAffect(
279-
fmiCSStep!; observed = cb_observed, modified = cb_modified, ctx = _functor)
279+
fmiCSStep!; observed = cb_observed, modified = cb_modified,
280+
ctx = (_functor, communication_step_size))
280281
instance_management_callback = MTK.SymbolicDiscreteCallback(
281282
communication_step_size, step_affect; initialize = initialize_affect,
282283
finalize = finalize_affect, reinitializealg = reinitializealg
@@ -775,7 +776,8 @@ the value being the output vector if the FMU has output variables. `o` should co
775776
776777
Initializes the FMU. Only for use with CoSimulation FMUs.
777778
"""
778-
function fmiCSInitialize!(m, o, ctx::FMI2CSFunctor, integrator)
779+
function fmiCSInitialize!(m, o, ctx, integrator)
780+
functor::FMI2CSFunctor, dt = ctx
779781
states = isdefined(m, :states) ? m.states : ()
780782
inputs = o.inputs
781783
params = o.params
@@ -787,10 +789,10 @@ function fmiCSInitialize!(m, o, ctx::FMI2CSFunctor, integrator)
787789

788790
instance = get_instance_CS!(wrapper, states, inputs, params, t)
789791
if isdefined(m, :states)
790-
@statuscheck FMI.fmi2GetReal!(instance, ctx.state_value_references, m.states)
792+
@statuscheck FMI.fmi2GetReal!(instance, functor.state_value_references, m.states)
791793
end
792794
if isdefined(m, :outputs)
793-
@statuscheck FMI.fmi2GetReal!(instance, ctx.output_value_references, m.outputs)
795+
@statuscheck FMI.fmi2GetReal!(instance, functor.output_value_references, m.outputs)
794796
end
795797

796798
return m
@@ -804,13 +806,13 @@ periodically to communicte with the CoSimulation FMU. Has the same requirements
804806
`fmiCSInitialize!` for `m` and `o`, with the addition that `o` should have a key
805807
`:dt` with the value being the communication step size.
806808
"""
807-
function fmiCSStep!(m, o, ctx::FMI2CSFunctor, integrator)
809+
function fmiCSStep!(m, o, ctx, integrator)
810+
functor::FMI2CSFunctor, dt = ctx
808811
wrapper = o.wrapper
809812
states = isdefined(m, :states) ? m.states : ()
810813
inputs = o.inputs
811814
params = o.params
812815
t = o.t
813-
dt = o.dt
814816

815817
instance = get_instance_CS!(wrapper, states, inputs, params, integrator.t)
816818
if !isempty(inputs)
@@ -820,10 +822,10 @@ function fmiCSStep!(m, o, ctx::FMI2CSFunctor, integrator)
820822
@statuscheck FMI.fmi2DoStep(instance, integrator.t - dt, dt, FMI.fmi2True)
821823

822824
if isdefined(m, :states)
823-
@statuscheck FMI.fmi2GetReal!(instance, ctx.state_value_references, m.states)
825+
@statuscheck FMI.fmi2GetReal!(instance, functor.state_value_references, m.states)
824826
end
825827
if isdefined(m, :outputs)
826-
@statuscheck FMI.fmi2GetReal!(instance, ctx.output_value_references, m.outputs)
828+
@statuscheck FMI.fmi2GetReal!(instance, functor.output_value_references, m.outputs)
827829
end
828830

829831
return m
@@ -874,7 +876,8 @@ end
874876
"""
875877
$(TYPEDSIGNATURES)
876878
"""
877-
function fmiCSInitialize!(m, o, ctx::FMI3CSFunctor, integrator)
879+
function fmiCSInitialize!(m, o, ctx, integrator)
880+
functor::FMI3CSFunctor, dt = ctx
878881
states = isdefined(m, :states) ? m.states : ()
879882
inputs = o.inputs
880883
params = o.params
@@ -885,10 +888,11 @@ function fmiCSInitialize!(m, o, ctx::FMI3CSFunctor, integrator)
885888
end
886889
instance = get_instance_CS!(wrapper, states, inputs, params, t)
887890
if isdefined(m, :states)
888-
@statuscheck FMI.fmi3GetFloat64!(instance, ctx.state_value_references, m.states)
891+
@statuscheck FMI.fmi3GetFloat64!(instance, functor.state_value_references, m.states)
889892
end
890893
if isdefined(m, :outputs)
891-
@statuscheck FMI.fmi3GetFloat64!(instance, ctx.output_value_references, m.outputs)
894+
@statuscheck FMI.fmi3GetFloat64!(
895+
instance, functor.output_value_references, m.outputs)
892896
end
893897

894898
return m
@@ -897,13 +901,13 @@ end
897901
"""
898902
$(TYPEDSIGNATURES)
899903
"""
900-
function fmiCSStep!(m, o, ctx::FMI3CSFunctor, integrator)
904+
function fmiCSStep!(m, o, ctx, integrator)
905+
functor::FMI3CSFunctor, dt = ctx
901906
wrapper = o.wrapper
902907
states = isdefined(m, :states) ? m.states : ()
903908
inputs = o.inputs
904909
params = o.params
905910
t = o.t
906-
dt = o.dt
907911

908912
instance = get_instance_CS!(wrapper, states, inputs, params, integrator.t)
909913
if !isempty(inputs)
@@ -921,10 +925,11 @@ function fmiCSStep!(m, o, ctx::FMI3CSFunctor, integrator)
921925
@assert earlyReturn[] == FMI.fmi3False
922926

923927
if isdefined(m, :states)
924-
@statuscheck FMI.fmi3GetFloat64!(instance, ctx.state_value_references, m.states)
928+
@statuscheck FMI.fmi3GetFloat64!(instance, functor.state_value_references, m.states)
925929
end
926930
if isdefined(m, :outputs)
927-
@statuscheck FMI.fmi3GetFloat64!(instance, ctx.output_value_references, m.outputs)
931+
@statuscheck FMI.fmi3GetFloat64!(
932+
instance, functor.output_value_references, m.outputs)
928933
end
929934

930935
return m

0 commit comments

Comments
 (0)