@@ -118,12 +118,12 @@ struct SymbolicContinuousCallback
118
118
affect_neg:: Union{Vector{Equation}, FunctionalAffect, Nothing}
119
119
rootfind:: SciMLBase.RootfindOpt
120
120
reinitializealg:: SciMLBase.DAEInitializationAlgorithm
121
- function SymbolicContinuousCallback (;
122
- eqs:: Vector{Equation} ,
123
- affect = NULL_AFFECT,
124
- affect_neg = affect,
125
- rootfind = SciMLBase. LeftRootFind,
126
- reinitializealg= SciMLBase. CheckInit ())
121
+ function SymbolicContinuousCallback (;
122
+ eqs:: Vector{Equation} ,
123
+ affect = NULL_AFFECT,
124
+ affect_neg = affect,
125
+ rootfind = SciMLBase. LeftRootFind,
126
+ reinitializealg = SciMLBase. CheckInit ())
127
127
new (eqs, make_affect (affect), make_affect (affect_neg), rootfind, reinitializealg)
128
128
end # Default affect to nothing
129
129
end
@@ -194,8 +194,10 @@ function affect_negs(cbs::Vector{SymbolicContinuousCallback})
194
194
end
195
195
196
196
reinitialization_alg (cb:: SymbolicContinuousCallback ) = cb. reinitializealg
197
- reinitialization_algs (cbs:: Vector{SymbolicContinuousCallback} ) =
198
- mapreduce (reinitialization_alg, vcat, cbs, init = SciMLBase. DAEInitializationAlgorithm[])
197
+ function reinitialization_algs (cbs:: Vector{SymbolicContinuousCallback} )
198
+ mapreduce (
199
+ reinitialization_alg, vcat, cbs, init = SciMLBase. DAEInitializationAlgorithm[])
200
+ end
199
201
200
202
namespace_affects (af:: Vector , s) = Equation[namespace_affect (a, s) for a in af]
201
203
namespace_affects (af:: FunctionalAffect , s) = namespace_affect (af, s)
@@ -241,7 +243,8 @@ struct SymbolicDiscreteCallback
241
243
affects:: Any
242
244
reinitializealg:: SciMLBase.DAEInitializationAlgorithm
243
245
244
- function SymbolicDiscreteCallback (condition, affects = NULL_AFFECT, reinitializealg= SciMLBase. CheckInit ())
246
+ function SymbolicDiscreteCallback (
247
+ condition, affects = NULL_AFFECT, reinitializealg = SciMLBase. CheckInit ())
245
248
c = scalarize_condition (condition)
246
249
a = scalarize_affects (affects)
247
250
new (c, a, reinitializealg)
@@ -302,8 +305,10 @@ function affects(cbs::Vector{SymbolicDiscreteCallback})
302
305
end
303
306
304
307
reinitialization_alg (cb:: SymbolicDiscreteCallback ) = cb. reinitializealg
305
- reinitialization_algs (cbs:: Vector{SymbolicDiscreteCallback} ) =
306
- mapreduce (reinitialization_alg, vcat, cbs, init = SciMLBase. DAEInitializationAlgorithm[])
308
+ function reinitialization_algs (cbs:: Vector{SymbolicDiscreteCallback} )
309
+ mapreduce (
310
+ reinitialization_alg, vcat, cbs, init = SciMLBase. DAEInitializationAlgorithm[])
311
+ end
307
312
308
313
function namespace_callback (cb:: SymbolicDiscreteCallback , s):: SymbolicDiscreteCallback
309
314
af = affects (cb)
@@ -598,14 +603,15 @@ function generate_single_rootfinding_callback(
598
603
initfn = SciMLBase. INITIALIZE_DEFAULT
599
604
end
600
605
return ContinuousCallback (
601
- cond, affect_function. affect, affect_function. affect_neg, rootfind = cb. rootfind,
606
+ cond, affect_function. affect, affect_function. affect_neg, rootfind = cb. rootfind,
602
607
initialize = initfn,
603
608
initializealg = reinitialization_alg (cb))
604
609
end
605
610
606
611
function generate_vector_rootfinding_callback (
607
612
cbs, sys:: AbstractODESystem , dvs = unknowns (sys),
608
- ps = parameters (sys); rootfind = SciMLBase. RightRootFind, reinitialization = SciMLBase. CheckInit (), kwargs... )
613
+ ps = parameters (sys); rootfind = SciMLBase. RightRootFind,
614
+ reinitialization = SciMLBase. CheckInit (), kwargs... )
609
615
eqs = map (cb -> flatten_equations (cb. eqs), cbs)
610
616
num_eqs = length .(eqs)
611
617
# fuse equations to create VectorContinuousCallback
@@ -670,7 +676,8 @@ function generate_vector_rootfinding_callback(
670
676
initfn = SciMLBase. INITIALIZE_DEFAULT
671
677
end
672
678
return VectorContinuousCallback (
673
- cond, affect, affect_neg, length (eqs), rootfind = rootfind, initialize = initfn, initializealg = reinitialization)
679
+ cond, affect, affect_neg, length (eqs), rootfind = rootfind,
680
+ initialize = initfn, initializealg = reinitialization)
674
681
end
675
682
676
683
"""
@@ -711,21 +718,23 @@ function generate_rootfinding_callback(cbs, sys::AbstractODESystem, dvs = unknow
711
718
# groupby would be very useful here, but alas
712
719
cb_classes = Dict{
713
720
@NamedTuple {
714
- rootfind:: SciMLBase.RootfindOpt ,
721
+ rootfind:: SciMLBase.RootfindOpt ,
715
722
reinitialization:: SciMLBase.DAEInitializationAlgorithm }, Vector{SymbolicContinuousCallback}}()
716
723
for cb in cbs
717
724
push! (
718
- get! (() -> SymbolicContinuousCallback[], cb_classes, (
719
- rootfind = cb. rootfind,
720
- reinitialization = reinitialization_alg (cb))),
725
+ get! (() -> SymbolicContinuousCallback[], cb_classes,
726
+ (
727
+ rootfind = cb. rootfind,
728
+ reinitialization = reinitialization_alg (cb))),
721
729
cb)
722
730
end
723
731
724
732
# generate the callbacks out; we sort by the equivalence class to ensure a deterministic preference order
725
733
compiled_callbacks = map (collect (pairs (sort! (
726
734
OrderedDict (cb_classes); by = p -> p. rootfind)))) do (equiv_class, cbs_in_class)
727
735
return generate_vector_rootfinding_callback (
728
- cbs_in_class, sys, dvs, ps; rootfind = equiv_class. rootfind, reinitialization= equiv_class. reinitialization, kwargs... )
736
+ cbs_in_class, sys, dvs, ps; rootfind = equiv_class. rootfind,
737
+ reinitialization = equiv_class. reinitialization, kwargs... )
729
738
end
730
739
if length (compiled_callbacks) == 1
731
740
return compiled_callbacks[]
@@ -796,10 +805,12 @@ function generate_timed_callback(cb, sys, dvs, ps; postprocess_affect_expr! = no
796
805
end
797
806
if cond isa AbstractVector
798
807
# Preset Time
799
- return PresetTimeCallback (cond, as; initialize = initfn, initializealg= reinitialization_alg (cb))
808
+ return PresetTimeCallback (
809
+ cond, as; initialize = initfn, initializealg = reinitialization_alg (cb))
800
810
else
801
811
# Periodic
802
- return PeriodicCallback (as, cond; initialize = initfn, initializealg= reinitialization_alg (cb))
812
+ return PeriodicCallback (
813
+ as, cond; initialize = initfn, initializealg = reinitialization_alg (cb))
803
814
end
804
815
end
805
816
@@ -824,7 +835,8 @@ function generate_discrete_callback(cb, sys, dvs, ps; postprocess_affect_expr! =
824
835
else
825
836
initfn = SciMLBase. INITIALIZE_DEFAULT
826
837
end
827
- return DiscreteCallback (c, as; initialize = initfn, initializealg= reinitialization_alg (cb))
838
+ return DiscreteCallback (
839
+ c, as; initialize = initfn, initializealg = reinitialization_alg (cb))
828
840
end
829
841
end
830
842
0 commit comments