Skip to content

Commit 8323777

Browse files
Add DAEProblem specialization for remake with initialization_data support
This commit adds a specialized remake function for DAEProblem that properly handles initialization_data, matching the pattern used in ODEProblem, SDEProblem, and other problem types. The new remake function: - Accepts all DAEProblem-specific parameters (du0, differential_vars) - Handles initialization_data creation and passing through remake - Supports lazy_initialization and build_initializeprob flags - Maintains compatibility with existing API This enables proper initialization handling for DAE problems when using Sundials.jl CheckInit functionality.
1 parent 3605a0c commit 8323777

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

src/remake.jl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,64 @@ function remake(prob::SDDEProblem;
607607
return prob
608608
end
609609

610+
"""
611+
remake(prob::DAEProblem; f = missing, du0 = missing, u0 = missing, tspan = missing,
612+
p = missing, differential_vars = missing, kwargs = missing, _kwargs...)
613+
614+
Remake the given `DAEProblem`.
615+
If `u0` or `p` are given as symbolic maps `ModelingToolkit.jl` has to be loaded.
616+
"""
617+
function remake(prob::DAEProblem; f = missing,
618+
du0 = missing,
619+
u0 = missing,
620+
tspan = missing,
621+
p = missing,
622+
differential_vars = missing,
623+
kwargs = missing,
624+
interpret_symbolicmap = true,
625+
use_defaults = false,
626+
lazy_initialization = nothing,
627+
build_initializeprob = Val{true},
628+
_kwargs...)
629+
if tspan === missing
630+
tspan = prob.tspan
631+
end
632+
633+
newu0, newp = updated_u0_p(prob, u0, p, tspan[1]; interpret_symbolicmap, use_defaults)
634+
635+
if build_initializeprob == Val{true} || build_initializeprob == true
636+
if f !== missing && has_initialization_data(f)
637+
initialization_data = remake_initialization_data(
638+
prob.f.sys, f, u0, tspan[1], p, newu0, newp)
639+
else
640+
initialization_data = remake_initialization_data(
641+
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
642+
end
643+
else
644+
initialization_data = nothing
645+
end
646+
647+
f = coalesce(f, prob.f)
648+
f = remake(prob.f; f, initialization_data)
649+
650+
du0 = coalesce(du0, prob.du0)
651+
differential_vars = coalesce(differential_vars, prob.differential_vars)
652+
653+
iip = isinplace(prob)
654+
655+
prob = if kwargs === missing
656+
DAEProblem{iip}(f, du0, newu0, tspan, newp; differential_vars, prob.kwargs..., _kwargs...)
657+
else
658+
DAEProblem{iip}(f, du0, newu0, tspan, newp; differential_vars, kwargs...)
659+
end
660+
661+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
662+
@reset prob.u0 = u0
663+
@reset prob.p = p
664+
665+
return prob
666+
end
667+
610668
"""
611669
remake(prob::OptimizationProblem; f = missing, u0 = missing, p = missing,
612670
lb = missing, ub = missing, int = missing, lcons = missing, ucons = missing,

0 commit comments

Comments
 (0)