Skip to main content
`Ctrl`+`K`

# KSPGMRES

Implements the Generalized Minimal Residual method [SS86] with restart for solving linear systems using `KSP`.

## Options Database Keys

- -ksp_gmres_restart restart - the number of Krylov directions to orthogonalize against

- -ksp_gmres_haptol tol - sets the tolerance for happy ending (exact convergence) of `KSPGMRES`

- -ksp_gmres_preallocate - preallocate all the Krylov search directions initially (otherwise groups of vectors are allocated as needed), see `KSPGMRESSetPreAllocateVectors()`

- -ksp_gmres_classicalgramschmidt - use classical (unmodified) Gram-Schmidt to orthogonalize against the Krylov space (fast) (the default)

- -ksp_gmres_modifiedgramschmidt - use modified Gram-Schmidt in the orthogonalization (more stable, but slower)

- -ksp_gmres_cgs_refinement_type (refine_never|refine_ifneeded|refine_always) - determine if iterative refinement is used to increase the stability of the classical Gram-Schmidt orthogonalization.

- -ksp_gmres_krylov_monitor - plot the Krylov space generated

## Notes

Left and right preconditioning are supported, but not symmetric preconditioning.

Using `KSPGMRESSetPreAllocateVectors()` or `-ksp_gmres_preallocate` can improve the efficiency of the orthogonalization step with certain vector implementations.

## References

[SS86]

Y. Saad and M. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM Journal on Scientific and Statistical Computing, 44:856–869, 1986.

## See Also

KSP: Linear System Solvers, `KSPCreate()`, `KSPSetType()`, `KSPType`, `KSP`, `KSPFGMRES`, `KSPLGMRES`, `KSPPGMRES`, `KSPAGMRES`, `KSPDGMRES`, `KSPPIPEFGMRES`, `KSPGMRESSetRestart()`, `KSPGMRESSetHapTol()`, `KSPGMRESSetPreAllocateVectors()`, `KSPGMRESSetOrthogonalization()`, `KSPGMRESGetOrthogonalization()`, `KSPGMRESClassicalGramSchmidtOrthogonalization()`, `KSPGMRESModifiedGramSchmidtOrthogonalization()`, `KSPGMRESCGSRefinementType`, `KSPGMRESSetCGSRefinementType()`, `KSPGMRESGetCGSRefinementType()`, `KSPGMRESMonitorKrylov()`, `KSPSetPCSide()`

## Level

beginner

## Location

src/ksp/ksp/impls/gmres/gmres.c

## Examples

src/ksp/ksp/tutorials/ex7f.F90
src/ksp/ksp/tutorials/ex8.c
src/tao/pde_constrained/tutorials/hyperbolic.c
src/ksp/ksp/tutorials/ex62.c
src/ksp/ksp/tutorials/ex7.c

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