Hi,
I am trying to connect two MTK components and then solve the resulting SDDE system. However, I am getting an ArgumentsError that I don’t understand.
using ModelingToolkit
using DifferentialEquations
using ModelingToolkit: t_nounits as t, D_nounits as D
using StochasticDiffEq
@component function StochasticLV(;name)
@variables x(t) = 0.9 y(t) = 0.9
@parameters begin
α = 2/3
β = 4/3
γ = 1
δ = 1
end
@brownians η
eqs = [
D(x) ~ α * x - β * x * y + η
D(y) ~ -γ * y + δ * x * y
]
System(eqs, t; name)
end
@component function SomethingElse(;name, τ)
@variables z(t) = 0 x(..)
@parameters θ = 0.1 τ = τ
@brownians ξ
eqs = [
D(z) ~ -θ * x(t - τ) + ξ
]
System(eqs, t; name)
end
@named lv = StochasticLV()
@named sth = SomethingElse(τ = 3)
connection_eqs = [
sth.x ~ lv.x
]
@named connected_model = System(connection_eqs, t, [], []; systems = [lv, sth])
connected = mtkcompile(connected_model)
prob = SDDEProblem(connected, [], (0.0, 1.0))
sol = solve(prob, ImplicitEM())
Stacktrace:
ERROR: ArgumentError: sth₊x(-sth₊τ + t) is present in the system but sth₊x(-sth₊τ + t) is not an unknown.
Stacktrace:
[1]
@ ModelingToolkitTearing ~/.julia/packages/ModelingToolkitTearing/ZusxN/src/tearingstate.jl:298
[2] TearingState
@ ~/.julia/packages/ModelingToolkitTearing/ZusxN/src/tearingstate.jl:149 [inlined]
[3] __mtkcompile(sys::System; inputs::OrderedCollections.OrderedSet{…}, outputs::OrderedCollections.OrderedSet{…}, disturbance_inputs::OrderedCollections.OrderedSet{…}, sort_eqs::Bool, kwargs::@Kwargs{…})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/GtdTx/src/systems/systems.jl:34
[4] __mtkcompile
@ ~/.julia/packages/ModelingToolkit/GtdTx/src/systems/systems.jl:23 [inlined]
[5] _mtkcompile(sys::System; kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/systems.jl:155
[6] _mtkcompile
@ ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/systems.jl:128 [inlined]
[7] mtkcompile(sys::System; additional_passes::Tuple{}, inputs::Vector{…}, outputs::Vector{…}, disturbance_inputs::Vector{…}, split::Bool, kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/systems.jl:100
[8] mtkcompile
@ ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/systems.jl:84 [inlined]
[9] InitializationProblem{…}(sys::System, t::Float64, op::ModelingToolkitBase.AtomicArrayDict{…}; fast_path::Bool, guesses::Dict{…}, check_length::Nothing, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, fully_determined::Nothing, check_units::Bool, allow_incomplete::Bool, algebraic_only::Bool, time_dependent_init::Bool, initsys_mtkcompile_kwargs::@NamedTuple{}, is_steadystateprob::Bool, kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/problems/initializationproblem.jl:97
[10] InitializationProblem
@ ~/.julia/packages/ModelingToolkitBase/gJDou/src/problems/initializationproblem.jl:25 [inlined]
[11] #_#910
@ ./none:0 [inlined]
[12] maybe_build_initialization_problem(sys::System, iip::Bool, op::ModelingToolkitBase.AtomicArrayDict{…}, t::Float64, guesses::Dict{…}; time_dependent_init::Bool, u0_constructor::Function, p_constructor::Function, floatT::Type, initialization_eqs::Vector{…}, use_scc::Bool, eval_expression::Bool, eval_module::Module, missing_guess_value::ModelingToolkitBase.MissingGuessValue.var"typeof(MissingGuessValue)", implicit_dae::Bool, is_steadystateprob::Bool, expression::Type, kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/problem_utils.jl:1610
[13] __process_SciMLProblem(constructor::Type, sys::System, op::Dict{…}; floatT::Type, u0Type::Type, u0_eltype::Type, build_initializeprob::Bool, implicit_dae::Bool, t::Float64, guesses::Dict{…}, warn_initialize_determined::Bool, initialization_eqs::Vector{…}, eval_expression::Bool, eval_module::Module, fully_determined::Nothing, check_initialization_units::Bool, tofloat::Bool, u0_constructor::typeof(identity), p_constructor::typeof(identity), check_length::Bool, symbolic_u0::Bool, warn_cyclic_dependency::Bool, circular_dependency_max_cycle_length::Int64, circular_dependency_max_cycles::Int64, initsys_mtkcompile_kwargs::@NamedTuple{}, substitution_limit::Int64, use_scc::Bool, time_dependent_init::Bool, algebraic_only::Bool, missing_guess_value::ModelingToolkitBase.MissingGuessValue.var"typeof(MissingGuessValue)", allow_incomplete::Bool, is_initializeprob::Bool, is_steadystateprob::Bool, return_operating_point::Bool, compiler_options::CompilerOptions, init_compiler_options::CompilerOptions, kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/problem_utils.jl:2016
[14] process_SciMLProblem(constructor::Any, sys::System, op::Any; u0_eltype::Nothing, u0_constructor::Function, p_constructor::Function, symbolic_u0::Bool, kwargs::@Kwargs{…})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/systems/problem_utils.jl:1965
[15] (SDDEProblem{…})(sys::System, op::Vector{…}, tspan::Tuple{…}; callback::Nothing, check_length::Bool, checkbounds::Bool, eval_expression::Bool, eval_module::Module, check_compatibility::Bool, u0_constructor::typeof(identity), sparse::Bool, sparsenoise::Bool, expression::Type, kwargs::@Kwargs{})
@ ModelingToolkitBase ~/.julia/packages/ModelingToolkitBase/gJDou/src/problems/sddeproblem.jl:74
[16] SDDEProblem
@ ~/.julia/packages/ModelingToolkitBase/gJDou/src/problems/sddeproblem.jl:63 [inlined]
[17] SDDEProblem
@ ./none:0 [inlined]
[18] SDDEProblem(sys::System, op::Vector{Any}, tspan::Tuple{Float64, Float64})
@ ModelingToolkitBase ./none:0
[19] top-level scope
@ ~/Documents/SomeProject/src/models/test.jl:42
Some type information was truncated. Use `show(err)` to see complete types.
Calling mtkcompile() on the connected_model removes the sth₊x(t) unknown.
unknowns(connected_model)
4-element Vector{SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{SymReal}}:
lv₊x(t)
lv₊y(t)
sth₊z(t)
sth₊x(t)
unknowns(connected)
3-element Vector{SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{SymReal}}:
sth₊z(t)
lv₊y(t)
lv₊x(t)
I’d appreciate any help regarding this issue. Thanks!