Reference documentation for deal.II version 9.3.3
|
#include <deal.II/lac/relaxation_block.h>
Public Types | |
using | number = typename MatrixType::value_type |
Public Member Functions | |
void | step (VectorType &dst, const VectorType &rhs) const |
void | Tstep (VectorType &dst, const VectorType &rhs) const |
void | vmult (VectorType &dst, const VectorType &rhs) const |
void | Tvmult (VectorType &dst, const VectorType &rhs) const |
Protected Types | |
using | size_type = types::global_dof_index |
enum | Inversion |
Protected Member Functions | |
void | initialize (const MatrixType &A, const AdditionalData ¶meters) |
void | clear () |
void | invert_diagblocks () |
void | do_step (Vector< double > &dst, const Vector< double > &prev, const Vector< double > &src, const bool backward) const |
void | reinit (unsigned int nblocks, size_type blocksize, bool compress, Inversion method=gauss_jordan) |
void | inverses_computed (bool are_they) |
bool | same_diagonal () const |
bool | store_diagonals () const |
bool | inverses_ready () const |
unsigned int | size () const |
void | inverse_vmult (size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const |
void | inverse_Tvmult (size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const |
FullMatrix< typename MatrixType::value_type > & | inverse (size_type i) |
const FullMatrix< typename MatrixType::value_type > & | inverse (size_type i) const |
Householder< typename MatrixType::value_type > & | inverse_householder (size_type i) |
const Householder< typename MatrixType::value_type > & | inverse_householder (size_type i) const |
LAPACKFullMatrix< typename MatrixType::value_type > & | inverse_svd (size_type i) |
const LAPACKFullMatrix< typename MatrixType::value_type > & | inverse_svd (size_type i) const |
FullMatrix< typename MatrixType::value_type > & | diagonal (size_type i) |
const FullMatrix< typename MatrixType::value_type > & | diagonal (size_type i) const |
void | log_statistics () const |
std::size_t | memory_consumption () const |
Static Protected Member Functions | |
static ::ExceptionBase & | ExcDiagonalsNotStored () |
static ::ExceptionBase & | ExcInverseNotAvailable () |
Protected Attributes | |
SmartPointer< const MatrixType, RelaxationBlock< MatrixType, typename MatrixType::value_type, Vector< double > > > | A |
SmartPointer< const AdditionalData, RelaxationBlock< MatrixType, typename MatrixType::value_type, Vector< double > > > | additional_data |
Inversion | inversion |
Private Types | |
using | value_type = typename MatrixType::value_type |
Private Member Functions | |
void | block_kernel (const size_type block_begin, const size_type block_end) |
Private Attributes | |
unsigned int | n_diagonal_blocks |
std::vector< FullMatrix< typename MatrixType::value_type > > | var_inverse_full |
std::vector< Householder< typename MatrixType::value_type > > | var_inverse_householder |
std::vector< LAPACKFullMatrix< typename MatrixType::value_type > > | var_inverse_svd |
std::vector< FullMatrix< typename MatrixType::value_type > > | var_diagonal |
bool | var_store_diagonals |
bool | var_same_diagonal |
bool | var_inverses_ready |
Subscriptor functionality | |
Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class. | |
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
unsigned int | n_subscriptions () const |
template<typename StreamType > | |
void | list_subscribers (StreamType &stream) const |
void | list_subscribers () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
using | map_value_type = decltype(counter_map)::value_type |
using | map_iterator = decltype(counter_map)::iterator |
std::atomic< unsigned int > | counter |
std::map< std::string, unsigned int > | counter_map |
std::vector< std::atomic< bool > * > | validity_pointers |
const std::type_info * | object_info |
static std::mutex | mutex |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
void | check_no_subscribers () const noexcept |
Block Gauss-Seidel method with possibly overlapping blocks.
This class implements the step() and Tstep() functions expected by the relaxation concept. They perform a multiplicative Schwarz method on the blocks provided in the block list of AdditionalData. Differing from PreconditionBlockSOR, these blocks may be of varying size, non-contiguous, and overlapping. On the other hand, this class does not implement the preconditioner interface expected by Solver objects.
Definition at line 383 of file relaxation_block.h.
using RelaxationBlockSOR< MatrixType, InverseNumberType, VectorType >::number = typename MatrixType::value_type |
Default constructor. Define number type of matrix.
Definition at line 396 of file relaxation_block.h.
|
privateinherited |
Value type for inverse matrices.
Definition at line 68 of file relaxation_block.h.
|
inherited |
Declare type for container size.
Definition at line 74 of file relaxation_block.h.
|
inherited |
Choose a method for inverting the blocks, and thus the data type for the inverses.
Definition at line 70 of file precondition_block_base.h.
void RelaxationBlockSOR< MatrixType, InverseNumberType, VectorType >::step | ( | VectorType & | dst, |
const VectorType & | rhs | ||
) | const |
Perform one step of the SOR iteration.
void RelaxationBlockSOR< MatrixType, InverseNumberType, VectorType >::Tstep | ( | VectorType & | dst, |
const VectorType & | rhs | ||
) | const |
Perform one step of the transposed SOR iteration.
void RelaxationBlockSOR< MatrixType, InverseNumberType, VectorType >::vmult | ( | VectorType & | dst, |
const VectorType & | rhs | ||
) | const |
void RelaxationBlockSOR< MatrixType, InverseNumberType, VectorType >::Tvmult | ( | VectorType & | dst, |
const VectorType & | rhs | ||
) | const |
Implements a transpose vmult operation, which for this class first sets the dst() vector to zero before calling the Tstep() method.
|
inherited |
Initialize matrix and additional information. In a second step, the inverses of the diagonal blocks may be computed.
Note that AdditionalData, different from other preconditioners, defines quite large objects, and that therefore the object is not copied, but rather a pointer is stored. Thus, the lifetime of additional_data
hast to exceed the lifetime of this object.
|
inherited |
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.
|
inherited |
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.
|
protectedinherited |
Perform one block relaxation step.
Depending on the arguments dst
and pref
, this performs an SOR step (both reference the same vector) or a Jacobi step (both are different vectors). For the Jacobi step, the calling function must copy dst
to prev
after this.
|
privateinherited |
Computes (the inverse of) a range of blocks.
|
inlineinherited |
Resize to this number of diagonal blocks with the given block size. If compress
is true, then only one block will be stored.
Definition at line 110 of file precondition_block_base.h.
|
inlineinherited |
Tell the class that inverses are computed.
Definition at line 119 of file precondition_block_base.h.
|
inlineinherited |
Does the matrix use only one diagonal block?
Definition at line 125 of file precondition_block_base.h.
|
inlineinherited |
Check, whether diagonal blocks (not their inverses) should be stored.
Definition at line 131 of file precondition_block_base.h.
|
inlineinherited |
Return true, if inverses are ready for use.
Definition at line 137 of file precondition_block_base.h.
|
inlineinherited |
The number of blocks.
Definition at line 143 of file precondition_block_base.h.
|
inlineinherited |
Multiply with the inverse block at position i
.
Definition at line 150 of file precondition_block_base.h.
|
inlineinherited |
Multiply with the transposed inverse block at position i
.
Definition at line 159 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks if Inversion is gauss_jordan.
Definition at line 167 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks.
Definition at line 185 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 173 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 191 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 179 of file precondition_block_base.h.
|
inlineinherited |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 197 of file precondition_block_base.h.
|
inlineinherited |
Access to the diagonal blocks.
Definition at line 203 of file precondition_block_base.h.
|
inlineinherited |
Access to the diagonal blocks.
Definition at line 209 of file precondition_block_base.h.
|
inlineinherited |
Print some statistics about the inverses to deallog
. Output depends on Inversion. It is richest for svd, where we obtain statistics on extremal singular values and condition numbers.
Definition at line 217 of file precondition_block_base.h.
|
inlineinherited |
Determine an estimate for the memory consumption (in bytes) of this object.
Definition at line 224 of file precondition_block_base.h.
|
staticinherited |
You are trying to access a diagonal block (not its inverse), but you decided not to store the diagonal blocks.
|
staticinherited |
You are accessing a diagonal block, assuming that it has a certain type. But, the method used for inverting the diagonal blocks does not use this type
|
protectedinherited |
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 preconditioning vmult
function of the derived classes.
Definition at line 253 of file relaxation_block.h.
|
protectedinherited |
Control information.
Definition at line 260 of file relaxation_block.h.
|
protectedinherited |
The method used for inverting blocks.
Definition at line 243 of file precondition_block_base.h.
|
privateinherited |
The number of (inverse) diagonal blocks, if only one is stored.
Definition at line 249 of file precondition_block_base.h.
|
privateinherited |
Storage of the inverse matrices of the diagonal blocks matrices as FullMatrix<number>
matrices, if Inversion gauss_jordan is used. Using number=float
saves memory in comparison with number=double
, but may introduce numerical instability.
Definition at line 257 of file precondition_block_base.h.
|
privateinherited |
Storage of the inverse matrices of the diagonal blocks matrices as Householder
matrices if Inversion householder is used. Using number=float
saves memory in comparison with number=double
, but may introduce numerical instability.
Definition at line 265 of file precondition_block_base.h.
|
privateinherited |
Storage of the inverse matrices of the diagonal blocks matrices as LAPACKFullMatrix
matrices if Inversion svd is used. Using number=float
saves memory in comparison with number=double
, but may introduce numerical instability.
Definition at line 273 of file precondition_block_base.h.
|
privateinherited |
Storage of the original diagonal blocks.
Used by the blocked SSOR method.
Definition at line 280 of file precondition_block_base.h.
|
privateinherited |
This is true, if the field var_diagonal is to be used.
Definition at line 286 of file precondition_block_base.h.
|
privateinherited |
This is true, if only one inverse is stored.
Definition at line 291 of file precondition_block_base.h.
|
privateinherited |
The inverse matrices are usable. Set by the parent class via inverses_computed().
Definition at line 297 of file precondition_block_base.h.