Reference documentation for deal.II version Git e7d3444 2014-10-30 17:32:38 -0500
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Protected Member Functions | List of all members
PreconditionBlockSOR< MATRIX, inverse_type > Class Template Reference

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

Inheritance diagram for PreconditionBlockSOR< MATRIX, inverse_type >:
[legend]

Public Types

typedef types::global_dof_index size_type
 
typedef MATRIX::value_type number
 

Public Member Functions

 PreconditionBlockSOR ()
 
template<typename number2 >
void vmult (Vector< number2 > &, const Vector< number2 > &) const
 
template<typename number2 >
void vmult_add (Vector< number2 > &, const Vector< number2 > &) const
 
template<typename number2 >
void Tvmult (Vector< number2 > &, const Vector< number2 > &) const
 
template<typename number2 >
void Tvmult_add (Vector< number2 > &, const Vector< number2 > &) const
 
template<typename number2 >
void step (Vector< number2 > &dst, const Vector< number2 > &rhs) const
 
template<typename number2 >
void Tstep (Vector< number2 > &dst, const Vector< number2 > &rhs) 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.\n"<< "(Additional information: "<< arg3<< ")\n"<< "Note the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "more information on what this error means.")
 
 DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier \""<< arg2<< "\" did subscribe to this object of class "<< arg1)
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Protected Member Functions

 PreconditionBlockSOR (bool store)
 
