Skip to content

Unexpected UndefVarError #2007

@dodoplus

Description

@dodoplus

check:

using ModelingToolkit, OrdinaryDiffEq

@variables t

@connector function Pin(; name)
    sts = @variables begin
        v(t)                    # Potential at the pin [V]
        i(t), [connect = Flow]    # Current flowing into the pin [A]
    end
    ODESystem(Equation[], t, sts, [], name = name, defaults = Dict(v => 1.0, i => 1.0))
end

function Ground(; name)
    @named g = Pin()
    eqs = [g.v ~ 0]
    ODESystem(eqs, t, [], []; systems = [g], name = name)
end

function OnePort(; name, v_start = 0.0, i_start = 0.0)
    @named p = Pin()
    @named n = Pin()
    sts = @variables begin
        v(t) = v_start
        i(t) = i_start
    end
    eqs = [v ~ p.v - n.v
           0 ~ p.i + n.i
           i ~ p.i]
    return compose(ODESystem(eqs, t, sts, []; name = name), p, n)
end

function Resistor(; name, R)
    @named oneport = OnePort()
    @unpack v, i = oneport
    pars = @parameters R = R
    eqs = [
        v ~ i * R,
    ]
    extend(ODESystem(eqs, t, [], pars; name = name), oneport)
end

function ConstantVoltage(;name, V = 1.0)
    @named oneport = OnePort()
    @unpack v = oneport
    ps = @parameters V=V
    eqs = [
           V ~ v
          ]
    extend(ODESystem(eqs, t, [], ps; name=name), oneport)
end

function ECapacitor(;name, Q_start = 0.0)
    @named oneport = OnePort()
    @unpack v, i = oneport
    sts = @variables begin
        Q(t) = Q_start
    end
    D = Differential(t)
    eqs = [
           D(Q) ~ i
           v*Q ~ 1
          ]
    extend(ODESystem(eqs, t, sts, []; name=name), oneport)
end

@named source = ConstantVoltage(V=0.1)
@named ec = ECapacitor()
@named r = Resistor(R=1)
@named ground = Ground()

eqs = [
    connect(source.p, r.p)
    connect(r.p, ec.p)
    connect(ec.n, source.n , ground.g)
]

@named model = ODESystem(eqs, t, systems=[r, ec, source , ground])
sys = structural_simplify(model)
prob = ODAEProblem(sys, [], (0, 10.0))
sol = solve(prob, Rosenbrock23())
# retcode: Success
# Interpolation: 1st order linear
# t: 2-element Vector{Float64}:
#   0.0
#  10.0
# u: 2-element Vector{Vector{Float64}}:
#  []
#  []

Now, attempting to access r.i:

sol[r.i]

UndefVarError: ec₊Q(t) not defined

