47 #ifndef MUI_PRECONDITIONER_IC_H_
48 #define MUI_PRECONDITIONER_IC_H_
57 template<
typename ITYPE,
typename VTYPE>
62 for (ITYPE i = 0; i < A.
get_rows(); ++i) {
63 for (ITYPE j = 0; j <= i; ++j) {
66 for (ITYPE k = 0; k < j; ++k) {
67 sum += std::pow(L_.get_value(j, k), 2);
69 L_.set_value(j, j, (std::sqrt(A.
get_value(j, j) -
sum)));
72 for (ITYPE k = 0; k < j; ++k) {
73 sum += L_.get_value(i, k) * L_.get_value(j, k);
76 "MUI Error [preconditioner_ic.h]: Divide by zero assert for L_.get_value(j, j)");
77 L_.set_value(i, j, ((A.
get_value(i, j) -
sum) / L_.get_value(j, j)));
84 template<
typename ITYPE,
typename VTYPE>
91 template<
typename ITYPE,
typename VTYPE>
94 "MUI Error [preconditioner_ic.h]: apply only works for column vectors");
99 for (ITYPE i = 0; i < x.
get_rows(); ++i) {
101 for (ITYPE j = 0; j < i; ++j) {
105 "MUI Error [preconditioner_ic.h]: Divide by zero assert for L_.get_value(i, i)");
110 for (ITYPE i = x.
get_rows() - 1; i >= 0; --i) {
112 for (ITYPE j = i + 1; j < x.
get_rows(); ++j) {
116 "MUI Error [preconditioner_ic.h]: Divide by zero assert for L_.get_value(i, i)");
~incomplete_cholesky_preconditioner()
Definition: preconditioner_ic.h:85
incomplete_cholesky_preconditioner(const sparse_matrix< ITYPE, VTYPE > &)
Definition: preconditioner_ic.h:58
sparse_matrix< ITYPE, VTYPE > apply(const sparse_matrix< ITYPE, VTYPE > &)
Definition: preconditioner_ic.h:92
ITYPE get_rows() const
Definition: matrix_io_info.h:579
void set_value(ITYPE, ITYPE, VTYPE, bool=true)
Definition: matrix_manipulation.h:292
VTYPE get_value(ITYPE, ITYPE) const
Definition: matrix_io_info.h:523
ITYPE get_cols() const
Definition: matrix_io_info.h:585
u u u u u u min
Definition: dim.h:289
SCALAR sum(vexpr< E, SCALAR, D > const &u)
Definition: point.h:362