Reference documentation for deal.II version 9.4.1
|
#include <deal.II/lac/relaxation_block.h>
Public Member Functions | |
AdditionalData (const double relaxation=1., const bool invert_diagonal=true, const bool same_diagonal=false, const typename PreconditionBlockBase< InverseNumberType >::Inversion inversion=PreconditionBlockBase< InverseNumberType >::gauss_jordan, const double threshold=0., VectorType *temp_ghost_vector=nullptr) | |
std::size_t | memory_consumption () const |
Public Attributes | |
SparsityPattern | block_list |
double | relaxation |
bool | invert_diagonal |
bool | same_diagonal |
PreconditionBlockBase< InverseNumberType >::Inversion | inversion |
double | threshold = 0. |
unsigned int | kernel_size = 0 |
std::vector< std::vector< unsigned int > > | order |
VectorType * | temp_ghost_vector |
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 |
Parameters for block relaxation methods. In addition to typical control parameters like relaxation, this object also contains the block structure in block_list and an optional ordering of the blocks in order.
Definition at line 82 of file relaxation_block.h.
RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::AdditionalData | ( | const double | relaxation = 1. , |
const bool | invert_diagonal = true , |
||
const bool | same_diagonal = false , |
||
const typename PreconditionBlockBase< InverseNumberType >::Inversion | inversion = PreconditionBlockBase< InverseNumberType >::gauss_jordan , |
||
const double | threshold = 0. , |
||
VectorType * | temp_ghost_vector = nullptr |
||
) |
Constructor.
std::size_t RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::memory_consumption | ( | ) | const |
Return the memory allocated in this object.
SparsityPattern RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::block_list |
The mapping from indices to blocks. Each row of this pattern enumerates the indices constituting a diagonal block to be inverted.
Definition at line 101 of file relaxation_block.h.
double RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::relaxation |
Relaxation parameter.
Definition at line 106 of file relaxation_block.h.
bool RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::invert_diagonal |
Invert diagonal during initialization. Alternatively, diagonal blocks are inverted on the fly, whenever they are used. While inverting blocks in advance requires more memory, it usually saves a lot of computation. See same_diagonal on how you can avoid memory overhead.
Definition at line 114 of file relaxation_block.h.
bool RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::same_diagonal |
Assume all diagonal blocks are equal to save memory. If this flag is true, then only the first diagonal block of the matrix is inverted and stored. It is then used for all other blocks.
Definition at line 124 of file relaxation_block.h.
PreconditionBlockBase<InverseNumberType>::Inversion RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::inversion |
Choose the inversion method for the blocks.
Definition at line 129 of file relaxation_block.h.
double RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::threshold = 0. |
If inversion is SVD, we can compute the Penrose-Moore inverse of the blocks. In order to do so, we can specify here the threshold below which a singular value will be considered zero and thus not inverted. Setting this parameter to a value greater than zero takes precedence over threshold, i.e. kernel_size must be zero if you want to use threshold. This parameter is used in the call to LAPACKFullMatrix::compute_inverse_svd().
Definition at line 140 of file relaxation_block.h.
unsigned int RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::kernel_size = 0 |
If inversion is SVD, we can compute the Penrose-Moore inverse of the blocks. In order to do so, we can specify here the size of the kernel that will not be inverted but considered zero. Setting this parameter to a value greater than zero takes precedence over threshold, i.e. kernel_size must be zero if you want to use threshold. This parameter is used in the call to LAPACKFullMatrix::compute_inverse_svd().
Definition at line 151 of file relaxation_block.h.
std::vector<std::vector<unsigned int> > RelaxationBlock< MatrixType, InverseNumberType, VectorType >::AdditionalData::order |
The order in which blocks should be traversed. This vector can initiate several modes of execution:
If the length of the vector is zero, then the relaxation method will be executed from first to last block.
If the length is one, then the inner vector must have the same size as the number of blocks. The relaxation method is applied in the order given in this vector.
If the outer vector has length greater one, then the relaxation method is applied several times, each time in the order given by the inner vector of the corresponding index. This mode can for instance be used for ADI methods and similar direction sweeps.
Definition at line 173 of file relaxation_block.h.
|
mutable |
Temporary ghost vector that is used in the relaxation method when performing parallel MPI computations. The user is required to have this point to an initialized vector that contains all indices that appear in the block_list
sa ghost values. Typically, this the set of locally active level DoFs. Unused when VectorType is a serial vector type like Vector<double>.
Definition at line 183 of file relaxation_block.h.