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"
46template <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 > const Vector< T > & p
const Vector< T > const Vector< T > & x
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 &)
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
virtual TVector< T > transSolve(const Vector< T > &) const =0
cplx< T > sqr(const cplx< T > &c)
NAMESPACE_END NAMESPACE_CPLX TBCI__ cplx< T > conj(const TBCI__ cplx< T > &c)
NAMESPACE_END NAMESPACE_CSTD TBCI__ cplx< T > sqrt(const TBCI__ cplx< T > &z)