template<typename number2 >
void forward (Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const
 
template<typename number2 >
void backward (Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const
 
- Protected Member Functions inherited from PreconditionBlock< MATRIX, inverse_type >
void initialize (const MATRIX &A, const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation, const AdditionalData parameters)
 
void set_permutation (const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation)
 
void invert_permuted_diagblocks (const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation)
 
 PreconditionBlock (bool store_diagonals=false)
 
 ~PreconditionBlock ()
 
void initialize (const MATRIX &A, const AdditionalData parameters)
 
void clear ()
 
bool empty () const
 
value_type el (size_type i, size_type j) const
 
void invert_diagblocks ()
 
template<typename number2 >
void forward_step (Vector< number2 > &dst, const Vector< number2 > &prev, const Vector< number2 > &src, const bool transpose_diagonal) const
 
template<typename number2 >
void backward_step (Vector< number2 > &dst, const Vector< number2 > &prev, const Vector< number2 > &src, const bool transpose_diagonal) const
 
size_type block_size () const
 
unsigned int n_blocks () const DEAL_II_DEPRECATED
 
std::size_t memory_consumption () const
 
 DeclException2 (ExcWrongBlockSize, int, int,<< "The blocksize "<< arg1<< " and the size of the matrix "<< arg2<< " do not match.")
 
 DeclException0 (ExcInverseMatricesAlreadyExist)
 
- Protected Member Functions inherited from PreconditionBlockBase< inverse_type >
 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
 
inverse_type el (size_type i, size_type j) 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< inverse_type > & inverse (size_type i)
 
const FullMatrix< inverse_type > & inverse (size_type i) const
 
Householder< inverse_type > & inverse_householder (size_type i)
 
const Householder< inverse_type > & inverse_householder (size_type i) const
 
LAPACKFullMatrix< inverse_type > & inverse_svd (size_type i)
 
const LAPACKFullMatrix
< inverse_type > & 
inverse_svd (size_type i) const
 
FullMatrix< inverse_type > & diagonal (size_type i)
 
const FullMatrix< inverse_type > & diagonal (size_type i) const
 
void log_statistics () const
 
std::size_t memory_consumption () const
 
 DeclException0 (ExcDiagonalsNotStored)
 
 DeclException0 (ExcInverseNotAvailable)
 

Additional Inherited Members

- Protected Types inherited from PreconditionBlock< MATRIX, inverse_type >
typedef types::global_dof_index size_type
 
- Protected Types inherited from PreconditionBlockBase< inverse_type >
enum  Inversion
 
typedef types::global_dof_index size_type
 
- Protected Attributes inherited from PreconditionBlock< MATRIX, inverse_type >
size_type blocksize
 
SmartPointer< const MATRIX,
PreconditionBlock< MATRIX,
inverse_type > > 
A
 
double relaxation
 
std::vector< size_typepermutation
 
std::vector< size_typeinverse_permutation
 
- Protected Attributes inherited from PreconditionBlockBase< inverse_type >
Inversion inversion
 

Detailed Description

template<class MATRIX, typename inverse_type = typename MATRIX::value_type>
class PreconditionBlockSOR< MATRIX, inverse_type >

Block SOR preconditioning.

The functions vmult and Tvmult execute a (transposed) block-SOR step, based on the blocks in PreconditionBlock. The elements outside the diagonal blocks may be distributed arbitrarily.

See PreconditionBlock for requirements on the matrix. The blocks used in this class must be contiguous and non-overlapping. An overlapping Schwarz relaxation method can be found in RelaxationBlockSOR; that class does not offer preconditioning, though.

Permutations

Optionally, the entries of the source vector can be treated in the order of the indices in the permutation vector set by set_permutation (or the opposite order for Tvmult()). The inverse permutation is used for storing elements back into this vector. This functionality is automatically enabled after a call to set_permutation() with vectors of nonzero size.

Note
The diagonal blocks, like the matrix, are not permuted! Therefore, the permutation vector can only swap whole blocks. It may not change the order inside blocks or swap single indices between blocks.

Instantiations

Note
Instantiations for this template are provided for <float> and <double>; others can be generated in application programs (see the section on Template instantiations in the manual).
Author
Ralf Hartmann, Guido Kanschat, 1999, 2000, 2001, 2002, 2003

Definition at line 780 of file precondition_block.h.

Member Typedef Documentation

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
typedef types::global_dof_index PreconditionBlockSOR< MATRIX, inverse_type >::size_type

Declare type for container size.

Definition at line 787 of file precondition_block.h.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
typedef MATRIX::value_type PreconditionBlockSOR< MATRIX, inverse_type >::number

Define number type of matrix.

Definition at line 797 of file precondition_block.h.

Constructor & Destructor Documentation

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
PreconditionBlockSOR< MATRIX, inverse_type >::PreconditionBlockSOR ( )

Default constructor.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
PreconditionBlockSOR< MATRIX, inverse_type >::PreconditionBlockSOR ( bool  store)
protected

Constructor to be used by PreconditionBlockSSOR.

Member Function Documentation

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::vmult ( Vector< number2 > &  ,
const Vector< number2 > &   
) const

Execute block SOR preconditioning.

This function will automatically use the inverse matrices if they exist, if not then BlockSOR will waste much time inverting the diagonal block matrices in each preconditioning step.

For matrices which are empty above the diagonal blocks BlockSOR is a direct solver.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::vmult_add ( Vector< number2 > &  ,
const Vector< number2 > &   
) const

Execute block SOR preconditioning.

Warning: this function performs normal vmult without adding. The reason for its existence is that BlockMatrixArray requires the adding version by default. On the other hand, adding requires an additional auxiliary vector, which is not desirable.

See Also
vmult
template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::Tvmult ( Vector< number2 > &  ,
const Vector< number2 > &   
) const

Backward application of vmult().

In the current implementation, this is not the transpose of vmult(). It is a transposed Gauss-Seidel algorithm applied to the whole matrix, but the diagonal blocks being inverted are not transposed. Therefore, it is the transposed, if the diagonal blocks are symmetric.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::Tvmult_add ( Vector< number2 > &  ,
const Vector< number2 > &   
) const

Execute backward block SOR preconditioning.

Warning: this function performs normal vmult without adding. The reason for its existence is that BlockMatrixArray requires the adding version by default. On the other hand, adding requires an additional auxiliary vector, which is not desirable.

See Also
vmult
template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::step ( Vector< number2 > &  dst,
const Vector< number2 > &  rhs 
) const

Perform one step of the SOR iteration.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::Tstep ( Vector< number2 > &  dst,
const Vector< number2 > &  rhs 
) const

Perform one step of the transposed SOR iteration.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::forward ( Vector< number2 > &  ,
const Vector< number2 > &  ,
const bool  transpose_diagonal,
const bool  adding 
) const
protected

Implementation of the forward substitution loop called by vmult() and vmult_add().

If a permutation is set by set_permutation(), it will automatically be honored by this function.

The parameter adding does not have any function, yet.

template<class MATRIX , typename inverse_type = typename MATRIX::value_type>
template<typename number2 >
void PreconditionBlockSOR< MATRIX, inverse_type >::backward ( Vector< number2 > &  ,
const Vector< number2 > &  ,
const bool  transpose_diagonal,
const bool  adding 
) const
protected

Implementation of the backward substitution loop called by Tvmult() and Tvmult_add().

If a permutation is set by set_permutation(), it will automatically be honored by this function.

The parameter adding does not have any function, yet.


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