Reference documentation for deal.II version 8.4.2
Public Member Functions | Public Attributes | List of all members
RelaxationBlock< MatrixType, inverse_type >::AdditionalData Class Reference

#include <deal.II/lac/relaxation_block.h>

Inheritance diagram for RelaxationBlock< MatrixType, inverse_type >::AdditionalData:
[legend]

Public Member Functions

 AdditionalData (const double relaxation=1., const bool invert_diagonal=true, const bool same_diagonal=false)
 
std::size_t memory_consumption () const
 
- Public Member Functions inherited from Subscriptor
 Subscriptor ()
 
 Subscriptor (const Subscriptor &)
 
virtual ~Subscriptor ()
 
Subscriptoroperator= (const Subscriptor &)
 
void subscribe (const char *identifier=0) const
 
void unsubscribe (const char *identifier=0) const
 
unsigned int n_subscriptions () const
 
void list_subscribers () const
 
 DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects."<< "\"<< "(Additional information: "<< arg3<< ")\"<< "See the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "a lot more information on what this error means and "<< "how to fix programs in which it happens.")
 
 DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier <"<< arg2<< "> subscribes to this object of class "<< arg1<< ". Consequently, it cannot be unsubscribed.")
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Public Attributes

SparsityPattern block_list
 
double relaxation
 
bool invert_diagonal
 
bool same_diagonal
 
PreconditionBlockBase< inverse_type >::Inversion inversion
 
double threshold
 
std::vector< std::vector< unsigned int > > order
 

Detailed Description

template<typename MatrixType, typename inverse_type = typename MatrixType::value_type>
class RelaxationBlock< MatrixType, inverse_type >::AdditionalData

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 77 of file relaxation_block.h.

Constructor & Destructor Documentation

§ AdditionalData()

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
RelaxationBlock< MatrixType, inverse_type >::AdditionalData::AdditionalData ( const double  relaxation = 1.,
const bool  invert_diagonal = true,
const bool  same_diagonal = false 
)

Constructor.

Member Function Documentation

§ memory_consumption()

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
std::size_t RelaxationBlock< MatrixType, inverse_type >::AdditionalData::memory_consumption ( ) const

Return the memory allocated in this object.

Member Data Documentation

§ block_list

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
SparsityPattern RelaxationBlock< MatrixType, inverse_type >::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 91 of file relaxation_block.h.

§ relaxation

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
double RelaxationBlock< MatrixType, inverse_type >::AdditionalData::relaxation

Relaxation parameter.

Definition at line 96 of file relaxation_block.h.

§ invert_diagonal

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
bool RelaxationBlock< MatrixType, inverse_type >::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 104 of file relaxation_block.h.

§ same_diagonal

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
bool RelaxationBlock< MatrixType, inverse_type >::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.

Note
Avoid setting this true if your blocks are not equal, in particular if their sizes differ.

Definition at line 114 of file relaxation_block.h.

§ inversion

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
PreconditionBlockBase<inverse_type>::Inversion RelaxationBlock< MatrixType, inverse_type >::AdditionalData::inversion

Choose the inversion method for the blocks.

Definition at line 118 of file relaxation_block.h.

§ threshold

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
double RelaxationBlock< MatrixType, inverse_type >::AdditionalData::threshold

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. This parameter is used in the call to LAPACKFullMatrix::compute_inverse_svd().

Definition at line 127 of file relaxation_block.h.

§ order

template<typename MatrixType , typename inverse_type = typename MatrixType::value_type>
std::vector<std::vector<unsigned int> > RelaxationBlock< MatrixType, inverse_type >::AdditionalData::order

The order in which blocks should be traversed. This vector can initiate several modes of execution:

  1. If the length of the vector is zero, then the relaxation method will be executed from first to last block.

  2. 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.

  3. 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 149 of file relaxation_block.h.


The documentation for this class was generated from the following file: