11 #ifndef _H_PRECOND_HPP_
12 #define _H_PRECOND_HPP_
16 #include <boost/numeric/ublas/vector_expression.hpp>
20 namespace ublas = boost::numeric::ublas;
24 template <
class MATRIX =
int >
30 template<
class Vector>
31 void apply(
const Vector& b, Vector& x)
const
41 template<
class Matrix>
45 typedef typename Matrix::value_type value_type;
46 typedef typename Matrix::size_type size_type;
49 : diag(A.size1()), EPS(eps)
51 for (size_type i=0; i<A.size1(); ++i) {
52 if ( fabs( A(i,i) ) > EPS ) {
53 diag(i) = 1.0 / A(i,i);
60 template<
class Vector>
61 void apply(
const Vector& b, Vector& x)
const
63 x = element_prod( diag, b );
68 ublas::vector< value_type > diag;
73 template <
class Matrix>
75 make_DiagonalPreconditioner(
const Matrix & A,
const double eps = 1.0e-14)
93 template<
class Vector>
94 void apply(
const Vector& b, Vector& x)
const
106 template <
class Matrix>
108 make_CholeskyPreconditioner(
const Matrix & A)
129 template<
class Vector>
130 void apply(
const Vector& b, Vector& x)
const
142 template <
class Matrix>
144 make_IncompleteCholeskyPreconditioner(
const Matrix & A)
scales x with diagonal of a given matrix
Definition: precond.hpp:42
decomposes given matrix and solve L L^T x = b
Definition: precond.hpp:121
size_t cholesky_decompose(const MATRIX &A, TRIA &L)
decompose the symmetric positive definit matrix A into product L L^T.
Definition: cholesky.hpp:51
void cholesky_solve(const TRIA &L, VEC &x, ublas::lower)
solve system L L^T x = b inplace
Definition: cholesky.hpp:220
size_t incomplete_cholesky_decompose(MATRIX &A)
decompose the symmetric positive definit matrix A into product L L^T.
Definition: cholesky.hpp:172
Do-nothing preconditioner.
Definition: precond.hpp:25
decomposes given matrix and solve L L^T x = b
Definition: precond.hpp:85