Skip to content

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

@cstjean

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

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