-
-
Notifications
You must be signed in to change notification settings - Fork 231
Closed
Description
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
Labels
No labels