Skip to content

Implicit solvers

Simon Byrne edited this page Jun 25, 2021 · 15 revisions

Some docs here: https://diffeq.sciml.ai/dev/features/linear_nonlinear/

nonlinear

initialization

  1. OrdinaryDiffEq.alg_cache
  • Val{true} implies it operates in-place
  1. Calls build_nlsolver, dispatching on AbstractNLSolverAlgorithm type: these are defined in DiffEqBase. e.g. NLNewton, which would call build_nlsolver.

    a. nf = nlsolve_f(f, alg), which extracts the implicit part if using a SplitFunction

    b. SciMLBase.islinear(f): this appears to only be true if f (or f.f1) is an AbstractDiffEqOperator that isconstant? If so, then it sets uf and jac_config to nothing, and calls linsolve(Val{:init},nf,u)

    c. build_uf: returns a SciMLBase.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?).

    c. build_J_W:

    - [`islinearfunction(f, alg)`]()
    

    Returns NLNewtonConstantCache object

Clone this wiki locally