15 #ifndef TBCI_SOLVER_DIAGPRECOND_H
16 #define TBCI_SOLVER_DIAGPRECOND_H
18 #include "tbci/solver/precond.h"
26 template <
typename T,
typename MatrixType = BdMatrix<T> >
44 const unsigned int rw = A.rows();
45 if (invDiag.size() != A.rows())
46 invDiag.resize(A.rows());
47 BCHK(invDiag.size() == 0,
VecErr,
"DiagPrecond::update: NULL ptr", 0,);
50 for (
unsigned int j = 0; j < rw; ++j)
51 EXPCHK(A.get(j,j) ==
T(0.0),
VecErr,
"DiagPrecond::update: Diagonal ZERO", j,);
53 for (
unsigned int i = 0;
i < rw; ++
i)
54 invDiag.set(
i) =
T(1.0) / A.get(
i,
i);
68 const unsigned long sz = invDiag.size();
71 do_vec_mul_vec<T> (sz, &tv.
setval(0), &invDiag.getcref(0));
Abstract base class for all Preconditioners.
T & setval(const unsigned long i) const
provides basic Vector functionality but arithmetic operators (+=, - , *, /...).
TVector< T > solve(const Vector< T > &v) const
#define BCHK(cond, exc, txt, ind, rtval)
TVector< T > transSolve(const Vector< T > &v) const
friend class SystemMatrix
DiagPreconditioner(const MatrixType &A)
#define EXPCHK(cond, exc, txt, ind, rtval)
unsigned int do_expcheck()
TVector< T > solve(TVector< T > tv) const
Temporary Base Class Idiom: Class TVector is used for temporary variables.
TVector< T > transSolve(TVector< T > tv) const
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > long int int char v
< find minimun of func on grid with resolution res
void update(const MatrixType &A)