![]() |
Reference documentation for deal.II version 8.4.2
|
#include <deal.II/lac/sparse_mic.h>
Public Types | |
| typedef types::global_dof_index | size_type |
| typedef SparseLUDecomposition< number >::AdditionalData | AdditionalData |
Public Types inherited from SparseLUDecomposition< number > | |
| typedef SparseMatrix< number >::size_type | size_type |
Public Member Functions | |
| SparseMIC () | |
| virtual | ~SparseMIC () |
| virtual void | clear () |
| template<typename somenumber > | |
| void | initialize (const SparseMatrix< somenumber > &matrix, const AdditionalData ¶meters=AdditionalData()) |
| 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 |
| DeclException0 (ExcStrengthenDiagonalTooSmall) | |
| DeclException1 (ExcInvalidStrengthening, double,<< "The strengthening parameter "<< arg1<< " is not greater or equal than zero!") | |
| DeclException2 (ExcDecompositionNotStable, int, double,<< "The diagonal element ("<< arg1<<","<< arg1<<") is "<< arg2<<", but must be positive") | |
Public Member Functions inherited from SparseLUDecomposition< number > | |
| virtual | ~SparseLUDecomposition ()=0 |
| template<typename somenumber > | |
| void | initialize (const SparseMatrix< somenumber > &matrix, const AdditionalData parameters) |
| bool | empty () const |
| size_type | m () const |
| size_type | n () const |
| template<class OutVector , class InVector > | |
| void | vmult_add (OutVector &dst, const InVector &src) const |
| template<class OutVector , class InVector > | |
| void | Tvmult_add (OutVector &dst, const InVector &src) const |
| DeclException1 (ExcInvalidStrengthening, double,<< "The strengthening parameter "<< arg1<< " is not greater or equal than zero!") | |
Public Member Functions inherited from Subscriptor | |
| Subscriptor () | |
| Subscriptor (const Subscriptor &) | |
| virtual | ~Subscriptor () |
| Subscriptor & | operator= (const Subscriptor &) |
| void | subscribe (const char *identifier=0) const |
| void | unsubscribe (const char *identifier=0) const |
| unsigned int | n_subscriptions () const |
| void | list_subscribers () const |
| DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects."<< "\"<< "(Additional information: "<< arg3<< ")\"<< "See the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "a lot more information on what this error means and "<< "how to fix programs in which it happens.") | |
| DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier <"<< arg2<< "> subscribes to this object of class "<< arg1<< ". Consequently, it cannot be unsubscribed.") | |
| template<class Archive > | |
| void | serialize (Archive &ar, const unsigned int version) |
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 |
Additional Inherited Members | |
Protected Types inherited from SparseMatrix< number > | |
| typedef types::global_dof_index | size_type |
| typedef number | value_type |
| typedef numbers::NumberTraits< number >::real_type | real_type |
| typedef SparseMatrixIterators::Iterator< number, true > | const_iterator |
| typedef SparseMatrixIterators::Iterator< number, false > | iterator |
Protected Member Functions inherited from SparseLUDecomposition< number > | |
| SparseLUDecomposition () | |
| template<typename somenumber > | |
| void | copy_from (const SparseMatrix< somenumber > &matrix) |
| virtual void | strengthen_diagonal_impl () |
| virtual number | get_strengthen_diagonal (const number rowsum, const size_type row) const |
| void | prebuild_lower_bound () |
Protected Member Functions inherited from SparseMatrix< number > | |
| void | prepare_add () |
| void | prepare_set () |
| DeclException2 (ExcInvalidIndex, int, int,<< "You are trying to access the matrix entry with index <"<< arg1<< ','<< arg2<< ">, but this entry does not exist in the sparsity pattern " "of this matrix." "\" "The most common cause for this problem is that you used " "a method to build the sparsity pattern that did not " "(completely) take into account all of the entries you " "will later try to write into. An example would be " "building a sparsity pattern that does not include " "the entries you will write into due to constraints " "on degrees of freedom such as hanging nodes or periodic " "boundary conditions. In such cases, building the " "sparsity pattern will succeed, but you will get errors " "such as the current one at one point or other when " "trying to write into the entries of the matrix.") | |
| DeclExceptionMsg (ExcDifferentSparsityPatterns, "When copying one sparse matrix into another, " "or when adding one sparse matrix to another, " "both matrices need to refer to the same " "sparsity pattern.") | |
| DeclException2 (ExcIteratorRange, int, int,<< "The iterators denote a range of "<< arg1<< " elements, but the given number of rows was "<< arg2) | |
| DeclException0 (ExcSourceEqualsDestination) | |
| SparseMatrix () | |
| SparseMatrix (const SparseMatrix &) | |
| SparseMatrix (const SparsityPattern &sparsity) | |
| SparseMatrix (const SparsityPattern &sparsity, const IdentityMatrix &id) | |
| virtual | ~SparseMatrix () |
| SparseMatrix< number > & | operator= (const SparseMatrix< number > &) |
| SparseMatrix< number > & | operator= (const IdentityMatrix &id) |
| SparseMatrix & | operator= (const double d) |
| virtual void | reinit (const SparsityPattern &sparsity) |
| bool | empty () const |
| size_type | m () const |
| size_type | n () const |
| size_type | get_row_length (const size_type row) const |
| size_type | n_nonzero_elements () const |
| size_type | n_actually_nonzero_elements (const double threshold=0.) const |
| const SparsityPattern & | get_sparsity_pattern () const |
| std::size_t | memory_consumption () const |
| void | compress (::VectorOperation::values) |
| void | set (const size_type i, const size_type j, const number value) |
| template<typename number2 > | |
| void | set (const std::vector< size_type > &indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=false) |
| template<typename number2 > | |
| void | set (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=false) |
| template<typename number2 > | |
| void | set (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number2 > &values, const bool elide_zero_values=false) |
| template<typename number2 > | |
| void | set (const size_type row, const size_type n_cols, const size_type *col_indices, const number2 *values, const bool elide_zero_values=false) |
| void | add (const size_type i, const size_type j, const number value) |
| template<typename number2 > | |
| void | add (const std::vector< size_type > &indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=true) |
| template<typename number2 > | |
| void | add (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=true) |
| template<typename number2 > | |
| void | add (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number2 > &values, const bool elide_zero_values=true) |
| template<typename number2 > | |
| void | add (const size_type row, const size_type n_cols, const size_type *col_indices, const number2 *values, const bool elide_zero_values=true, const bool col_indices_are_sorted=false) |
| SparseMatrix & | operator*= (const number factor) |
| SparseMatrix & | operator/= (const number factor) |
| void | symmetrize () |
| template<typename somenumber > | |
| SparseMatrix< number > & | copy_from (const SparseMatrix< somenumber > &source) |
| template<typename ForwardIterator > | |
| void | copy_from (const ForwardIterator begin, const ForwardIterator end) |
| template<typename somenumber > | |
| void | copy_from (const FullMatrix< somenumber > &matrix) |
| SparseMatrix< number > & | copy_from (const TrilinosWrappers::SparseMatrix &matrix) |
| template<typename somenumber > | |
| void | add (const number factor, const SparseMatrix< somenumber > &matrix) |
| number | operator() (const size_type i, const size_type j) const |
| number | el (const size_type i, const size_type j) const |
| number | diag_element (const size_type i) const |
| number & | diag_element (const size_type i) |
| template<class OutVector , class InVector > | |
| void | vmult (OutVector &dst, const InVector &src) const |
| template<class OutVector , class InVector > | |
| void | Tvmult (OutVector &dst, const InVector &src) const |
| template<class OutVector , class InVector > | |
| void | vmult_add (OutVector &dst, const InVector &src) const |
| template<class OutVector , class InVector > | |
| void | Tvmult_add (OutVector &dst, const InVector &src) const |
| template<typename somenumber > | |
| somenumber | matrix_norm_square (const Vector< somenumber > &v) const |
| template<typename somenumber > | |
| somenumber | matrix_scalar_product (const Vector< somenumber > &u, const Vector< somenumber > &v) const |
| template<typename somenumber > | |
| somenumber | residual (Vector< somenumber > &dst, const Vector< somenumber > &x, const Vector< somenumber > &b) const |
| template<typename numberB , typename numberC > | |
| void | mmult (SparseMatrix< numberC > &C, const SparseMatrix< numberB > &B, const Vector< number > &V=Vector< number >(), const bool rebuild_sparsity_pattern=true) const |
| template<typename numberB , typename numberC > | |
| void | Tmmult (SparseMatrix< numberC > &C, const SparseMatrix< numberB > &B, const Vector< number > &V=Vector< number >(), const bool rebuild_sparsity_pattern=true) const |
| real_type | l1_norm () const |
| real_type | linfty_norm () const |
| real_type | frobenius_norm () const |
| template<typename somenumber > | |
| void | precondition_Jacobi (Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1.) const |
| template<typename somenumber > | |
| void | precondition_SSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1., const std::vector< std::size_t > &pos_right_of_diagonal=std::vector< std::size_t >()) const |
| template<typename somenumber > | |
| void | precondition_SOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const |
| template<typename somenumber > | |
| void | precondition_TSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const |
| template<typename somenumber > | |
| void | SSOR (Vector< somenumber > &v, const number omega=1.) const |
| template<typename somenumber > | |
| void | SOR (Vector< somenumber > &v, const number om=1.) const |
| template<typename somenumber > | |
| void | TSOR (Vector< somenumber > &v, const number om=1.) const |
| template<typename somenumber > | |
| void | PSOR (Vector< somenumber > &v, const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation, const number om=1.) const |
| template<typename somenumber > | |
| void | TPSOR (Vector< somenumber > &v, const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation, const number om=1.) const |
| template<typename somenumber > | |
| void | Jacobi_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
| template<typename somenumber > | |
| void | SOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
| template<typename somenumber > | |
| void | TSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
| template<typename somenumber > | |
| void | SSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
| const_iterator | begin () const |
| iterator | begin () |
| const_iterator | end () const |
| iterator | end () |
| const_iterator | begin (const size_type r) const |
| iterator | begin (const size_type r) |
| const_iterator | end (const size_type r) const |
| iterator | end (const size_type r) |
| template<class StreamType > | |
| void | print (StreamType &out, const bool across=false, const bool diagonal_first=true) const |
| void | print_formatted (std::ostream &out, const unsigned int precision=3, const bool scientific=true, const unsigned int width=0, const char *zero_string=" ", const double denominator=1.) const |
| void | print_pattern (std::ostream &out, const double threshold=0.) const |
| void | block_write (std::ostream &out) const |
| void | block_read (std::istream &in) |
Protected Member Functions inherited from Subscriptor | |
| Subscriptor () | |
| Subscriptor (const Subscriptor &) | |
| virtual | ~Subscriptor () |
| Subscriptor & | operator= (const Subscriptor &) |
| void | subscribe (const char *identifier=0) const |
| void | unsubscribe (const char *identifier=0) const |
| unsigned int | n_subscriptions () const |
| void | list_subscribers () const |
| DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects."<< "\"<< "(Additional information: "<< arg3<< ")\"<< "See the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "a lot more information on what this error means and "<< "how to fix programs in which it happens.") | |
| DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier <"<< arg2<< "> subscribes to this object of class "<< arg1<< ". Consequently, it cannot be unsubscribed.") | |
| template<class Archive > | |
| void | serialize (Archive &ar, const unsigned int version) |
Protected Attributes inherited from SparseLUDecomposition< number > | |
| double | strengthen_diagonal |
| std::vector< const size_type * > | prebuilt_lower_bound |
Implementation of the Modified Incomplete Cholesky (MIC(0)) preconditioner for symmetric matrices. This class conforms to the state and usage specification in SparseLUDecomposition.
Let a symmetric, positive-definite, sparse matrix
be in the form
, where
is the diagonal part of
and
is a strictly lower triangular matrix. The MIC(0) decomposition of the matrix
is defined by
, where
is a diagonal matrix defined by the condition
.
Definition at line 47 of file sparse_mic.h.
| typedef types::global_dof_index SparseMIC< number >::size_type |
Declare type for container size.
Definition at line 53 of file sparse_mic.h.
| typedef SparseLUDecomposition<number>::AdditionalData SparseMIC< number >::AdditionalData |
Make the AdditionalData type in the base class accessible to this class as well.
Definition at line 78 of file sparse_mic.h.
Constructor. Does nothing, so you have to call decompose sometimes afterwards.
|
virtual |
Deletes all member variables. Leaves the class in the state that it had directly after calling the constructor
Reimplemented from SparseLUDecomposition< number >.
| template void SparseMIC< number >::initialize< float > | ( | const SparseMatrix< somenumber > & | matrix, |
| const AdditionalData & | parameters = AdditionalData() |
||
| ) |
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.
| 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
.
Call initialize before calling this function.
| 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
.
Call initialize before calling this function.
|
virtual |
Determine an estimate for the memory consumption (in bytes) of this object.
Reimplemented from SparseLUDecomposition< number >.
|
private |
Compute the row-th "inner sum".
|
private |
Values of the computed diagonal.
Definition at line 158 of file sparse_mic.h.
|
private |
Inverses of the the diagonal: precomputed for faster vmult.
Definition at line 163 of file sparse_mic.h.
|
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.
1.8.12