OOPS
PLanczosMinimizer.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation nor
8  * does it submit to any jurisdiction.
9  */
10 
11 #ifndef OOPS_ASSIMILATION_PLANCZOSMINIMIZER_H_
12 #define OOPS_ASSIMILATION_PLANCZOSMINIMIZER_H_
13 
14 #include <string>
15 
22 
23 namespace oops {
24 
25 /// PLanczos Minimizer
26 /*!
27  * Implements the standard Preconditioned Lanczos algorithm for linear systems.
28  */
29 
30 // -----------------------------------------------------------------------------
31 
32 template<typename MODEL, typename OBS> class PLanczosMinimizer
33  : public PrimalMinimizer<MODEL, OBS> {
38 
39  public:
40  const std::string classname() const override {return "PLanczosMinimizer";}
41  PLanczosMinimizer(const eckit::Configuration &, const CostFct_ & J)
42  : PrimalMinimizer<MODEL, OBS>(J) {}
44 
45  private:
46  double solve(CtrlInc_ &, const CtrlInc_ &,
47  const Hessian_ &, const Bmat_ &,
48  const int, const double) override;
49 };
50 
51 // =============================================================================
52 
53 template<typename MODEL, typename OBS>
55  const Hessian_ & hessian, const Bmat_ & B,
56  const int ninner, const double gnreduc) {
57 // Solve the linear system
58  double reduc = PLanczos(dx, rhs, hessian, B, ninner, gnreduc);
59  return reduc;
60 }
61 
62 // -----------------------------------------------------------------------------
63 
64 } // namespace oops
65 
66 #endif // OOPS_ASSIMILATION_PLANCZOSMINIMIZER_H_
oops::PLanczosMinimizer
PLanczos Minimizer.
Definition: PLanczosMinimizer.h:33
oops::PrimalMinimizer
Primal Minimizer.
Definition: PrimalMinimizer.h:33
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::PLanczos
double PLanczos(VECTOR &xx, const VECTOR &bb, const AMATRIX &A, const PMATRIX &precond, const int maxiter, const double tolerance)
Definition: PLanczos.h:62
HessianMatrix.h
CostFunction.h
PLanczos.h
Preconditioned Lanczos solver.
PrimalMinimizer.h
oops::PLanczosMinimizer::Hessian_
HessianMatrix< MODEL, OBS > Hessian_
Definition: PLanczosMinimizer.h:37
oops::ControlIncrement
Definition: ControlIncrement.h:46
oops::PLanczosMinimizer::CostFct_
CostFunction< MODEL, OBS > CostFct_
Definition: PLanczosMinimizer.h:35
oops::PLanczosMinimizer::classname
const std::string classname() const override
Definition: PLanczosMinimizer.h:40
oops::HessianMatrix
The Hessian matrix: .
Definition: HessianMatrix.h:31
BMatrix.h
oops::PLanczosMinimizer::solve
double solve(CtrlInc_ &, const CtrlInc_ &, const Hessian_ &, const Bmat_ &, const int, const double) override
Definition: PLanczosMinimizer.h:54
oops::PLanczosMinimizer::Bmat_
BMatrix< MODEL, OBS > Bmat_
Definition: PLanczosMinimizer.h:34
ControlIncrement.h
oops::PLanczosMinimizer::~PLanczosMinimizer
~PLanczosMinimizer()
Definition: PLanczosMinimizer.h:43
oops::PLanczosMinimizer::PLanczosMinimizer
PLanczosMinimizer(const eckit::Configuration &, const CostFct_ &J)
Definition: PLanczosMinimizer.h:41
oops::BMatrix
The matrix.
Definition: BMatrix.h:27
oops::CostFunction
Cost Function.
Definition: CostFunction.h:53
oops::PLanczosMinimizer::CtrlInc_
ControlIncrement< MODEL, OBS > CtrlInc_
Definition: PLanczosMinimizer.h:36