|
44 | 44 |
|
45 | 45 | ## Default algorithms |
46 | 46 |
|
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 |
57 | 47 |
|
58 | 48 | 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}}) |
71 | 50 | if SciMLBase.has_initializeprob(prob.f) |
72 | 51 | _initialize_dae!(integrator, prob, |
73 | 52 | 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`.") |
77 | 56 | else |
78 | 57 | _initialize_dae!(integrator, prob, |
79 | 58 | BrownFullBasicInit(integrator.opts.abstol), x) |
80 | 59 | end |
81 | 60 | end |
82 | 61 |
|
83 | 62 | function _initialize_dae!(integrator, prob::DAEProblem, |
84 | | - alg::DefaultInit, x::Val{true}) |
| 63 | + alg::DefaultInit, x::Union{Val{true}, Val{false}}) |
85 | 64 | if SciMLBase.has_initializeprob(prob.f) |
86 | 65 | _initialize_dae!(integrator, prob, |
87 | 66 | 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`.") |
88 | 71 | elseif prob.differential_vars === nothing |
89 | 72 | _initialize_dae!(integrator, prob, |
90 | 73 | ShampineCollocationInit(), x) |
|
0 commit comments