Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Attributes

PreconditionBlockBase< number > Class Template Reference

Inheritance diagram for PreconditionBlockBase< number >:
Inheritance graph
[legend]

List of all members.

Public Types

enum  Inversion { gauss_jordan, householder, svd }

Public Member Functions

 PreconditionBlockBase (bool store_diagonals=false, Inversion method=gauss_jordan)
 ~PreconditionBlockBase ()
void clear ()
void reinit (unsigned int nblocks, unsigned int 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 (unsigned int i, unsigned int j) const
template<typename number2 >
void inverse_vmult (unsigned int i, Vector< number2 > &dst, const Vector< number2 > &src) const
template<typename number2 >
void inverse_Tvmult (unsigned int i, Vector< number2 > &dst, const Vector< number2 > &src) const
FullMatrix< number > & inverse (unsigned int i)
Householder< number > & inverse_householder (unsigned int i)
LAPACKFullMatrix< number > & inverse_svd (unsigned int i)
const FullMatrix< number > & inverse (unsigned int i) const
const Householder< number > & inverse_householder (unsigned int i) const
const LAPACKFullMatrix< number > & inverse_svd (unsigned int i) const
FullMatrix< number > & diagonal (unsigned int i)
const FullMatrix< number > & diagonal (unsigned int i) const
std::size_t memory_consumption () const

Static Public Member Functions

::ExceptionBaseExcDiagonalsNotStored ()
::ExceptionBaseExcInverseNotAvailable ()

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

Detailed Description

template<typename number>
class PreconditionBlockBase< number >

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.

Author:
Guido Kanschat
Date:
2010

Definition at line 51 of file precondition_block_base.h.


Member Enumeration Documentation

template<typename number>
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 59 of file precondition_block_base.h.


Constructor & Destructor Documentation

template<typename number >
PreconditionBlockBase< number >::PreconditionBlockBase ( bool  store_diagonals = false,
Inversion  method = gauss_jordan 
) [inline]

Constructor initializing default values.

Definition at line 343 of file precondition_block_base.h.

template<typename number>
PreconditionBlockBase< number >::~PreconditionBlockBase (  )

The virtual destructor


Member Function Documentation

template<typename number >
void PreconditionBlockBase< number >::clear (  ) [inline]

Deletes the inverse diagonal block matrices if existent hence leaves the class in the state that it had directly after calling the constructor.

Reimplemented in PreconditionBlock< MATRIX, inverse_type >, and RelaxationBlock< MATRIX, inverse_type >.

Definition at line 357 of file precondition_block_base.h.

template<typename number >
void PreconditionBlockBase< number >::reinit ( unsigned int  nblocks,
unsigned int  blocksize,
bool  compress,
Inversion  method = gauss_jordan 
) [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 375 of file precondition_block_base.h.

References Assert, StandardExceptions::ExcNotImplemented(), and LAPACKSupport::svd.

template<typename number >
void PreconditionBlockBase< number >::inverses_computed ( bool  are_they ) [inline]

Tell the class that inverses are computed.

Definition at line 649 of file precondition_block_base.h.

template<typename number>
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.

template<typename number >
bool PreconditionBlockBase< number >::same_diagonal (  ) const [inline]

Does the matrix use only one diagonal block?

Definition at line 633 of file precondition_block_base.h.

template<typename number >
bool PreconditionBlockBase< number >::store_diagonals (  ) const [inline]

Check, whether diagonal blocks (not their inverses) should be stored.

Definition at line 641 of file precondition_block_base.h.

template<typename number >
bool PreconditionBlockBase< number >::inverses_ready (  ) const [inline]

Return true, if inverses are ready for use.

Definition at line 657 of file precondition_block_base.h.

template<typename number>
bool PreconditionBlockBase< number >::empty (  ) const

Checks whether the object is empty.

Reimplemented in PreconditionBlock< MATRIX, inverse_type >, and RelaxationBlock< MATRIX, inverse_type >.

template<typename number >
unsigned int PreconditionBlockBase< number >::size (  ) const [inline]

The number of blocks.

Definition at line 454 of file precondition_block_base.h.

template<typename number>
number PreconditionBlockBase< number >::el ( unsigned int  i,
unsigned int  j 
) const

Read-only access to entries. This function is only possible if the inverse diagonal blocks are stored.

Reimplemented in PreconditionBlock< MATRIX, inverse_type >, and RelaxationBlock< MATRIX, inverse_type >.

template<typename number >
template<typename number2 >
void PreconditionBlockBase< number >::inverse_vmult ( unsigned int  i,
Vector< number2 > &  dst,
const Vector< number2 > &  src 
) const [inline]

Multiply with the inverse block at position i.

Definition at line 463 of file precondition_block_base.h.

References Assert, AssertIndexRange, StandardExceptions::ExcNotImplemented(), LAPACKSupport::svd, and LAPACKSupport::U.

template<typename number >
template<typename number2 >
void PreconditionBlockBase< number >::inverse_Tvmult ( unsigned int  i,
Vector< number2 > &  dst,
const Vector< number2 > &  src 
) const [inline]

Multiply with the transposed inverse block at position i.

Definition at line 492 of file precondition_block_base.h.

References Assert, AssertIndexRange, StandardExceptions::ExcNotImplemented(), LAPACKSupport::svd, and LAPACKSupport::U.

template<typename number >
FullMatrix< number > & PreconditionBlockBase< number >::inverse ( unsigned int  i ) [inline]

Access to the inverse diagonal blocks if Inversion is gauss_jordan.

Definition at line 574 of file precondition_block_base.h.

References Assert, and StandardExceptions::ExcIndexRange().

template<typename number >
Householder< number > & PreconditionBlockBase< number >::inverse_householder ( unsigned int  i ) [inline]

Access to the inverse diagonal blocks if Inversion is householder.

Definition at line 589 of file precondition_block_base.h.

References Assert, and AssertIndexRange.

template<typename number >
LAPACKFullMatrix< number > & PreconditionBlockBase< number >::inverse_svd ( unsigned int  i ) [inline]

Access to the inverse diagonal blocks if Inversion is householder.

Definition at line 604 of file precondition_block_base.h.

References Assert, and AssertIndexRange.

template<typename number >
const FullMatrix< number > & PreconditionBlockBase< number >::inverse ( unsigned int  i ) const [inline]

Access to the inverse diagonal blocks.

Definition at line 520 of file precondition_block_base.h.

References Assert, and StandardExceptions::ExcIndexRange().

template<typename number >
const Householder< number > & PreconditionBlockBase< number >::inverse_householder ( unsigned int  i ) const [inline]

Access to the inverse diagonal blocks if Inversion is householder.

Definition at line 533 of file precondition_block_base.h.

References AssertIndexRange.

template<typename number >
const LAPACKFullMatrix< number > & PreconditionBlockBase< number >::inverse_svd ( unsigned int  i ) const [inline]

Access to the inverse diagonal blocks if Inversion is householder.

Definition at line 546 of file precondition_block_base.h.

References AssertIndexRange.

template<typename number >
FullMatrix< number > & PreconditionBlockBase< number >::diagonal ( unsigned int  i ) [inline]

Access to the diagonal blocks.

Definition at line 619 of file precondition_block_base.h.

References Assert, and StandardExceptions::ExcIndexRange().

template<typename number >
const FullMatrix< number > & PreconditionBlockBase< number >::diagonal ( unsigned int  i ) const [inline]

Access to the diagonal blocks.

Definition at line 559 of file precondition_block_base.h.

References Assert, and StandardExceptions::ExcIndexRange().

template<typename number >
std::size_t PreconditionBlockBase< number >::memory_consumption (  ) const [inline]

Determine an estimate for the memory consumption (in bytes) of this object.

Reimplemented in PreconditionBlock< MATRIX, inverse_type >.

Definition at line 666 of file precondition_block_base.h.

References MemoryConsumption::memory_consumption().

template<typename number>
::ExceptionBase& PreconditionBlockBase< number >::ExcDiagonalsNotStored (  ) [static]

You are trying to access a diagonal block (not its inverse), but you decided not to store the diagonal blocks.

template<typename number>
::ExceptionBase& PreconditionBlockBase< number >::ExcInverseNotAvailable (  ) [static]

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


Member Data Documentation

template<typename number>
Inversion PreconditionBlockBase< number >::inversion [protected]

The method used for inverting blocks.

Definition at line 259 of file precondition_block_base.h.

template<typename number>
unsigned int PreconditionBlockBase< number >::n_diagonal_blocks [private]

The number of (inverse) diagonal blocks, if only one is stored.

Definition at line 267 of file precondition_block_base.h.

template<typename number>
std::vector<FullMatrix<number> > PreconditionBlockBase< number >::var_inverse_full [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 281 of file precondition_block_base.h.

template<typename number>
std::vector<Householder<number> > PreconditionBlockBase< number >::var_inverse_householder [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 295 of file precondition_block_base.h.

template<typename number>
std::vector<LAPACKFullMatrix<number> > PreconditionBlockBase< number >::var_inverse_svd [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 309 of file precondition_block_base.h.

template<typename number>
std::vector<FullMatrix<number> > PreconditionBlockBase< number >::var_diagonal [private]

Storage of the original diagonal blocks.

Used by the blocked SSOR method.

Definition at line 316 of file precondition_block_base.h.

template<typename number>
bool PreconditionBlockBase< number >::var_store_diagonals [private]

This is true, if the field var_diagonal is to be used.

Definition at line 323 of file precondition_block_base.h.

template<typename number>
bool PreconditionBlockBase< number >::var_same_diagonal [private]

This is true, if only one inverse is stored.

Definition at line 329 of file precondition_block_base.h.

template<typename number>
bool PreconditionBlockBase< number >::var_inverses_ready [private]

The inverse matrices are usable. Set by the parent class via inverses_computed().

Definition at line 336 of file precondition_block_base.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Fri Feb 3 2012 06:04:10 by doxygen 1.7.2