Reference documentation for deal.II version 8.5.1
|
#include <deal.II/lac/precondition_block_base.h>
Public Types | |
enum | Inversion { gauss_jordan, householder, svd } |
typedef types::global_dof_index | size_type |
Public Member Functions | |
PreconditionBlockBase (bool store_diagonals=false, Inversion method=gauss_jordan) | |
~PreconditionBlockBase () | |
void | clear () |
void | reinit (unsigned int nblocks, size_type blocksize, bool compress, Inversion method=gauss_jordan) |
void | inverses_computed (bool are_they) |
void | set_same_diagonal () |
bool | same_diagonal () const |
bool | store_diagonals () const |
bool | inverses_ready () const |
bool | empty () const |
unsigned int | size () const |
number | el (size_type i, size_type j) const |
template<typename number2 > | |
void | inverse_vmult (size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const |
template<typename number2 > | |
void | inverse_Tvmult (size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const |
FullMatrix< number > & | inverse (size_type i) |
Householder< number > & | inverse_householder (size_type i) |
LAPACKFullMatrix< number > & | inverse_svd (size_type i) |
const FullMatrix< number > & | inverse (size_type i) const |
const Householder< number > & | inverse_householder (size_type i) const |
const LAPACKFullMatrix< number > & | inverse_svd (size_type i) const |
FullMatrix< number > & | diagonal (size_type i) |
const FullMatrix< number > & | diagonal (size_type i) const |
void | log_statistics () const |
std::size_t | memory_consumption () const |
Static Public Member Functions | |
static ::ExceptionBase & | ExcDiagonalsNotStored () |
static ::ExceptionBase & | ExcInverseNotAvailable () |
Protected Attributes | |
Inversion | inversion |
Private Attributes | |
unsigned int | n_diagonal_blocks |
std::vector< FullMatrix< number > > | var_inverse_full |
std::vector< Householder< number > > | var_inverse_householder |
std::vector< LAPACKFullMatrix< number > > | var_inverse_svd |
std::vector< FullMatrix< number > > | var_diagonal |
bool | var_store_diagonals |
bool | var_same_diagonal |
bool | var_inverses_ready |
A class storing the inverse diagonal blocks for block preconditioners and block relaxation methods.
This class does the book keeping for preconditioners and relaxation methods based on inverting blocks on the diagonal of a matrix. It allows us to either store all diagonal blocks and their inverses or the same block for each entry, and it keeps track of the choice. Thus, after initializing it and filling the inverse diagonal blocks correctly, a derived class can use inverse() with an integer argument referring to the block number.
Additionally, it allows the storage of the original diagonal blocks, not only the inverses. These are for instance used in the intermediate step of the SSOR preconditioner.
Definition at line 54 of file precondition_block_base.h.
typedef types::global_dof_index PreconditionBlockBase< number >::size_type |
Declare type for container size.
Definition at line 60 of file precondition_block_base.h.
enum PreconditionBlockBase::Inversion |
Choose a method for inverting the blocks, and thus the data type for the inverses.
Enumerator | |
---|---|
gauss_jordan | Use the standard Gauss-Jacobi method implemented in FullMatrix::inverse(). |
householder | Use QR decomposition of the Householder class. |
svd | Use the singular value decomposition of LAPACKFullMatrix. |
Definition at line 66 of file precondition_block_base.h.
|
inline |
Constructor initializing default values.
Definition at line 296 of file precondition_block_base.h.
PreconditionBlockBase< number >::~PreconditionBlockBase | ( | ) |
The virtual destructor
|
inline |
Deletes the inverse diagonal block matrices if existent hence leaves the class in the state that it had directly after calling the constructor.
Definition at line 310 of file precondition_block_base.h.
|
inline |
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 328 of file precondition_block_base.h.
|
inline |
Tell the class that inverses are computed.
Definition at line 602 of file precondition_block_base.h.
void PreconditionBlockBase< number >::set_same_diagonal | ( | ) |
Use only the inverse of the first diagonal block to save memory and computation time.
Possible applications: computing on a cartesian grid, all diagonal blocks are the same or all diagonal blocks are at least similar and inversion of one of them still yields a preconditioner.
|
inline |
Does the matrix use only one diagonal block?
Definition at line 586 of file precondition_block_base.h.
|
inline |
Check, whether diagonal blocks (not their inverses) should be stored.
Definition at line 594 of file precondition_block_base.h.
|
inline |
Return true, if inverses are ready for use.
Definition at line 610 of file precondition_block_base.h.
bool PreconditionBlockBase< number >::empty | ( | ) | const |
Check whether the object is empty.
|
inline |
The number of blocks.
Definition at line 407 of file precondition_block_base.h.
number PreconditionBlockBase< number >::el | ( | size_type | i, |
size_type | j | ||
) | const |
Read-only access to entries. This function is only possible if the inverse diagonal blocks are stored.
|
inline |
Multiply with the inverse block at position i
.
Definition at line 416 of file precondition_block_base.h.
|
inline |
Multiply with the transposed inverse block at position i
.
Definition at line 445 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks if Inversion is gauss_jordan.
Definition at line 527 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 542 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 557 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks.
Definition at line 473 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 486 of file precondition_block_base.h.
|
inline |
Access to the inverse diagonal blocks if Inversion is householder.
Definition at line 499 of file precondition_block_base.h.
|
inline |
Access to the diagonal blocks.
Definition at line 572 of file precondition_block_base.h.
|
inline |
Access to the diagonal blocks.
Definition at line 512 of file precondition_block_base.h.
|
inline |
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 618 of file precondition_block_base.h.
|
inline |
Determine an estimate for the memory consumption (in bytes) of this object.
Definition at line 666 of file precondition_block_base.h.
|
protected |
The method used for inverting blocks.
Definition at line 235 of file precondition_block_base.h.
|
private |
The number of (inverse) diagonal blocks, if only one is stored.
Definition at line 241 of file precondition_block_base.h.
|
private |
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 249 of file precondition_block_base.h.
|
private |
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 257 of file precondition_block_base.h.
|
private |
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 265 of file precondition_block_base.h.
|
private |
Storage of the original diagonal blocks.
Used by the blocked SSOR method.
Definition at line 272 of file precondition_block_base.h.
|
private |
This is true, if the field var_diagonal is to be used.
Definition at line 278 of file precondition_block_base.h.
|
private |
This is true, if only one inverse is stored.
Definition at line 283 of file precondition_block_base.h.
|
private |
The inverse matrices are usable. Set by the parent class via inverses_computed().
Definition at line 289 of file precondition_block_base.h.