# SNESNGMRES
The Nonlinear Generalized Minimum Residual method. 


## Options Database Keys

- ***-snes_ngmres_select_type<difference,none,linesearch> -*** choose the select between candidate and combined solution
- ***-snes_ngmres_restart_type<difference,none,periodic> -*** choose the restart conditions
- ***-snes_ngmres_candidate        -*** Use `SNESNGMRES` variant which combines candidate solutions instead of actual solutions
- ***-snes_ngmres_m                -*** Number of stored previous solutions and residuals
- ***-snes_ngmres_restart_it       -*** Number of iterations the restart conditions hold before restart
- ***-snes_ngmres_gammaA           -*** Residual tolerance for solution select between the candidate and combination
- ***-snes_ngmres_gammaC           -*** Residual tolerance for restart
- ***-snes_ngmres_epsilonB         -*** Difference tolerance between subsequent solutions triggering restart
- ***-snes_ngmres_deltaB           -*** Difference tolerance between residuals triggering restart
- ***-snes_ngmres_restart_fm_rise  -*** Restart on residual rise from x_M step
- ***-snes_ngmres_monitor          -*** Prints relevant information about the ngmres iteration
- ***-snes_linesearch_type <basic,l2,cp> -*** Line search type used for the default smoother
- ***-additive_snes_linesearch_type -*** linesearch type used to select between the candidate and combined solution with additive select type



## Notes
The N-GMRES method combines m previous solutions into a minimum-residual solution by solving a small linearized
optimization problem at each iteration.

Very similar to the `SNESANDERSON` algorithm.


## References

- **** -*** C. W. Oosterlee and T. Washio, "Krylov Subspace Acceleration of Nonlinear Multigrid with Application to Recirculating Flows",
SIAM Journal on Scientific Computing, 21(5), 2000.
- **** -*** Peter R. Brune, Matthew G. Knepley, Barry F. Smith, and Xuemin Tu, "Composing Scalable Nonlinear Algebraic Solvers",
SIAM Review, 57(4), 2015



## See Also
 `SNESCreate()`, `SNES`, `SNESSetType()`, `SNESType`, `SNESANDERSON`, `SNESNGMRESSetSelectType()`, `SNESNGMRESSetRestartType()`,
`SNESNGMRESSetRestartFmRise()`

## Level
beginner

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/impls/ngmres/snesngmres.c.html#SNESNGMRES">src/snes/impls/ngmres/snesngmres.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/snes/impls/ngmres/snesngmres.c)


[Index of all SNES routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
