
Public Types | |
| typedef MATRIX::value_type | number |
Public Member Functions | |
| PreconditionBlockSOR () | |
| template<typename number2 > | |
| void | vmult (Vector< number2 > &, const Vector< number2 > &) const |
| template<typename number2 > | |
| void | vmult_add (Vector< number2 > &, const Vector< number2 > &) const |
| template<typename number2 > | |
| void | Tvmult (Vector< number2 > &, const Vector< number2 > &) const |
| template<typename number2 > | |
| void | Tvmult_add (Vector< number2 > &, const Vector< number2 > &) const |
| template<typename number2 > | |
| void | step (Vector< number2 > &dst, const Vector< number2 > &rhs) const |
| template<typename number2 > | |
| void | Tstep (Vector< number2 > &dst, const Vector< number2 > &rhs) const |
Protected Member Functions | |
| PreconditionBlockSOR (bool store) | |
| template<typename number2 > | |
| void | forward (Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const |
| template<typename number2 > | |
| void | backward (Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const |
Block SOR preconditioning.
The functions vmult and Tvmult execute a (transposed) block-SOR step, based on the blocks in PreconditionBlock. The elements outside the diagonal blocks may be distributed arbitrarily.
See PreconditionBlock for requirements on the matrix. The blocks used in this class must be contiguous and non-overlapping. An overlapping Schwarz relaxation method can be found in RelaxationBlockSOR; that class does not offer preconditioning, though.
Optionally, the entries of the source vector can be treated in the order of the indices in the permutation vector set by set_permutation (or the opposite order for Tvmult()). The inverse permutation is used for storing elements back into this vector. This functionality is automatically enabled after a call to set_permutation() with vectors of nonzero size.
<float> and <double>; others can be generated in application programs (see the section on Template instantiations in the manual).Definition at line 758 of file precondition_block.h.
| typedef MATRIX::value_type PreconditionBlockSOR< MATRIX, inverse_type >::number |
Define number type of matrix.
Reimplemented from PreconditionBlock< MATRIX, inverse_type >.
Reimplemented in PreconditionBlockSSOR< MATRIX, inverse_type >.
Definition at line 770 of file precondition_block.h.
| PreconditionBlockSOR< MATRIX, inverse_type >::PreconditionBlockSOR | ( | ) |
Default constructor.
| PreconditionBlockSOR< MATRIX, inverse_type >::PreconditionBlockSOR | ( | bool | store ) | [protected] |
Constructor to be used by PreconditionBlockSSOR.
| void PreconditionBlockSOR< MATRIX, inverse_type >::vmult | ( | Vector< number2 > & | , |
| const Vector< number2 > & | |||
| ) | const |
Execute block SOR preconditioning.
This function will automatically use the inverse matrices if they exist, if not then BlockSOR will waste much time inverting the diagonal block matrices in each preconditioning step.
For matrices which are empty above the diagonal blocks BlockSOR is a direct solver.
Reimplemented in PreconditionBlockSSOR< MATRIX, inverse_type >.
| void PreconditionBlockSOR< MATRIX, inverse_type >::vmult_add | ( | Vector< number2 > & | , |
| const Vector< number2 > & | |||
| ) | const |
Execute block SOR preconditioning.
Warning: this function performs normal vmult without adding. The reason for its existence is that BlockMatrixArray requires the adding version by default. On the other hand, adding requires an additional auxiliary vector, which is not desirable.
| void PreconditionBlockSOR< MATRIX, inverse_type >::Tvmult | ( | Vector< number2 > & | , |
| const Vector< number2 > & | |||
| ) | const |
Backward application of vmult().
In the current implementation, this is not the transpose of vmult(). It is a transposed Gauss-Seidel algorithm applied to the whole matrix, but the diagonal blocks being inverted are not transposed. Therefore, it is the transposed, if the diagonal blocks are symmetric.
Reimplemented in PreconditionBlockSSOR< MATRIX, inverse_type >.
| void PreconditionBlockSOR< MATRIX, inverse_type >::Tvmult_add | ( | Vector< number2 > & | , |
| const Vector< number2 > & | |||
| ) | const |
Execute backward block SOR preconditioning.
Warning: this function performs normal vmult without adding. The reason for its existence is that BlockMatrixArray requires the adding version by default. On the other hand, adding requires an additional auxiliary vector, which is not desirable.
| void PreconditionBlockSOR< MATRIX, inverse_type >::step | ( | Vector< number2 > & | dst, |
| const Vector< number2 > & | rhs | ||
| ) | const |
Perform one step of the SOR iteration.
Reimplemented in PreconditionBlockSSOR< MATRIX, inverse_type >.
| void PreconditionBlockSOR< MATRIX, inverse_type >::Tstep | ( | Vector< number2 > & | dst, |
| const Vector< number2 > & | rhs | ||
| ) | const |
Perform one step of the transposed SOR iteration.
Reimplemented in PreconditionBlockSSOR< MATRIX, inverse_type >.
| void PreconditionBlockSOR< MATRIX, inverse_type >::forward | ( | Vector< number2 > & | , |
| const Vector< number2 > & | , | ||
| const bool | transpose_diagonal, | ||
| const bool | adding | ||
| ) | const [protected] |
Implementation of the forward substitution loop called by vmult() and vmult_add().
If a permutation is set by set_permutation(), it will automatically be honored by this function.
The parameter adding does not have any function, yet.
| void PreconditionBlockSOR< MATRIX, inverse_type >::backward | ( | Vector< number2 > & | , |
| const Vector< number2 > & | , | ||
| const bool | transpose_diagonal, | ||
| const bool | adding | ||
| ) | const [protected] |
Implementation of the backward substitution loop called by Tvmult() and Tvmult_add().
If a permutation is set by set_permutation(), it will automatically be honored by this function.
The parameter adding does not have any function, yet.
documentation generated on Fri Feb 3 2012 06:04:10 by
doxygen
1.7.2