FV3 Bundle
oops::RPCGMinimizer< MODEL > Class Template Reference

RPCG Minimizer. More...

#include <RPCGMinimizer.h>

Inheritance diagram for oops::RPCGMinimizer< MODEL >:
[legend]
Collaboration diagram for oops::RPCGMinimizer< MODEL >:
[legend]

Public Member Functions

const std::string classname () const override
 
 RPCGMinimizer (const eckit::Configuration &, const CostFct_ &J)
 
 ~RPCGMinimizer ()
 
- Public Member Functions inherited from oops::DualMinimizer< MODEL >
 DualMinimizer (const CostFct_ &J)
 
 ~DualMinimizer ()
 
- Public Member Functions inherited from oops::Minimizer< MODEL >
 Minimizer (const CostFct_ &J)
 
virtual ~Minimizer ()
 
ControlIncrement< MODEL > * minimize (const eckit::Configuration &)
 

Private Types

typedef CostFunction< MODEL > CostFct_
 
typedef DualVector< MODEL > Dual_
 
typedef HBHtMatrix< MODEL > HBHt_
 
typedef RinvMatrix< MODEL > Rinv_
 

Private Member Functions

double solve (Dual_ &, double &, Dual_ &, const HBHt_ &, const Rinv_ &, const int &, const double &, Dual_ &, const double &) override
 

Detailed Description

template<typename MODEL>
class oops::RPCGMinimizer< MODEL >

RPCG Minimizer.

Augmented Restricted Preconditioned Conjugate Gradients.

This solver is based on the algorithm proposed in Gratton and Tshimanga, QJRMS, 135: 1573-1585 (2009). It performs minimization in observation space.

It solves the linear system \( (I + R^{-1}HBH^T) lambda = H^T R^{-1}d \) with \( HBH^T \) inner-product in the augmented observation space.

Note that the traditional \( B\)-preconditioning in model space corresponds to \(I\) for this algorithm.

A second-level preconditioner, \( G \), must be symmetric and positive definite with respect to \( HBH^T \) inner-product. Possible preconditioning is detailed in S. Gurol, PhD Manuscript, 2013.

On entry:

  • vv = starting point, \( v_0 \).
  • vvp = starting point augmented part, \( vp_0 \)
  • rr = right hand side.
  • dy = \( H (xb - xk) \)
  • sigma = \( (xb - xk)^T B^{-1} (xb - xk)\).
  • HBHt = \( HBH^T \).
  • Rinv = \( R^{-1} \).
  • G = preconditioner \( G \).
  • Gt = preconditioner transpose \( G^T \).

On exit, vv and vvp will contain the solution \( lambda = [vv; vp] \)

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 preconditioned residual norm reduces by a factor of "tolerance".

Definition at line 67 of file RPCGMinimizer.h.

Member Typedef Documentation

◆ CostFct_

template<typename MODEL >
typedef CostFunction<MODEL> oops::RPCGMinimizer< MODEL >::CostFct_
private

Definition at line 68 of file RPCGMinimizer.h.

◆ Dual_

template<typename MODEL >
typedef DualVector<MODEL> oops::RPCGMinimizer< MODEL >::Dual_
private

Definition at line 69 of file RPCGMinimizer.h.

◆ HBHt_

template<typename MODEL >
typedef HBHtMatrix<MODEL> oops::RPCGMinimizer< MODEL >::HBHt_
private

Definition at line 70 of file RPCGMinimizer.h.

◆ Rinv_

template<typename MODEL >
typedef RinvMatrix<MODEL> oops::RPCGMinimizer< MODEL >::Rinv_
private

Definition at line 71 of file RPCGMinimizer.h.

Constructor & Destructor Documentation

◆ RPCGMinimizer()

template<typename MODEL >
oops::RPCGMinimizer< MODEL >::RPCGMinimizer ( const eckit::Configuration &  ,
const CostFct_ J 
)
inline

Definition at line 75 of file RPCGMinimizer.h.

◆ ~RPCGMinimizer()

template<typename MODEL >
oops::RPCGMinimizer< MODEL >::~RPCGMinimizer ( )
inline

Definition at line 76 of file RPCGMinimizer.h.

Member Function Documentation

◆ classname()

template<typename MODEL >
const std::string oops::RPCGMinimizer< MODEL >::classname ( ) const
inlineoverridevirtual

Implements oops::DualMinimizer< MODEL >.

Definition at line 74 of file RPCGMinimizer.h.

◆ solve()

template<typename MODEL >
double oops::RPCGMinimizer< MODEL >::solve ( Dual_ vv,
double &  vvp,
Dual_ rr,
const HBHt_ HBHt,
const Rinv_ Rinv,
const int &  maxiter,
const double &  tolerance,
Dual_ dy,
const double &  sigma 
)
overrideprivatevirtual

Implements oops::DualMinimizer< MODEL >.

Definition at line 86 of file RPCGMinimizer.h.

Here is the call graph for this function:

The documentation for this class was generated from the following file: