-
-
Notifications
You must be signed in to change notification settings - Fork 114
feat: add fields to OverrideInit, better nlsolve_alg handling
#857
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add fields to OverrideInit, better nlsolve_alg handling
#857
Conversation
924e92b to
66f5229
Compare
override_init_get_nlsolveOverrideInit, better nlsolve_alg handling
66f5229 to
9ab1a71
Compare
src/initialization.jl
Outdated
| end | ||
|
|
||
| nlsol = solve(initprob, nlsolve_alg) | ||
| nlsol = solve(initprob, nlsolve_alg; abstol = alg.abstol) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it should default to using the tolerance from the solver if not supplied elsewhere.
| """ | ||
| function get_initial_values(prob::ODEProblem, integrator, f, alg::CheckInit, | ||
| function get_initial_values( | ||
| prob::AbstractDEProblem, integrator::DEIntegrator, f, alg::CheckInit, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't handle DAEProblem?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's an AbstractDAEProblem dispatch below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But then this one should just be for ODEProblem?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SDEProblem dispatches here too
| (iszero(algebraic_vars) || iszero(algebraic_eqs)) && return u0, p, true | ||
| update_coefficients!(M, u0, p, t) | ||
| tmp = _evaluate_f_ode(integrator, f, isinplace, u0, p, t) | ||
| tmp .= ArrayInterface.restructure(tmp, algebraic_eqs .* _vec(tmp)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
integrator.opts.internalnorm: This doesn't handle Sundials or ODEInterface?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm... I didn't know that. Makes sense that SciMLBase can't make the same assumptions OrdinaryDiffEq did
b5a156a to
3cf6e49
Compare
src/alg_traits.jl
Outdated
| """ | ||
| $(TYPEDSIGNATURES) | ||
| Get the `abstol` for the solve stored in the cache. Required for caches of algorithms for | ||
| which `cache_stores_tolerances(alg) == true`. | ||
| """ | ||
| function cache_get_abstol(cache) | ||
| error("Cache does not store the `abstol`.") | ||
| end | ||
|
|
||
| """ | ||
| $(TYPEDSIGNATURES) | ||
| Get the `reltol` for the solve stored in the cache. Required for caches of algorithms for | ||
| which `cache_stores_tolerances(alg) == true`. | ||
| """ | ||
| function cache_get_reltol(cache) | ||
| error("Cache does not store the `reltol`.") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought we talked about passing it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Didn't you also mention having a trait and throwing an error message? Right now it takes a keyword argument and falls back to this if not provided.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That said I'm more than happy to remove this trait since solvers have to individually opt-in to doing initialization anyway.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's simplify and just make it required.
0f41da2 to
436f8ab
Compare
|
A lot of our tests still use codecov, apparently 😅 |
436f8ab to
7eb3546
Compare
7eb3546 to
5e572e3
Compare
5e572e3 to
7f93fb2
Compare
|
This is good to go. Downstream failures are BVDiffEq failing to precompile. |
This replaces
default_nlsolvein OrdinaryDiffEq, and will have methods in NonlinearSolve which can then be leveraged by all libraries for initialization.Checklist
contributor guidelines, in particular the SciML Style Guide and
COLPRAC.
Additional context
Add any other context about the problem here.