Skip to content

UndefRefError() when using ParametrizedInterpolation inside of @mtkmodel #409

Description

@cstjean

Describe the bug

While the basic ParametrizedInterpolation example works fine on my machine, trying to use it inside of @mtkmodel failed.

Expected behavior

I expected a solution to the equation, or perhaps a better error message if I am doing something wrong.

Minimal Reproducible Example 👇

using ModelingToolkit, ModelingToolkitStandardLibrary.Electrical,
    ModelingToolkitStandardLibrary.Blocks, DataInterpolations, DifferentialEquations
using ModelingToolkit: t_nounits as t, D_nounits as D

@mtkmodel Borm begin
    @components begin
        I_input = RealInput()
    end
    @variables begin
        I(t) = 0
    end
    @equations begin
        D(I) ~ I_input.u
    end
end

uu = [0,10]
xx = [0,10]

@mtkmodel IsolatedBorm begin
    @components begin
        borm = Borm()
        I_input = ParametrizedInterpolation(interp_type=ConstantInterpolation, u=uu, x=xx)
        clock = ContinuousClock()
    end
    @equations begin
        connect(clock.output, I_input.input)
        connect(I_input.output, borm.I_input)
    end
end

@mtkbuild room = IsolatedBorm()
solve(ODEProblem(room, [], (0,10)))

Error & Stacktrace ⚠️

