ModelingToolkit.jl
ModelingToolkit.jl copied to clipboard
Cannot find parent of var - 2nd order system problem - sol[u]
Solution retrieval fails with second order system:
# Packages and inclusions
using ModelingToolkit
using OrdinaryDiffEq
using ModelingToolkit: Differential
# Parameters, variables, and derivatives
@parameters t
@variables (u(..))[1:6]
D = Differential(t)
eqs = [0.9(u(t))[6] + D(D((u(t))[2])) ~ 0,
- 0.9(u(t))[4] + D(D((u(t))[3])) ~ 0,
- 0.9(u(t))[5] + D(D((u(t))[4])) ~ 0,
0.9(u(t))[6] + D(D((u(t))[5])) ~ 0,
- 0.9(u(t))[5] + D(D((u(t))[6])) ~ 0,
(u(t))[1] ~ (u(t))[6]]
defaults = Dict(vcat([u(t)[i] => 0.0 for i in 1:6], [D(u(t)[i]) => 1.0 for i in 1:6]))
ps = Pair[]
sys = ODESystem(eqs, t, [u(t)[i] for i in 1:6], ps, defaults=defaults, name = :sys)
simpsys = structural_simplify(sys)
prob = ODEProblem(simpsys, Pair[], (0, 2pi))
sol = solve(prob, Tsit5(), saveat=pi / 40)
usol = map(d -> sol[d][1], u(t)[1:6]) # fail
ERROR: ArgumentError: Cannot find the parent of var"u(t)[6]ˍtt".
Stacktrace:
[1] getparent
@ ~/.julia/packages/Symbolics/4VdEG/src/variable.jl:420 [inlined]
[2] getparent
@ ~/.julia/packages/Symbolics/4VdEG/src/variable.jl:412 [inlined]
[3] _getname(x::Sym{Real, Nothing}, val::Dict{Any, Any})
@ Symbolics ~/.julia/packages/Symbolics/4VdEG/src/variable.jl:401
[4] getname(x::Sym{Real, Nothing}, val::Dict{Any, Any}) (repeats 2 times)
@ Symbolics ~/.julia/packages/Symbolics/4VdEG/src/variable.jl:409
[5] renamespace(sys::ODESystem, x::Sym{Real, Nothing})
@ ModelingToolkit ~/.julia/dev/ModelingToolkit.jl/src/systems/abstractsystem.jl:362
[6] states(sys::ODESystem, v::Sym{Real, Nothing})
@ ModelingToolkit ~/.julia/dev/ModelingToolkit.jl/src/systems/abstractsystem.jl:469
[7] (::ModelingToolkit.var"#314#319"{ODESystem})(x::Equation)
@ ModelingToolkit ./none:0
[8] iterate
@ ./generator.jl:47 [inlined]
[9] _all(f::Base.var"#282#284", itr::Base.Generator{Vector{Equation}, ModelingToolkit.var"#314#319"{ODESystem}}, #unused#::Colon)
@ Base ./reduce.jl:930
[10] all
@ ./reduce.jl:918 [inlined]
[11] Dict(kv::Base.Generator{Vector{Equation}, ModelingToolkit.var"#314#319"{ODESystem}})
@ Base ./dict.jl:131
[12] build_explicit_observed_function(sys::ODESystem, ts::Term{Real, Nothing}; expression::Bool, output_type::Type, checkbounds::Bool)
@ ModelingToolkit ~/.julia/dev/ModelingToolkit.jl/src/systems/diffeqs/odesystem.jl:289
[13] #443
@ ~/.julia/dev/ModelingToolkit.jl/src/systems/diffeqs/abstractodesystem.jl:324 [inlined]
[14] get!(default::ModelingToolkit.var"#443#453"{Term{Real, Nothing}, Bool, ODESystem}, h::Dict{Any, Any}, key::Term{Real, Nothing})
@ Base ./dict.jl:465
[15] (::ModelingToolkit.var"#487#generated_observed#452"{Bool, ODESystem, Dict{Any, Any}})(obsvar::Term{Real, Nothing}, u::Vector{Float64}, p::Nothing, t::Float64)
@ ModelingToolkit ~/.julia/dev/ModelingToolkit.jl/src/systems/diffeqs/abstractodesystem.jl:323
[16] _broadcast_getindex_evalf
@ ./broadcast.jl:648 [inlined]
[17] _broadcast_getindex
@ ./broadcast.jl:621 [inlined]
[18] getindex
@ ./broadcast.jl:575 [inlined]
[19] copy
@ ./broadcast.jl:922 [inlined]
[20] materialize
@ ./broadcast.jl:883 [inlined]
[21] observed(A::ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, Nothing, ODEFunction{true, ModelingToolkit.var"#f#445"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0xc4098de7, 0x62f66434, 0xe4e20897, 0x0e1ea755, 0xe022be12)}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0x48300cf2, 0xdcdfd486, 0xaafcb0fa, 0xbd987137, 0x3be637a3)}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, ModelingToolkit.var"#487#generated_observed#452"{Bool, ODESystem, Dict{Any, Any}}, Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, OrdinaryDiffEq.InterpolationData{ODEFunction{true, ModelingToolkit.var"#f#445"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0xc4098de7, 0x62f66434, 0xe4e20897, 0x0e1ea755, 0xe022be12)}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0x48300cf2, 0xdcdfd486, 0xaafcb0fa, 0xbd987137, 0x3be637a3)}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, ModelingToolkit.var"#487#generated_observed#452"{Bool, ODESystem, Dict{Any, Any}}, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, OrdinaryDiffEq.Tsit5Cache{Vector{Float64}, Vector{Float64}, Vector{Float64}, OrdinaryDiffEq.Tsit5ConstantCache{Float64, Float64}, typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}}, DiffEqBase.DEStats}, sym::Term{Real, Nothing}, i::Colon)
@ SciMLBase ~/.julia/packages/SciMLBase/YasGG/src/solutions/solution_interface.jl:117
[22] getindex(A::ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, Nothing, ODEFunction{true, ModelingToolkit.var"#f#445"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0xc4098de7, 0x62f66434, 0xe4e20897, 0x0e1ea755, 0xe022be12)}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0x48300cf2, 0xdcdfd486, 0xaafcb0fa, 0xbd987137, 0x3be637a3)}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, ModelingToolkit.var"#487#generated_observed#452"{Bool, ODESystem, Dict{Any, Any}}, Nothing}, Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, OrdinaryDiffEq.InterpolationData{ODEFunction{true, ModelingToolkit.var"#f#445"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0xc4098de7, 0x62f66434, 0xe4e20897, 0x0e1ea755, 0xe022be12)}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var"#_RGF_ModTag", ModelingToolkit.var"#_RGF_ModTag", (0x48300cf2, 0xdcdfd486, 0xaafcb0fa, 0xbd987137, 0x3be637a3)}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Vector{Symbol}, Symbol, ModelingToolkit.var"#487#generated_observed#452"{Bool, ODESystem, Dict{Any, Any}}, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, OrdinaryDiffEq.Tsit5Cache{Vector{Float64}, Vector{Float64}, Vector{Float64}, OrdinaryDiffEq.Tsit5ConstantCache{Float64, Float64}, typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}}, DiffEqBase.DEStats}, sym::Term{Real, Nothing})
@ SciMLBase ~/.julia/packages/SciMLBase/YasGG/src/solutions/solution_interface.jl:78
[23] (::var"#21#22")(d::Term{Real, Nothing})
@ Main ~/.julia/dev/MethodOfLines.jl/src/scratch/wavemwe.jl:37
[24] _map(::Function, ::Symbolics.ArrayOp{Vector{Real}})
@ Symbolics ~/.julia/packages/Symbolics/4VdEG/src/array-lib.jl:292
[25] macro expansion
@ ~/.julia/packages/Symbolics/4VdEG/src/array-lib.jl:283 [inlined]
[26] var"Base.map_4228762831532280247"(f::Function, x::Symbolics.ArrayOp{Vector{Real}})
@ Symbolics ~/.julia/packages/Symbolics/4VdEG/src/wrapper-types.jl:114
[27] map(f::Function, x::Symbolics.Arr{Num, 1})
@ Symbolics ~/.julia/packages/Symbolics/4VdEG/src/wrapper-types.jl:123
[28] top-level scope
@ ~/.julia/dev/MethodOfLines.jl/src/scratch/wavemwe.jl:37
Simplification due to the equation (u(t))[1] ~ (u(t))[6]
seems suspect.
@shashi could you take a look? We won't need getparent
now, right?
Yeah, it shouldn't be trying to find the parent.
Any progress on this?
I'm also getting a similar error for something I'm working on. I haven't quite gotten it down to a mwe yet (outputs of individual component simulations seem fine, but the full connected system gets this error).