-
-
Notifications
You must be signed in to change notification settings - Fork 233
Closed
Labels
Description
MWE:
using ModelingToolkit, OrdinaryDiffEq
@variables t X(t)
@parameters p d
D = Differential(t)
eqs = [D(X) ~ p - d*X]
discrete_events = [[1.0] => [p ~ 2p]]
@mtkbuild osys = ODESystem(eqs, t; discrete_events)
oprob = ODEProblem(osys, [X => 1.0], (0.0, 5.0), [p => 2.0, d => 1.0])
sol = solve(oprob)
yields a
ERROR: No matching function wrapper was found!
Stacktrace:
[1] _call(::Tuple{}, arg::Tuple{…}, fww::FunctionWrappersWrappers.FunctionWrappersWrapper{…})
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:23
[2] _call(fw::Tuple{…}, arg::Tuple{…}, fww::FunctionWrappersWrappers.FunctionWrappersWrapper{…})
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:13
[3] _call(fw::Tuple{…}, arg::Tuple{…}, fww::FunctionWrappersWrappers.FunctionWrappersWrapper{…})
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:13
[4] _call(fw::Tuple{…}, arg::Tuple{…}, fww::FunctionWrappersWrappers.FunctionWrappersWrapper{…})
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:13
[5] _call(fw::Tuple{…}, arg::Tuple{…}, fww::FunctionWrappersWrappers.FunctionWrappersWrapper{…})
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:13
[6] (::FunctionWrappersWrappers.FunctionWrappersWrapper{…})(::Vector{…}, ::ModelingToolkit.MTKParameters{…}, ::Float64)
@ FunctionWrappersWrappers ~/.julia/packages/FunctionWrappersWrappers/9XR0m/src/FunctionWrappersWrappers.jl:10
[7] (::ODEFunction{…})(::Vector{…}, ::Vararg{…})
@ SciMLBase ~/.julia/packages/SciMLBase/JUp1I/src/scimlfunctions.jl:2296
[8] reset_fsal!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:493
[9] apply_step!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:404
[10] loopheader!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:14
[11] solve!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:549
[12] #__solve#799
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:7 [inlined]
[13] __solve
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:1 [inlined]
[14] solve_call(_prob::ODEProblem{…}, args::CompositeAlgorithm{…}; merge_callbacks::Bool, kwargshandle::Nothing, kwargs::@Kwargs{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:612
[15] solve_call
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:569 [inlined]
[16] solve_up(prob::ODEProblem{…}, sensealg::Nothing, u0::Vector{…}, p::ModelingToolkit.MTKParameters{…}, args::CompositeAlgorithm{…}; kwargs::@Kwargs{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1080
[17] solve_up
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1066 [inlined]
[18] #solve#51
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1003 [inlined]
[19] solve
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:993 [inlined]
[20] #__solve#804
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:542 [inlined]
[21] __solve
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:541 [inlined]
[22] #__solve#72
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1394 [inlined]
[23] __solve
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1386 [inlined]
[24] #solve_call#44
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:612 [inlined]
[25] solve_call
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:569 [inlined]
[26] solve_up(::ODEProblem{…}, ::Nothing, ::Vector{…}, ::ModelingToolkit.MTKParameters{…}; kwargs::@Kwargs{})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1072
[27] solve_up
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1066 [inlined]
[28] #solve#51
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1003 [inlined]
[29] solve(::ODEProblem{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:993
[30] top-level scope
@ ~/Desktop/Julia Playground/tmp/playground.jl:11
Some type information was truncated. Use `show(err)` to see complete types.
While for continuous:
continuous_events = [[X ~ 2.0] => [p ~ 2p]]
@mtkbuild osys = ODESystem(eqs, t; continuous_events)
oprob = ODEProblem(osys, [X => 1.0], (0.0, 5.0), [p => 2.0, d => 1.0])
sol = solve(oprob)
you get a
ERROR: MethodError: no method matching get_tmp_cache(::OrdinaryDiffEq.ODEIntegrator{…}, ::CompositeAlgorithm{…}, ::OrdinaryDiffEq.DefaultCache{…})
Closest candidates are:
get_tmp_cache(::Any, ::CompositeAlgorithm, ::OrdinaryDiffEq.CompositeCache)
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_interface.jl:179
get_tmp_cache(::Any, ::OrdinaryDiffEqAlgorithm, ::OrdinaryDiffEq.OrdinaryDiffEqMutableCache)
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_interface.jl:125
get_tmp_cache(::Any, ::OrdinaryDiffEqAlgorithm, ::OrdinaryDiffEq.OrdinaryDiffEqConstantCache)
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_interface.jl:118
...
Stacktrace:
[1] get_tmp_cache
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_interface.jl:111 [inlined]
[2] (::ModelingToolkit.var"#456#464"{…})(u::Vector{…}, t::Float64, integ::OrdinaryDiffEq.ODEIntegrator{…})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/cAhZr/src/systems/callbacks.jl:486
[3] determine_event_occurance
@ ~/.julia/packages/DiffEqBase/PBhFc/src/callbacks.jl:293 [inlined]
[4] find_callback_time(integrator::OrdinaryDiffEq.ODEIntegrator{…}, callback::ContinuousCallback{…}, counter::Int64)
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/callbacks.jl:401
[5] macro expansion
@ ~/.julia/packages/DiffEqBase/PBhFc/src/callbacks.jl:132 [inlined]
[6] find_first_continuous_callback(integrator::OrdinaryDiffEq.ODEIntegrator{…}, callbacks::Tuple{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/callbacks.jl:127
[7] find_first_continuous_callback
@ ~/.julia/packages/DiffEqBase/PBhFc/src/callbacks.jl:125 [inlined]
[8] handle_callbacks!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:332
[9] _loopfooter!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:254
[10] loopfooter!
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/integrators/integrator_utils.jl:207 [inlined]
[11] solve!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
@ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:554
[12] #__solve#799
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:7 [inlined]
[13] __solve
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:1 [inlined]
[14] solve_call(_prob::ODEProblem{…}, args::CompositeAlgorithm{…}; merge_callbacks::Bool, kwargshandle::Nothing, kwargs::@Kwargs{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:612
[15] solve_call
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:569 [inlined]
[16] solve_up(prob::ODEProblem{…}, sensealg::Nothing, u0::Vector{…}, p::ModelingToolkit.MTKParameters{…}, args::CompositeAlgorithm{…}; kwargs::@Kwargs{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1080
[17] solve_up
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1066 [inlined]
[18] #solve#51
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1003 [inlined]
[19] solve
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:993 [inlined]
[20] #__solve#804
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:542 [inlined]
[21] __solve
@ ~/.julia/packages/OrdinaryDiffEq/k912u/src/solve.jl:541 [inlined]
[22] #__solve#72
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1394 [inlined]
[23] __solve
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1386 [inlined]
[24] #solve_call#44
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:612 [inlined]
[25] solve_call
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:569 [inlined]
[26] solve_up(::ODEProblem{…}, ::Nothing, ::Vector{…}, ::ModelingToolkit.MTKParameters{…}; kwargs::@Kwargs{})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1072
[27] solve_up
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1066 [inlined]
[28] #solve#51
@ ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:1003 [inlined]
[29] solve(::ODEProblem{…})
@ DiffEqBase ~/.julia/packages/DiffEqBase/PBhFc/src/solve.jl:993
[30] top-level scope
@ ~/Desktop/Julia Playground/tmp/playground.jl:17
Some type information was truncated. Use `show(err)` to see complete types.
Doing e.g.
sol = solve(oprob, Tsit5())
and it works though.
Not selecting a solver is fine if there are no events:
using ModelingToolkit, OrdinaryDiffEq
@variables t X(t)
@parameters p d
D = Differential(t)
eqs = [D(X) ~ p - d*X]
@mtkbuild osys = ODESystem(eqs, t)
oprob = ODEProblem(osys, [X => 1.0], (0.0, 5.0), [p => 2.0, d => 1.0])
sol = solve(oprob)