-
-
Notifications
You must be signed in to change notification settings - Fork 232
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
If a constant is used in when defining the default value of a parameter or initial condition of an ODESystem an ODEProblem will not build from the ODESystem.
This works fine with parameters, not sure why constants are not mapped.
For parameter defaults
using ModelingToolkit
using DifferentialEquations
using ModelingToolkit: t_nounits as t, D_nounits as D
@constants h = 1
@parameters τ = 0.5 * h
@variables x(t) =1.0
eqs = [D(x) ~ (h - x) / τ]
@named model = ODESystem(eqs, t)#;defaults=[h=>ModelingToolkit.getdefault(h)])
fol_model = structural_simplify(model)
prob = ODEProblem(fol_model, [], (0.0, 10.0));
Error & Stacktrace
ERROR: Could not evaluate value of parameter τ. Missing values for variables in expression 0.5h.
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] MTKParameters(sys::ODESystem, p::SciMLBase.NullParameters, u0::Vector{Any}; tofloat::Bool, use_union::Bool, t0::Float64)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/parameter_buffer.jl:153
[3] process_DEProblem(constructor::Type, sys::ODESystem, u0map::Vector{…}, parammap::SciMLBase.NullParameters; implicit_dae::Bool, du0map::Nothing, version::Nothing, tgrad::Bool, jac::Bool, checkbounds::Bool, sparse::Bool, simplify::Bool, linenumbers::Bool, parallel::Symbolics.SerialForm, eval_expression::Bool, eval_module::Module, use_union::Bool, tofloat::Bool, symbolic_u0::Bool, u0_constructor::typeof(identity), guesses::Dict{…}, t::Float64, warn_initialize_determined::Bool, build_initializeprob::Bool, initialization_eqs::Vector{…}, fully_determined::Bool, check_units::Bool, kwargs::@Kwargs{…})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:845
[4] process_DEProblem
@ ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:766 [inlined]
[5] (ODEProblem{…})(sys::ODESystem, u0map::Vector{…}, tspan::Tuple{…}, parammap::SciMLBase.NullParameters; callback::Nothing, check_length::Bool, warn_initialize_determined::Bool, eval_expression::Bool, eval_module::Module, kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:992
[6] ODEProblem
@ ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:980 [inlined]
[7] (ODEProblem{true, SciMLBase.AutoSpecialize})(sys::ODESystem, u0map::Vector{Any}, tspan::Tuple{Float64, Float64})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:980
[8] (ODEProblem{true})(::ODESystem, ::Vector{Any}, ::Vararg{Any}; kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:967
[9] (ODEProblem{true})(::ODESystem, ::Vector{Any}, ::Vararg{Any})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:966
[10] ODEProblem(::ODESystem, ::Vector{Any}, ::Vararg{Any}; kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:956
[11] ODEProblem(::ODESystem, ::Vector{Any}, ::Vararg{Any})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:955
And for Initial Conditions
using ModelingToolkit
using DifferentialEquations
using ModelingToolkit: t_nounits as t, D_nounits as D
@constants h = 1
@parameters τ = 0.5
@variables x(t) = h
eqs = [D(x) ~ (h - x) / τ]
@named model = ODESystem(eqs, t)#;defaults=[h=>ModelingToolkit.getdefault(h)])
fol_model = structural_simplify(model)
prob = ODEProblem(fol_model, [], (0.0, 10.0));
ERROR: ArgumentError: SymbolicUtils.BasicSymbolic{Real}[h] are either missing from the variable map or missing from the system's unknowns/parameters list.
Stacktrace:
[1] throw_missingvars_in_sys(vars::Vector{SymbolicUtils.BasicSymbolic{Real}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/utils.jl:657
[2] promote_to_concrete(vs::Vector{SymbolicUtils.BasicSymbolic{Real}}; tofloat::Bool, use_union::Bool)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/utils.jl:676
[3] varmap_to_vars(varmap::Vector{…}, varlist::Vector{…}; defaults::Dict{…}, check::Bool, toterm::Function, promotetoconcrete::Nothing, tofloat::Bool, use_union::Bool)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/variables.jl:170
[4] get_u0(sys::ODESystem, u0map::Vector{…}, parammap::SciMLBase.NullParameters; symbolic_u0::Bool, toterm::Function, t0::Float64, use_union::Bool)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:760
[5] process_DEProblem(constructor::Type, sys::ODESystem, u0map::Vector{…}, parammap::SciMLBase.NullParameters; implicit_dae::Bool, du0map::Nothing, version::Nothing, tgrad::Bool, jac::Bool, checkbounds::Bool, sparse::Bool, simplify::Bool, linenumbers::Bool, parallel::Symbolics.SerialForm, eval_expression::Bool, eval_module::Module, use_union::Bool, tofloat::Bool, symbolic_u0::Bool, u0_constructor::typeof(identity), guesses::Dict{…}, t::Float64, warn_initialize_determined::Bool, build_initializeprob::Bool, initialization_eqs::Vector{…}, fully_determined::Bool, check_units::Bool, kwargs::@Kwargs{…})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:838
[6] process_DEProblem
@ ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:766 [inlined]
[7] (ODEProblem{…})(sys::ODESystem, u0map::Vector{…}, tspan::Tuple{…}, parammap::SciMLBase.NullParameters; callback::Nothing, check_length::Bool, warn_initialize_determined::Bool, eval_expression::Bool, eval_module::Module, kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:992
[8] ODEProblem
@ ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:980 [inlined]
[9] (ODEProblem{true, SciMLBase.AutoSpecialize})(sys::ODESystem, u0map::Vector{Any}, tspan::Tuple{Float64, Float64})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:980
[10] (ODEProblem{true})(::ODESystem, ::Vector{Any}, ::Vararg{Any}; kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:967
[11] (ODEProblem{true})(::ODESystem, ::Vector{Any}, ::Vararg{Any})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:966
[12] ODEProblem(::ODESystem, ::Vector{Any}, ::Vararg{Any}; kwargs::@Kwargs{})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:956
[13] ODEProblem(::ODESystem, ::Vector{Any}, ::Vararg{Any})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/yfT8s/src/systems/diffeqs/abstractodesystem.jl:955
You can "fix" it by providing the value of h
in the example above to defaults in the ODESystem call, but this is pretty redundant and it seems like this should get picked up automatically. The below appears to work fine.
using ModelingToolkit
using DifferentialEquations
using ModelingToolkit: t_nounits as t, D_nounits as D
@constants h = 1
@parameters τ = 0.5
@variables x(t) = h
eqs = [D(x) ~ (h - x) / τ]
@named model = ODESystem(eqs, t; defaults=[h=>ModelingToolkit.getdefault(h)])
fol_model = structural_simplify(model)
prob = ODEProblem(fol_model, [], (0.0, 10.0));
sol = solve(prob);
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working