6 #ifndef TBCI_SOLVER_BICG_H
7 #define TBCI_SOLVER_BICG_H
9 #include "tbci/basics.h"
11 #if !defined(NO_GD) && !defined(AUTO_DECL)
12 # include "tbci/solver/bicg_gd.h"
46 template <typename T, typename SysMatrix, typename SysVector>
50 unsigned int dim = A.rows();
51 typename SysVector::value_type rho_1, rho_2(0), alpha, beta;
52 SysVector
z(dim), ztilde(dim),
p(dim), ptilde(dim), q(dim), qtilde(dim);
55 const double tolsqr =
sqr(tol);
56 double normbsqr = b.fabssqr();
61 normbsqr = 1.0 / normbsqr;
63 SysVector r(b - A * x);
64 SysVector rtilde(
conj(r));
66 if ((residsqr = r.fabssqr() * normbsqr) <= tolsqr) {
72 for (
unsigned int i = 1;
i <= max_iter; ++
i) {
76 if (rho_1 == (
typename SysVector::value_type)0) {
87 ptilde = ztilde + beta * ptilde;
91 qtilde = A.transMult(ptilde);
92 alpha = rho_1 / (q * ptilde);
95 rtilde -= alpha * qtilde;
98 if ((residsqr = r.fabssqr() * normbsqr) < tolsqr) {
const Vector< T > const Vector< T > & x
Abstract base class for all Preconditioners.
const Vector< T > const Vector< T > const Vector< T > & p
The class BdMatrix is an implementation to store and do operations on sparse Matrices with a band str...
virtual TVector< T > transSolve(const Vector< T > &) const =0
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > & z
cplx< T > sqr(const cplx< T > &c)
int conj(const int arg)
conj for elementary types
virtual TVector< T > solve(const Vector< T > &) const =0
NAMESPACE_TBCI Vector< T > class NN friend int BiCG(const BdMatrix< T > &, Vector< T > &, const Vector< T > &, const Preconditioner_Sig< T, BdMatrix< T > > &, unsigned int &, double &)