Classes | |
class | ExcDecompositionNotStable |
class | ExcInvalidStrengthening |
class | ExcStrengthenDiagonalTooSmall |
Public Types | |
typedef SparseLUDecomposition < number >::AdditionalData | AdditionalData |
Public Member Functions | |
SparseMIC () | |
SparseMIC (const SparsityPattern &sparsity) | |
virtual | ~SparseMIC () |
virtual void | clear () |
void | reinit (const SparsityPattern &sparsity) |
template<typename somenumber > | |
void | initialize (const SparseMatrix< somenumber > &matrix, const AdditionalData parameters) |
template<typename somenumber > | |
void | decompose (const SparseMatrix< somenumber > &matrix, const double strengthen_diagonal=0.) |
template<typename somenumber > | |
void | vmult (Vector< somenumber > &dst, const Vector< somenumber > &src) const |
unsigned int | memory_consumption () const |
Private Member Functions | |
number | get_rowsum (const unsigned int row) const |
Private Attributes | |
std::vector< number > | diag |
std::vector< number > | inv_diag |
std::vector< number > | inner_sums |
Modified incomplete Cholesky (MIC(0)) preconditioner. This class conforms to the state and usage specification in SparseLUDecomposition.
Let a sparse matrix A is in the form A = - L - U + D, where -L and -U are strictly lower and upper triangular matrices. The MIC(0) decomposition of the matrix A is defined by B = (X-L)X^(-1)(X-U), where X is a diagonal matrix, defined by the condition rowsum(A) = rowsum(B).
typedef SparseLUDecomposition<number>::AdditionalData SparseMIC< number >::AdditionalData |
Make the AdditionalData
type in the base class accessible to this class as well.
Constructor. Does nothing, so you have to call reinit
sometimes afterwards.
SparseMIC< number >::SparseMIC | ( | const SparsityPattern & | sparsity | ) |
Constructor. Initialize the sparsity pattern of this object with the given argument.
virtual void SparseMIC< number >::clear | ( | ) | [virtual] |
Deletes all member variables. Leaves the class in the state that it had directly after calling the constructor
Reimplemented from SparseLUDecomposition< number >.
void SparseMIC< number >::reinit | ( | const SparsityPattern & | sparsity | ) | [virtual] |
This method is deprecated, and left for backward compability. It will be removed in later versions.
Reimplemented from SparseLUDecomposition< number >.
void SparseMIC< number >::initialize | ( | const SparseMatrix< somenumber > & | matrix, | |
const AdditionalData | parameters | |||
) | [inline] |
Same as decompose
.
Reimplemented from SparseLUDecomposition< number >.
void SparseMIC< number >::decompose | ( | const SparseMatrix< somenumber > & | matrix, | |
const double | strengthen_diagonal = 0. | |||
) | [inline] |
This method is deprecated, and left for backward compability. It will be removed in later versions.
Reimplemented from SparseLUDecomposition< number >.
void SparseMIC< number >::vmult | ( | Vector< somenumber > & | dst, | |
const Vector< somenumber > & | src | |||
) | const [inline] |
Apply the incomplete decomposition, i.e. do one forward-backward step .
Call initialize
before calling this function.
Determine an estimate for the memory consumption (in bytes) of this object.
Reimplemented from SparseLUDecomposition< number >.
number SparseMIC< number >::get_rowsum | ( | const unsigned int | row | ) | const [private] |
Compute the row-th "inner sum".
Values of the computed diagonal.
Inverses of the the diagonal: precomputed for faster vmult.
std::vector<number> SparseMIC< number >::inner_sums [private] |
Values of the computed "inner sums", i.e. per-row sums of the elements laying on the right side of the diagonal.