FV3 Bundle
PLanczos.h File Reference

Preconditioned Lanczos solver. More...

#include <cmath>
#include <vector>
#include "oops/assimilation/TriDiagSolve.h"
#include "oops/util/dot_product.h"
#include "oops/util/formats.h"
#include "oops/util/Logger.h"
Include dependency graph for PLanczos.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::PLanczos (VECTOR &xx, const VECTOR &bb, const AMATRIX &A, const PMATRIX &precond, const int maxiter, const double tolerance)
 

Detailed Description

Preconditioned Lanczos solver.

This algorihtm is based on the standard Preconditioned Lanczos method for solving the linear system Ax = b

A must be square and symmetric.

On entry:

  • x = starting point, \( x_0 \).
  • b = right hand side.
  • A = \( A \).
  • precond = preconditioner \( P_k \).

On exit, x will contain the solution \( x \)

The return value is the achieved reduction in preconditioned 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

Each of 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 PLanczos.h.