Stacktrace:
  [1] macro expansion
    @ ~/.julia/packages/ModelingToolkit/wAABB/src/structural_transformation/codegen.jl:206 [inlined]
  [2] macro expansion
    @ ~/.julia/packages/SymbolicUtils/qulQp/src/code.jl:351 [inlined]
  [3] macro expansion
    @ ~/.julia/packages/RuntimeGeneratedFunctions/6v5Gn/src/RuntimeGeneratedFunctions.jl:137 [inlined]
  [4] macro expansion
    @ ./none:0 [inlined]
  [5] generated_callfunc
    @ ./none:0 [inlined]
  [6] (::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol("##arg#8441539597060760774"), Symbol("##arg#2454277144290286779"), :t), ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", (0xc04349c9, 0x620b07f0, 0x344f553c, 0x577f8862, 0x7170b4f0)})(::Vector{Float64}, ::Vector{Float64}, ::Float64)
    @ RuntimeGeneratedFunctions ~/.julia/packages/RuntimeGeneratedFunctions/6v5Gn/src/RuntimeGeneratedFunctions.jl:124
  [7] (::ModelingToolkit.StructuralTransformations.var"#generated_observed#244"{Bool, ModelingToolkit.BipartiteGraphs.Matching{ModelingToolkit.BipartiteGraphs.Unassigned, Vector{Union{ModelingToolkit.BipartiteGraphs.Unassigned, Int64}}}, TearingState{ODESystem}, Dict{Any, Any}, BitVector, Vector{SymbolicUtils.Code.Assignment}, Tuple{Vector{Vector{Int64}}, Vector{BitSet}}, SymbolicUtils.Code.NameState, Dict{Any, Int64}})(::Num, ::Vector{Float64}, ::Vararg{Any})
    @ ModelingToolkit.StructuralTransformations ~/.julia/packages/ModelingToolkit/wAABB/src/structural_transformation/codegen.jl:342
  [8] _broadcast_getindex_evalf
    @ ./broadcast.jl:670 [inlined]
  [9] _broadcast_getindex
    @ ./broadcast.jl:643 [inlined]
 [10] getindex
    @ ./broadcast.jl:597 [inlined]
 [11] copy
    @ ./broadcast.jl:899 [inlined]
 [12] materialize
    @ ./broadcast.jl:860 [inlined]
 [13] observed(A::ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Nothing, ODEProblem{Nothing, Tuple{Float64, Float64}, true, Vector{Float64}, ODEFunction{true, SciMLBase.AutoSpecialize, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol("##out#329"), Symbol("##arg#8441539597060760774"), Symbol("##arg#2454277144290286779"), :t), ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", (0x77b8abe5, 0x2736dc4f, 0x6d0f9600, 0x632363cf, 0xfb62e9b0)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, SparseArrays.SparseMatrixCSC{Bool, Int64}, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, Vector{Symbol}, ModelingToolkit.StructuralTransformations.var"#generated_observed#244"{Bool, ModelingToolkit.BipartiteGraphs.Matching{ModelingToolkit.BipartiteGraphs.Unassigned, Vector{Union{ModelingToolkit.BipartiteGraphs.Unassigned, Int64}}}, TearingState{ODESystem}, Dict{Any, Any}, BitVector, Vector{SymbolicUtils.Code.Assignment}, Tuple{Vector{Vector{Int64}}, Vector{BitSet}}, SymbolicUtils.Code.NameState, Dict{Any, Int64}}, Nothing, ODESystem}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Nothing, SciMLBase.LinearInterpolation{Vector{Float64}, Vector{Vector{Float64}}}, Nothing, Nothing}, sym::Num, i::Colon)
    @ SciMLBase ~/.julia/packages/SciMLBase/VKnrY/src/solutions/solution_interface.jl:132
 [14] getindex(A::ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Nothing, ODEProblem{Nothing, Tuple{Float64, Float64}, true, Vector{Float64}, ODEFunction{true, SciMLBase.AutoSpecialize, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol("##out#329"), Symbol("##arg#8441539597060760774"), Symbol("##arg#2454277144290286779"), :t), ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", ModelingToolkit.StructuralTransformations.var"#_RGF_ModTag", (0x77b8abe5, 0x2736dc4f, 0x6d0f9600, 0x632363cf, 0xfb62e9b0)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, SparseArrays.SparseMatrixCSC{Bool, Int64}, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, Vector{Symbol}, ModelingToolkit.StructuralTransformations.var"#generated_observed#244"{Bool, ModelingToolkit.BipartiteGraphs.Matching{ModelingToolkit.BipartiteGraphs.Unassigned, Vector{Union{ModelingToolkit.BipartiteGraphs.Unassigned, Int64}}}, TearingState{ODESystem}, Dict{Any, Any}, BitVector, Vector{SymbolicUtils.Code.Assignment}, Tuple{Vector{Vector{Int64}}, Vector{BitSet}}, SymbolicUtils.Code.NameState, Dict{Any, Int64}}, Nothing, ODESystem}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Nothing, SciMLBase.LinearInterpolation{Vector{Float64}, Vector{Vector{Float64}}}, Nothing, Nothing}, sym::Num)
    @ SciMLBase ~/.julia/packages/SciMLBase/VKnrY/src/solutions/solution_interface.jl:88
 [15] top-level scope
    @ In[3]:1
 [16] eval
    @ ./boot.jl:368 [inlined]
 [17] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions