Skip to content

Commit 0591c1f

Browse files
Merge pull request #2554 from Ickaser/init_dae_error_nobreak
Move DAE init alg error message further down the dependency stack
2 parents de64d09 + c089d7f commit 0591c1f

File tree

2 files changed

+11
-26
lines changed

2 files changed

+11
-26
lines changed

lib/OrdinaryDiffEqCore/src/initialize_dae.jl

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -44,47 +44,30 @@ end
4444

4545
## Default algorithms
4646

47-
function _initialize_dae!(integrator, prob::ODEProblem,
48-
alg::DefaultInit, x::Val{true})
49-
if SciMLBase.has_initializeprob(prob.f)
50-
_initialize_dae!(integrator, prob,
51-
OverrideInit(integrator.opts.abstol), x)
52-
else
53-
_initialize_dae!(integrator, prob,
54-
BrownFullBasicInit(integrator.opts.abstol), x)
55-
end
56-
end
5747

5848
function _initialize_dae!(integrator, prob::ODEProblem,
59-
alg::DefaultInit, x::Val{false})
60-
if SciMLBase.has_initializeprob(prob.f)
61-
_initialize_dae!(integrator, prob,
62-
OverrideInit(integrator.opts.abstol), x)
63-
else
64-
_initialize_dae!(integrator, prob,
65-
BrownFullBasicInit(integrator.opts.abstol), x)
66-
end
67-
end
68-
69-
function _initialize_dae!(integrator, prob::DAEProblem,
70-
alg::DefaultInit, x::Val{false})
49+
alg::DefaultInit, x::Union{Val{true}, Val{false}})
7150
if SciMLBase.has_initializeprob(prob.f)
7251
_initialize_dae!(integrator, prob,
7352
OverrideInit(integrator.opts.abstol), x)
74-
elseif prob.differential_vars === nothing
75-
_initialize_dae!(integrator, prob,
76-
ShampineCollocationInit(), x)
53+
elseif !applicable(_initialize_dae!, integrator, prob,
54+
BrownFullBasicInit(integrator.opts.abstol), x)
55+
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`.")
7756
else
7857
_initialize_dae!(integrator, prob,
7958
BrownFullBasicInit(integrator.opts.abstol), x)
8059
end
8160
end
8261

8362
function _initialize_dae!(integrator, prob::DAEProblem,
84-
alg::DefaultInit, x::Val{true})
63+
alg::DefaultInit, x::Union{Val{true}, Val{false}})
8564
if SciMLBase.has_initializeprob(prob.f)
8665
_initialize_dae!(integrator, prob,
8766
OverrideInit(integrator.opts.abstol), x)
67+
elseif !applicable(_initialize_dae!, integrator, prob,
68+
BrownFullBasicInit(), x) && !applicable(_initialize_dae!,
69+
integrator, prob, ShampineCollocationInit(), x)
70+
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`.")
8871
elseif prob.differential_vars === nothing
8972
_initialize_dae!(integrator, prob,
9073
ShampineCollocationInit(), x)

lib/OrdinaryDiffEqNonlinearSolve/src/OrdinaryDiffEqNonlinearSolve.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,6 @@ include("functional.jl")
6464
include("newton.jl")
6565
include("initialize_dae.jl")
6666

67+
export BrownFullBasicInit, ShampineCollocationInit
68+
6769
end

0 commit comments

Comments
 (0)