deal.II version 9.7.1
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches

#include <deal.II/lac/sparse_mic.h>

Detailed Description

template<typename number>
class SparseMIC< number >

Implementation of the Modified Incomplete Cholesky (MIC(0)) preconditioner for symmetric matrices. This class conforms to the state and usage specification in SparseLUDecomposition.

The decomposition

Let a symmetric, positive-definite, sparse matrix $A$ be in the form $A = D
- L - L^T$, where $D$ is the diagonal part of $A$ and $-L$ is a strictly lower triangular matrix. The MIC(0) decomposition of the matrix $A$ is defined by $B = (X-L)X^{-1}(X-L^T)$, where $X$ is a diagonal matrix defined by the condition $\text{rowsum}(A) = \text{rowsum}(B)$.

Definition at line 45 of file sparse_mic.h.

Inheritance diagram for SparseMIC< number >:

Public Types

using size_type = types::global_dof_index
using AdditionalData = typename SparseLUDecomposition<number>::AdditionalData

Public Member Functions

 SparseMIC ()=default
virtual ~SparseMIC () override
virtual void clear () override
template<typename somenumber>
void initialize (const SparseMatrix< somenumber > &matrix, const AdditionalDataAdditionalData &parameters=AdditionalDataAdditionalData())
template<typename somenumber>
void vmult (Vector< somenumber > &dst, const Vector< somenumber > &src) const
template<typename somenumber>
void Tvmult (Vector< somenumber > &dst, const Vector< somenumber > &src) const
std::size_t memory_consumption () const override

Static Public Member Functions

static ::ExceptionBaseExcStrengthenDiagonalTooSmall ()
static ::ExceptionBaseExcInvalidStrengthening (double arg1)
static ::ExceptionBaseExcDecompositionNotStable (int arg1, double arg2)

Private Member Functions

number get_rowsum (const size_type row) const

Private Attributes

std::vector< number > diag
std::vector< number > inv_diag
std::vector< number > inner_sums

Member Typedef Documentation

◆ size_type

template<typename number>
using SparseMIC< number >::size_type = types::global_dof_index

Declare type for container size.

Definition at line 51 of file sparse_mic.h.

◆ AdditionalData

template<typename number>
using SparseMIC< number >::AdditionalData = typename SparseLUDecomposition<number>::AdditionalData

Make the AdditionalData type in the base class accessible to this class as well.

Definition at line 75 of file sparse_mic.h.

Constructor & Destructor Documentation

◆ SparseMIC()

template<typename number>
SparseMIC< number >::SparseMIC ( )
default

Constructor. Does nothing, so you have to call decompose sometimes afterwards.

◆ ~SparseMIC()

template<typename number>
virtual SparseMIC< number >::~SparseMIC ( )
overridevirtual

Destructor.

Member Function Documentation

◆ clear()

template<typename number>
virtual void SparseMIC< number >::clear ( )
overridevirtual

Deletes all member variables. Leaves the class in the state that it had directly after calling the constructor

◆ initialize()

template<typename number>
template<typename somenumber>
template void SparseMIC< number >::initialize< float > ( const SparseMatrix< somenumber > & matrix,
const AdditionalDataAdditionalData & parameters = AdditionalDataAdditionalData() )

Perform the incomplete LU factorization of the given matrix.

This function needs to be called before an object of this class is used as preconditioner.

For more details about possible parameters, see the class documentation of SparseLUDecomposition and the documentation of the SparseLUDecomposition::AdditionalData class.

According to the parameters, this function creates a new SparsityPattern or keeps the previous sparsity or takes the sparsity given by the user to data. Then, this function performs the MIC decomposition.

After this function is called the preconditioner is ready to be used.

◆ vmult()

template<typename number>
template<typename somenumber>
template void SparseMIC< number >::vmult< float > ( Vector< somenumber > & dst,
const Vector< somenumber > & src ) const

Apply the incomplete decomposition, i.e. do one forward-backward step $dst=(LU)^{-1}src$.

Call initialize before calling this function.

◆ Tvmult()

template<typename number>
template<typename somenumber>
template void SparseMIC< number >::Tvmult< float > ( Vector< somenumber > & dst,
const Vector< somenumber > & src ) const

Apply the transpose of the incomplete decomposition, i.e. do one forward-backward step $dst=(LU)^{-1}src$.

Call initialize before calling this function.

Note
This function has not yet been implemented

◆ memory_consumption()

template<typename number>
std::size_t SparseMIC< number >::memory_consumption ( ) const
override

Determine an estimate for the memory consumption (in bytes) of this object.

◆ get_rowsum()

template<typename number>
number SparseMIC< number >::get_rowsum ( const size_type row) const
private

Compute the row-th "inner sum".

Member Data Documentation

◆ diag

template<typename number>
std::vector<number> SparseMIC< number >::diag
private

Values of the computed diagonal.

Definition at line 158 of file sparse_mic.h.

◆ inv_diag

template<typename number>
std::vector<number> SparseMIC< number >::inv_diag
private

Inverses of the diagonal: precomputed for faster vmult.

Definition at line 163 of file sparse_mic.h.

◆ inner_sums

template<typename number>
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.

Definition at line 169 of file sparse_mic.h.


The documentation for this class was generated from the following files: