1
1
# ################################### system operations #####################################
2
2
get_continuous_events (sys:: AbstractSystem ) = SymbolicContinuousCallback[]
3
- get_continuous_events (sys:: AbstractODESystem ) = getfield (sys, :continuous_events )
3
+ get_continuous_events (sys:: AbstractTimeDependentSystem ) = getfield (sys, :continuous_events )
4
4
has_continuous_events (sys:: AbstractSystem ) = isdefined (sys, :continuous_events )
5
5
6
6
has_discrete_events (sys:: AbstractSystem ) = isdefined (sys, :discrete_events )
@@ -560,7 +560,7 @@ function compile_affect(eqs::Vector{Equation}, cb, sys, dvs, ps; outputidxs = no
560
560
end
561
561
end
562
562
563
- function generate_rootfinding_callback (sys:: AbstractODESystem , dvs = unknowns (sys),
563
+ function generate_rootfinding_callback (sys:: AbstractTimeDependentSystem , dvs = unknowns (sys),
564
564
ps = parameters (sys); kwargs... )
565
565
cbs = continuous_events (sys)
566
566
isempty (cbs) && return nothing
@@ -571,7 +571,7 @@ Generate a single rootfinding callback; this happens if there is only one equati
571
571
generate_rootfinding_callback and thus we can produce a ContinuousCallback instead of a VectorContinuousCallback.
572
572
"""
573
573
function generate_single_rootfinding_callback (
574
- eq, cb, sys:: AbstractODESystem , dvs = unknowns (sys),
574
+ eq, cb, sys:: AbstractTimeDependentSystem , dvs = unknowns (sys),
575
575
ps = parameters (sys); kwargs... )
576
576
if ! isequal (eq. lhs, 0 )
577
577
eq = 0 ~ eq. lhs - eq. rhs
@@ -609,7 +609,7 @@ function generate_single_rootfinding_callback(
609
609
end
610
610
611
611
function generate_vector_rootfinding_callback (
612
- cbs, sys:: AbstractODESystem , dvs = unknowns (sys),
612
+ cbs, sys:: AbstractTimeDependentSystem , dvs = unknowns (sys),
613
613
ps = parameters (sys); rootfind = SciMLBase. RightRootFind,
614
614
reinitialization = SciMLBase. CheckInit (), kwargs... )
615
615
eqs = map (cb -> flatten_equations (cb. eqs), cbs)
683
683
"""
684
684
Compile a single continuous callback affect function(s).
685
685
"""
686
- function compile_affect_fn (cb, sys:: AbstractODESystem , dvs, ps, kwargs)
686
+ function compile_affect_fn (cb, sys:: AbstractTimeDependentSystem , dvs, ps, kwargs)
687
687
eq_aff = affects (cb)
688
688
eq_neg_aff = affect_negs (cb)
689
689
affect = compile_affect (eq_aff, cb, sys, dvs, ps; expression = Val{false }, kwargs... )
@@ -698,7 +698,7 @@ function compile_affect_fn(cb, sys::AbstractODESystem, dvs, ps, kwargs)
698
698
(affect = affect, affect_neg = affect_neg)
699
699
end
700
700
701
- function generate_rootfinding_callback (cbs, sys:: AbstractODESystem , dvs = unknowns (sys),
701
+ function generate_rootfinding_callback (cbs, sys:: AbstractTimeDependentSystem , dvs = unknowns (sys),
702
702
ps = parameters (sys); kwargs... )
703
703
eqs = map (cb -> flatten_equations (cb. eqs), cbs)
704
704
num_eqs = length .(eqs)
@@ -859,12 +859,12 @@ merge_cb(x, ::Nothing) = x
859
859
merge_cb (x, y) = CallbackSet (x, y)
860
860
861
861
function process_events (sys; callback = nothing , kwargs... )
862
- if has_continuous_events (sys)
862
+ if has_continuous_events (sys) && ! isempty ( continuous_events (sys))
863
863
contin_cb = generate_rootfinding_callback (sys; kwargs... )
864
864
else
865
865
contin_cb = nothing
866
866
end
867
- if has_discrete_events (sys)
867
+ if has_discrete_events (sys) && ! isempty ( discrete_events (sys))
868
868
discrete_cb = generate_discrete_callbacks (sys; kwargs... )
869
869
else
870
870
discrete_cb = nothing
0 commit comments