|
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