Skip to content

Commit 7f48f2e

Browse files
Use callback's initializealg in handle_callback_modifiers!
- Updated reeval_internals_due_to_modification! to accept callback_initializealg parameter - Pass callback_initializealg to handle_callback_modifiers! - Use callback's initializealg if provided, otherwise fall back to integrator's
1 parent 84c4d65 commit 7f48f2e

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/common_interface/integrator_utils.jl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,11 @@ function IDAReinit!(integrator::IDAIntegrator)
155155
integrator.u_modified = false
156156
end
157157

158-
function handle_callback_modifiers!(integrator::IDAIntegrator)
158+
function handle_callback_modifiers!(integrator::IDAIntegrator, callback_initializealg = nothing)
159159
# Implicitly does IDAReinit!
160-
# Use BrownFullBasicInit as it only modifies algebraic variables
161-
# which is appropriate after callbacks have modified the solution
162-
DiffEqBase.initialize_dae!(integrator, DiffEqBase.BrownFullBasicInit())
160+
# Use callback's initialization algorithm if provided, otherwise use integrator's
161+
initializealg = isnothing(callback_initializealg) ? integrator.initializealg : callback_initializealg
162+
DiffEqBase.initialize_dae!(integrator, initializealg)
163163
end
164164

165165
function DiffEqBase.add_tstop!(integrator::AbstractSundialsIntegrator, t)
@@ -220,13 +220,15 @@ end
220220
end
221221
end
222222

223-
function DiffEqBase.reeval_internals_due_to_modification!(integrator::AbstractSundialsIntegrator)
223+
function DiffEqBase.reeval_internals_due_to_modification!(integrator::AbstractSundialsIntegrator,
224+
continuous_modification = true; callback_initializealg = nothing)
224225
integrator.userfun.p = integrator.p
225226
nothing
226227
end
227-
function DiffEqBase.reeval_internals_due_to_modification!(integrator::IDAIntegrator)
228+
function DiffEqBase.reeval_internals_due_to_modification!(integrator::IDAIntegrator,
229+
continuous_modification = true; callback_initializealg = nothing)
228230
integrator.userfun.p = integrator.p
229-
handle_callback_modifiers!(integrator::IDAIntegrator)
231+
handle_callback_modifiers!(integrator, callback_initializealg)
230232
end
231233

232234
# Required for callbacks

0 commit comments

Comments
 (0)