Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Events not working with automatic solver selection #2741

Closed
TorkelE opened this issue May 26, 2024 · 4 comments
Closed

Events not working with automatic solver selection #2741

TorkelE opened this issue May 26, 2024 · 4 comments
Labels
bug Something isn't working events

Comments

@TorkelE
Copy link
Member

TorkelE commented May 26, 2024

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)
@TorkelE TorkelE added the bug Something isn't working label May 26, 2024
@ChrisRackauckas
Copy link
Member

@oscardssmith

@oscardssmith
Copy link
Contributor

oscardssmith commented May 26, 2024

I believe this is fixed on version 6.80 of OrdinaryDiffEq. @TorkelE can you see if updating packages fixes this?

@TorkelE
Copy link
Member Author

TorkelE commented May 26, 2024

the mwe was carried out on v6.80 :(

@oscardssmith
Copy link
Contributor

oh wait, @ChrisRackauckas we need to tag 6.80.1. We haven't tagged since merging SciML/OrdinaryDiffEq.jl#2225

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working events
Projects
None yet
Development

No branches or pull requests

4 participants