FV3 Bundle
FGMRES.h File Reference

FGMRES solver for Ax=b. More...

#include <cmath>
#include <iostream>
#include <vector>
#include "oops/assimilation/rotmat.h"
#include "oops/assimilation/UpTriSolve.h"
#include "oops/util/dot_product.h"
#include "oops/util/formats.h"
#include "oops/util/Logger.h"
Include dependency graph for FGMRES.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

 oops
 The namespace for the main oops code.
 

Functions

template<typename VECTOR , typename AMATRIX , typename PMATRIX >
double oops::FGMRES (VECTOR &x, const VECTOR &b, const AMATRIX &A, const PMATRIX &precond, const int maxiter, const double tolerance)
 

Detailed Description

FGMRES solver for Ax=b.

Flexible GMRES solver for Ax=b.(based on implementation following Youcef Saad,SIAM Journal on Scientific Computing, Volume 14 Issue 2, March 1993)

A must be square, but need not be symmetric. A preconditioner must be supplied that, given a vector q, returns an approximate solution of Ap=q.

On entry:

  • x = starting point, \( X_0 \).
  • b = right hand side.
  • A = \( A \).
  • precond = preconditioner \( F_k \approx (A)^{-1} \).
  • maxiter = maximum number of iterations
  • tol = error tolerance

On exit, x will contain the solution. The return value is the achieved reduction in residual norm.

Iteration will stop if the maximum iteration limit "maxiter" is reached or if the residual norm reduces by a factor of "tolerance".

VECTOR must implement:

  • dot_product
  • operator(=)
  • operator(+=),
  • operator(-=)
  • operator(*=) [double * VECTOR],
  • axpy

AMATRIX and PMATRIX must implement a method:

  • void multiply(const VECTOR&, VECTOR&) const

which applies the matrix to the first argument, and returns the matrix-vector product in the second. (Note: the const is optional, but recommended.)

Definition in file FGMRES.h.