Skip to content

Commit b4893a3

Browse files
committed
Fix initial condition
1 parent a023f7e commit b4893a3

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

src/systems/callbacks.jl

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ function generate_single_rootfinding_callback(
673673
rf_oop(u, parameter_values(integ), t)
674674
end
675675
end
676-
user_initfun = (affect_function.initialize == NULL_AFFECT) ? SciMLBase.INITIALIZE_DEFAULT :
676+
user_initfun = isnothing(affect_function.initialize) ? SciMLBase.INITIALIZE_DEFAULT :
677677
(c, u, t, i) -> affect_function.initialize(i)
678678
if has_index_cache(sys) && (ic = get_index_cache(sys)) !== nothing &&
679679
(save_idxs = get(ic.callback_to_clocks, cb, nothing)) !== nothing
@@ -691,7 +691,7 @@ function generate_single_rootfinding_callback(
691691
return ContinuousCallback(
692692
cond, affect_function.affect, affect_function.affect_neg, rootfind = cb.rootfind,
693693
initialize = initfn,
694-
finalize = (affect_function.finalize == NULL_AFFECT) ? SciMLBase.FINALIZE_DEFAULT : (c, u, t, i) -> affect_function.finalize(i),
694+
finalize = isnothing(affect_function.finalize) ? SciMLBase.FINALIZE_DEFAULT : (c, u, t, i) -> affect_function.finalize(i),
695695
initializealg = reinitialization_alg(cb))
696696
end
697697

@@ -763,9 +763,35 @@ function generate_vector_rootfinding_callback(
763763
end
764764
end
765765
end
766-
767-
initialize = handle_optional_setup_fn(
768-
map(fn -> fn.initialize, affect_functions), SciMLBase.INITIALIZE_DEFAULT)
766+
initialize = nothing
767+
if has_index_cache(sys) && (ic = get_index_cache(sys)) !== nothing
768+
initialize = handle_optional_setup_fn(map((cb, fn) -> begin
769+
if (save_idxs = get(ic.callback_to_clocks, cb, nothing)) !== nothing
770+
let save_idxs = save_idxs
771+
if !isnothing(fn.initialize)
772+
(i) -> begin
773+
for idx in save_idxs
774+
SciMLBase.save_discretes!(i, idx)
775+
end
776+
fn.initialize(i)
777+
end
778+
else
779+
(i) -> begin
780+
for idx in save_idxs
781+
SciMLBase.save_discretes!(i, idx)
782+
end
783+
end
784+
end
785+
end
786+
else
787+
fn.initialize
788+
end
789+
end, cbs, affect_functions), SciMLBase.INITIALIZE_DEFAULT)
790+
791+
else
792+
initialize = handle_optional_setup_fn(map(fn -> fn.initialize, affect_functions), SciMLBase.INITIALIZE_DEFAULT)
793+
end
794+
769795
finalize = handle_optional_setup_fn(
770796
map(fn -> fn.finalize, affect_functions), SciMLBase.FINALIZE_DEFAULT)
771797
return VectorContinuousCallback(

0 commit comments

Comments
 (0)