SNESNRICHARDSON — PETSc 3.25.4 documentation

Skip to main content
`Ctrl`+`K`

# SNESNRICHARDSON

Richardson nonlinear solver that uses successive substitutions, also sometimes known as Picard iteration.

## Options Database Keys

- -snes_linesearch_type (none|basic|bt|secant|cp|nleqerr|bisection|shell) - Line search type, see `SNESLineSearchType`

- -snes_linesearch_damping damping - Damping for the line search.

## Notes

If no inner nonlinear preconditioner is provided then solves \(F(x) - b = 0\) using \(x^{n+1} = x^{n} - \lambda (F(x^n) - b)\), where \(\lambda\) is obtained with either `SNESLineSearchSetDamping()` or `-snes_linesearch_damping` if using the `basic` (or, equivalently, the `none`) line search type, or determined by an actual line search algorithm. If an inner nonlinear preconditioner is provided (either with `-npc_snes_type` or `SNESSetNPC()`), then the inner solver is called on the initial solution \(x^n\) and the nonlinear Richardson uses \( x^{n+1} = x^{n} + \lambda d^{n}\) where \(d^{n} = \hat{x}^{n} - x^{n}\) where \(\hat{x}^{n}\) is the solution returned from the inner solver.

The update, especially without inner nonlinear preconditioner, may be ill-scaled. If using the `basic` (or `none`) line search, one may have to scale the update with either `SNESLineSearchSetDamping()` or `-snes_linesearch_damping` as mentioned above.

This uses no derivative information provided with `SNESSetJacobian()` thus it will be much slower than Newton’s method obtained with `-snes_type newtonls`

Only supports left non-linear preconditioning.

## See Also

SNES: Nonlinear Solvers, `SNESCreate()`, `SNES`, `SNESSetType()`, `SNESNEWTONLS`, `SNESNEWTONTR`, `SNESNGMRES`, `SNESQN`, `SNESNCG`, `SNESLineSearchSetDamping()`, `SNESLineSearchType`

## Level

beginner

## Location

src/snes/impls/richardson/snesrichardson.c

Index of all SNES routines
Table of Contents for all manual pages
Index of all manual pages