7#ifndef TBCI_SOLVER_CG_H
8#define TBCI_SOLVER_CG_H
10#include "tbci/basics.h"
11#include "tbci/solver/precond.h"
44template < typename T, typename SysMatrix, typename SysVector >
49 unsigned int dim = A.rows();
50 SysVector
p(dim), z(dim), q(dim);
51 typename SysVector::value_type alpha, beta, rho, rho_1(0);
53 double normb =
b.fabs();
54 if (normb == 0.0) normb = 1.0;
else normb = 1.0 / normb;
59 if ((resid = r.fabs() * normb) <= tol)
67 for (
unsigned int i = 1;
i <= max_iter;
i++)
80 alpha = rho/
dot(
p,q);
85 if ((resid = r.fabs() * normb) <= tol)
111template < typename T, typename SysMatrix, typename SysVector>
116 unsigned int dim = A.rows();
117 SysVector
p(dim), z(dim), q(dim);
118 typename SysVector::value_type alpha, beta, rho, rho_1(0);
120 double normb =
b.fabs();
121 if (normb == 0.0) normb = 1;
else normb = 1 / normb;
123 SysVector r(
b - A*
x);
126 if ((resid = r.fabs() * normb) <= tol)
134 for (
unsigned int i = 1;
i <= max_iter;
i++)
152 if ((resid = r.fabs() * normb) <= tol)
const Vector< T > const Vector< T > const Vector< T > & p
const Vector< T > const Vector< T > & x
Vector< T > class NN friend int CG2(const BdMatrix< T > &, Vector< T > &, const Vector< T > &, const Preconditioner_Sig< T, BdMatrix< T > > &, unsigned int &, double &)
NAMESPACE_TBCI Vector< T > class NN friend int CG(const BdMatrix< T > &, Vector< T > &, const Vector< T > &, const Preconditioner_Sig< T, BdMatrix< T > > &, unsigned int &, double &)
The class BdMatrix is an implementation to store and do operations on sparse Matrices with a band str...
Abstract base class for all Preconditioners.
virtual TVector< T > solve(const Vector< T > &) const =0
cplx< T > dot(const cplx< T > &a, const cplx< T > &b)