Skip to content

Commit

Permalink
Merge pull request #2554 from Ickaser/init_dae_error_nobreak
Browse files Browse the repository at this point in the history
Move DAE init alg error message further down the dependency stack
  • Loading branch information
ChrisRackauckas authored Feb 6, 2025
2 parents de64d09 + c089d7f commit 0591c1f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 26 deletions.
35 changes: 9 additions & 26 deletions lib/OrdinaryDiffEqCore/src/initialize_dae.jl
Original file line number Diff line number Diff line change
Expand Up @@ -44,47 +44,30 @@ end

## Default algorithms

function _initialize_dae!(integrator, prob::ODEProblem,
alg::DefaultInit, x::Val{true})
if SciMLBase.has_initializeprob(prob.f)
_initialize_dae!(integrator, prob,
OverrideInit(integrator.opts.abstol), x)
else
_initialize_dae!(integrator, prob,
BrownFullBasicInit(integrator.opts.abstol), x)
end
end

function _initialize_dae!(integrator, prob::ODEProblem,
alg::DefaultInit, x::Val{false})
if SciMLBase.has_initializeprob(prob.f)
_initialize_dae!(integrator, prob,
OverrideInit(integrator.opts.abstol), x)
else
_initialize_dae!(integrator, prob,
BrownFullBasicInit(integrator.opts.abstol), x)
end
end

function _initialize_dae!(integrator, prob::DAEProblem,
alg::DefaultInit, x::Val{false})
alg::DefaultInit, x::Union{Val{true}, Val{false}})
if SciMLBase.has_initializeprob(prob.f)
_initialize_dae!(integrator, prob,
OverrideInit(integrator.opts.abstol), x)
elseif prob.differential_vars === nothing
_initialize_dae!(integrator, prob,
ShampineCollocationInit(), x)
elseif !applicable(_initialize_dae!, integrator, prob,
BrownFullBasicInit(integrator.opts.abstol), x)
error("`OrdinaryDiffEqNonlinearSolve` is not loaded, which is required for the default initialization algorithm (`BrownFullBasicInit` or `ShampineCollocationInit`). To solve this problem, either do `using OrdinaryDiffEqNonlinearSolve` or pass `initializealg = CheckInit()` to the `solve` function. This second option requires consistent `u0`.")
else
_initialize_dae!(integrator, prob,
BrownFullBasicInit(integrator.opts.abstol), x)
end
end

function _initialize_dae!(integrator, prob::DAEProblem,
alg::DefaultInit, x::Val{true})
alg::DefaultInit, x::Union{Val{true}, Val{false}})
if SciMLBase.has_initializeprob(prob.f)
_initialize_dae!(integrator, prob,
OverrideInit(integrator.opts.abstol), x)
elseif !applicable(_initialize_dae!, integrator, prob,
BrownFullBasicInit(), x) && !applicable(_initialize_dae!,
integrator, prob, ShampineCollocationInit(), x)
error("`OrdinaryDiffEqNonlinearSolve` is not loaded, which is required for the default initialization algorithm (`BrownFullBasicInit` or `ShampineCollocationInit`). To solve this problem, either do `using OrdinaryDiffEqNonlinearSolve` or pass `initializealg = CheckInit()` to the `solve` function. This second option requires consistent `u0`.")
elseif prob.differential_vars === nothing
_initialize_dae!(integrator, prob,
ShampineCollocationInit(), x)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,6 @@ include("functional.jl")
include("newton.jl")
include("initialize_dae.jl")

export BrownFullBasicInit, ShampineCollocationInit

end

0 comments on commit 0591c1f

Please sign in to comment.