
Classes | |
| class | AdditionalData |
Public Member Functions | |
| void | initialize (const MATRIX &A, const AdditionalData ¶meters) |
| void | clear () |
| bool | empty () const |
| value_type | el (unsigned int i, unsigned int j) const |
| void | invert_diagblocks () |
Protected Member Functions | |
| template<typename number2 > | |
| void | do_step (Vector< number2 > &dst, const Vector< number2 > &prev, const Vector< number2 > &src, const bool backward) const |
Protected Attributes | |
| SmartPointer< const MATRIX, RelaxationBlock< MATRIX, inverse_type > > | A |
| SmartPointer< const AdditionalData, RelaxationBlock< MATRIX, inverse_type > > | additional_data |
Private Types | |
| typedef MATRIX::value_type | number |
| typedef inverse_type | value_type |
Base class for the implementation of overlapping, multiplicative Schwarz relaxation methods and smoothers.
This class uses the infrastructure provided by PreconditionBlockBase. It adds functions to initialize with a block list and to do the relaxation step. The actual relaxation method with the interface expected by SolverRelaxation and MGSmootherRelaxation is in the derived classes.
This class allows for more general relaxation methods than PreconditionBlock, since the index sets may be arbitrary and overlapping, while there only contiguous, disjoint sets of equal size are allowed. As a drawback, this class cannot be used as a preconditioner, since its implementation relies on a straight forward implementation of the Gauss-Seidel process.
Definition at line 51 of file relaxation_block.h.
typedef MATRIX::value_type RelaxationBlock< MATRIX, inverse_type >::number [private] |
Define number type of matrix.
Reimplemented in RelaxationBlockJacobi< MATRIX, inverse_type >, RelaxationBlockSOR< MATRIX, inverse_type >, and RelaxationBlockSSOR< MATRIX, inverse_type >.
Definition at line 58 of file relaxation_block.h.
typedef inverse_type RelaxationBlock< MATRIX, inverse_type >::value_type [private] |
Value type for inverse matrices.
Definition at line 63 of file relaxation_block.h.
| void RelaxationBlock< MATRIX, inverse_type >::initialize | ( | const MATRIX & | A, |
| const AdditionalData & | parameters | ||
| ) |
Initialize matrix and block size. We store the matrix and the block size in the preconditioner object. In a second step, the inverses of the diagonal blocks may be computed.
Additionally, a relaxation parameter for derived classes may be provided.
| void RelaxationBlock< MATRIX, inverse_type >::clear | ( | ) |
Deletes the inverse diagonal block matrices if existent, sets the blocksize to 0, hence leaves the class in the state that it had directly after calling the constructor.
Reimplemented from PreconditionBlockBase< inverse_type >.
| bool RelaxationBlock< MATRIX, inverse_type >::empty | ( | ) | const |
Checks whether the object is empty.
Reimplemented from PreconditionBlockBase< inverse_type >.
| value_type RelaxationBlock< MATRIX, inverse_type >::el | ( | unsigned int | i, |
| unsigned int | j | ||
| ) | const |
Read-only access to entries. This function is only possible if the inverse diagonal blocks are stored.
Reimplemented from PreconditionBlockBase< inverse_type >.
| void RelaxationBlock< MATRIX, inverse_type >::invert_diagblocks | ( | ) |
Stores the inverse of the diagonal blocks in inverse. This costs some additional memory - for DG methods about 1/3 (for double inverses) or 1/6 (for float inverses) of that used for the matrix - but it makes the preconditioning much faster.
It is not allowed to call this function twice (will produce an error) before a call of clear(...) because at the second time there already exist the inverse matrices.
After this function is called, the lock on the matrix given through the use_matrix function is released, i.e. you may overwrite of delete it. You may want to do this in case you use this matrix to precondition another matrix.
| void RelaxationBlock< MATRIX, inverse_type >::do_step | ( | Vector< number2 > & | dst, |
| const Vector< number2 > & | prev, | ||
| const Vector< number2 > & | src, | ||
| const bool | backward | ||
| ) | const [protected] |
Perform one block relaxation step.
Depending on the arguments dst and pref, this performs an SOR step (both reference the same vector) of a Jacobi step (both are different vectors). For the Jacobi step, the calling function must copy dst to pref after this.
SmartPointer<const MATRIX,RelaxationBlock<MATRIX,inverse_type> > RelaxationBlock< MATRIX, inverse_type >::A [protected] |
Pointer to the matrix. Make sure that the matrix exists as long as this class needs it, i.e. until calling invert_diagblocks, or (if the inverse matrices should not be stored) until the last call of the preconditoining vmult function of the derived classes.
Definition at line 270 of file relaxation_block.h.
SmartPointer<const AdditionalData, RelaxationBlock<MATRIX,inverse_type> > RelaxationBlock< MATRIX, inverse_type >::additional_data [protected] |
Control information.
Definition at line 275 of file relaxation_block.h.
documentation generated on Mon May 21 2012 12:06:33 by
doxygen
1.7.3