@@ -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
776777Initializes 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
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