ERROR: LoadError: UndefRefError: access to undefined reference
Stacktrace:
  [1] getindex
    @ .\essentials.jl:917 [inlined]
  [2] iterate (repeats 2 times)
    @ .\array.jl:902 [inlined]
  [3] _zip_iterate_some
    @ .\iterators.jl:444 [inlined]
  [4] _zip_iterate_some
    @ .\iterators.jl:446 [inlined]
  [5] _zip_iterate_all
    @ .\iterators.jl:436 [inlined]
  [6] iterate
    @ .\iterators.jl:426 [inlined]
  [7] ==(A::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, B::Vector{Any})
    @ Base .\abstractarray.jl:3033
  [8] _eq
    @ .\tuple.jl:551 [inlined]
  [9] ==
    @ .\tuple.jl:547 [inlined]
 [10] !=
    @ .\operators.jl:277 [inlined]
 [11] (::ModelingToolkitStandardLibrary.Blocks.CachedInterpolation{…})(u::SubArray{…}, x::SubArray{…}, args::Tuple{})
    @ ModelingToolkitStandardLibrary.Blocks C:\Users\a1058035\.julia\packages\ModelingToolkitStandardLibrary\b10Ky\src\Blocks\sources.jl:808
 [12] macro expansion
    @ C:\Users\a1058035\.julia\packages\SymbolicUtils\KmZ71\src\code.jl:411 [inlined]
 [13] macro expansion
    @ C:\Users\a1058035\.julia\packages\Symbolics\3yEdi\src\build_function.jl:368 [inlined]
 [14] macro expansion
    @ C:\Users\a1058035\.julia\packages\RuntimeGeneratedFunctions\2SjTC\src\RuntimeGeneratedFunctions.jl:161 [inlined]
 [15] macro expansion
    @ .\none:0 [inlined]
 [16] generated_callfunc
    @ .\none:0 [inlined]
 [17] (::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{…})(::Vector{…}, ::Vector{…}, ::MTKParameters{…}, ::Float64)
    @ RuntimeGeneratedFunctions C:\Users\a1058035\.julia\packages\RuntimeGeneratedFunctions\2SjTC\src\RuntimeGeneratedFunctions.jl:148
 [18] macro expansion
    @ C:\Users\a1058035\.julia\packages\ModelingToolkit\hlGut\src\systems\codegen_utils.jl:0 [inlined]
 [19] _generated_call
    @ C:\Users\a1058035\.julia\packages\ModelingToolkit\hlGut\src\systems\codegen_utils.jl:353 [inlined]
 [20] GeneratedFunctionWrapper
    @ C:\Users\a1058035\.julia\packages\ModelingToolkit\hlGut\src\systems\codegen_utils.jl:350 [inlined]
 [21] ODEFunction
    @ C:\Users\a1058035\.julia\packages\SciMLBase\wQHrI\src\scimlfunctions.jl:2592 [inlined]
 [22] initialize!
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqTsit5\o07IY\src\tsit_perform_step.jl:175 [inlined]
 [23] initialize!(integrator::OrdinaryDiffEqCore.ODEIntegrator{…}, cache::OrdinaryDiffEqCore.DefaultCache{…})
    @ OrdinaryDiffEqCore C:\Users\a1058035\.julia\packages\OrdinaryDiffEqCore\oFTse\src\perform_step\composite_perform_step.jl:38
 [24] __init(prob::ODEProblem{…}, alg::CompositeAlgorithm{…}, timeseries_init::Tuple{}, ts_init::Tuple{}, ks_init::Tuple{}; saveat::Tuple{}, tstops::Tuple{}, d_discontinuities::Tuple{}, save_idxs::Nothing, save_everystep::Bool, save_on::Bool, save_start::Bool, save_end::Nothing, callback::Nothing, dense::Bool, calck::Bool, dt::Float64, dtmin::Float64, dtmax::Float64, force_dtmin::Bool, adaptive::Bool, gamma::Rational{…}, abstol::Nothing, reltol::Nothing, qmin::Rational{…}, qmax::Int64, qsteady_min::Int64, qsteady_max::Int64, beta1::Nothing, beta2::Nothing, qoldinit::Rational{…}, controller::Nothing, fullnormalize::Bool, failfactor::Int64, maxiters::Int64, internalnorm::typeof(DiffEqBase.ODE_DEFAULT_NORM), internalopnorm::typeof(LinearAlgebra.opnorm), isoutofdomain::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), unstable_check::typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), verbose::Bool, timeseries_errors::Bool, dense_errors::Bool, advance_to_tstop::Bool, stop_at_next_tstop::Bool, initialize_save::Bool, progress::Bool, progress_steps::Int64, progress_name::String, progress_message::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), progress_id::Symbol, userdata::Nothing, allow_extrapolation::Bool, initialize_integrator::Bool, alias::ODEAliasSpecifier, initializealg::OrdinaryDiffEqCore.DefaultInit, kwargs::@Kwargs{…})
    @ OrdinaryDiffEqCore C:\Users\a1058035\.julia\packages\OrdinaryDiffEqCore\oFTse\src\solve.jl:577
 [25] __init (repeats 2 times)
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqCore\oFTse\src\solve.jl:11 [inlined]
 [26] #__solve#62
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqCore\oFTse\src\solve.jl:6 [inlined]
 [27] __solve
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqCore\oFTse\src\solve.jl:1 [inlined]
 [28] #__solve#3
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqDefault\MdlB6\src\default_alg.jl:48 [inlined]
 [29] __solve
    @ C:\Users\a1058035\.julia\packages\OrdinaryDiffEqDefault\MdlB6\src\default_alg.jl:47 [inlined]
 [30] #__solve#54
    @ C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:896 [inlined]
 [31] __solve
    @ C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:887 [inlined]
 [32] #solve_call#31
    @ C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:127 [inlined]
 [33] solve_call(::ODEProblem{…})
    @ DiffEqBase C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:84
 [34] solve_up(::ODEProblem{…}, ::Nothing, ::Vector{…}, ::MTKParameters{…}; originator::SciMLBase.ChainRulesOriginator, kwargs::@Kwargs{})
    @ DiffEqBase C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:665
 [35] solve_up
    @ C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:658 [inlined]
 [36] solve(::ODEProblem{…}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{…}, kwargs::@Kwargs{})
    @ DiffEqBase C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:553
 [37] solve(::ODEProblem{…})
    @ DiffEqBase C:\Users\a1058035\.julia\packages\DiffEqBase\4uSBa\src\solve.jl:543

Environment (please complete the following information):

  • Output of using Pkg; Pkg.status()
  [82cc6244] DataInterpolations v8.5.0
  [0c46a032] DifferentialEquations v7.16.1
  [961ee093] ModelingToolkit v10.21.0
  [16a59e39] ModelingToolkitStandardLibrary v2.25.0
  [0c5d862f] Symbolics v6.52.0

Julia Version 1.11.5

@SebastianM-C

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions