-
Notifications
You must be signed in to change notification settings - Fork 9
Implicit solvers
Some docs here: https://diffeq.sciml.ai/dev/features/linear_nonlinear/
-
Val{true}
implies it operates in-place
-
Calls
build_nlsolver
, dispatching onAbstractNLSolverAlgorithm
type: these are defined in DiffEqBase. e.g.NLNewton
, which would callbuild_nlsolver
.a.
nf = nlsolve_f(f, alg)
, which extracts the implicit part if using aSplitFunction
b.
SciMLBase.islinear(f)
: this appears to only betrue
iff
(orf.f1
) is anAbstractDiffEqOperator
thatisconstant
?-
If so, then it sets
uf
andjac_config
tonothing
, and callslinsolve(Val{:init},nf,u)
. Otherwise... -
uf = build_uf(alg,nf,t,p,Val(true))
: returns aSciMLBase.UJacobianWrapper
, which captures the function, parameter and time, and can be called with just(dest, src)
args (to make it easier to use the AD tools I assume?). -
jac_config = build_jac_config(alg,nf,uf,du1,uprev,u,ztmp,dz)
: I think it allocates the cache for forming the Jacobian matrix?
c.
build_J_W
:-
islinearfunction(f, alg)
: "return the tuple(is_linear_wrt_odealg, islinearodefunction)
.": 2nd is true ifislinear(f)
, 1st if 2nd oralg isa SplitAlgorithms
andislinear(f.f1.f)
?
Returns a tuple
d.
nlcache = NLNewtonConstantCache
objecte. returns
NLSolver
object. -