Reference documentation for deal.II version 8.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Public Member Functions | Public Attributes | Private Attributes | List of all members
IterativeInverse< VECTOR > Class Template Reference

#include <iterative_inverse.h>

Inheritance diagram for IterativeInverse< VECTOR >:
[legend]

Public Member Functions

template<class MATRIX , class PRECONDITION >
void initialize (const MATRIX &, const PRECONDITION &)
 
void clear ()
 
void vmult (VECTOR &dst, const VECTOR &src) const
 
template<class VECTOR2 >
void vmult (VECTOR2 &dst, const VECTOR2 &src) 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)
 

Public Attributes

SolverSelector< VECTOR > solver
 

Private Attributes

std_cxx1x::shared_ptr
< PointerMatrixBase< VECTOR > > 
matrix
 
std_cxx1x::shared_ptr
< PointerMatrixBase< VECTOR > > 
preconditioner
 

Detailed Description

template<class VECTOR>
class IterativeInverse< VECTOR >

Implementation of the inverse of a matrix, using an iterative method.

The function vmult() of this class starts an iterative solver in order to approximate the action of the inverse matrix.

Krylov space methods like SolverCG or SolverBicgstab become inefficient if soution down to machine accuracy is needed. This is due to the fact, that round-off errors spoil the orthogonality of the vector sequences. Therefore, a nested iteration of two methods is proposed: The outer method is SolverRichardson, since it is robust with respect to round-of errors. The inner loop is an appropriate Krylov space method, since it is fast.

// Declare related objects
ReductionControl inner_control (10, 1.e-30, 1.e-2);
inner_precondition.initialize (A, 1.2);
precondition.initialize (A, inner_precondition);
precondition.solver.select("cg");
precondition.solver.set_control(inner_control);
SolverControl outer_control(100, 1.e-16);
outer_iteration.solve (A, x, b, precondition);

Each time we call the inner loop, reduction of the residual by a factor 1.e-2 is attempted. Since the right hand side vector of the inner iteration is the residual of the outer loop, the relative errors are far from machine accuracy, even if the errors of the outer loop are in the range of machine accuracy.

Author
Guido Kanschat
Date
2010

Definition at line 79 of file iterative_inverse.h.

Member Function Documentation

template<class VECTOR >
template<class MATRIX , class PRECONDITION >
void IterativeInverse< VECTOR >::initialize ( const MATRIX m,
const PRECONDITION &  p 
)
inline

Initialization function. Provide a matrix and preconditioner for the solve in vmult().

Definition at line 135 of file iterative_inverse.h.

template<class VECTOR >
void IterativeInverse< VECTOR >::clear ( )
inline

Delete the pointers to matrix and preconditioner.

Definition at line 147 of file iterative_inverse.h.

template<class VECTOR >
void IterativeInverse< VECTOR >::vmult ( VECTOR &  dst,
const VECTOR &  src 
) const
inline

Solve for right hand side src.

Definition at line 156 of file iterative_inverse.h.

template<class VECTOR >
template<class VECTOR2 >
void IterativeInverse< VECTOR >::vmult ( VECTOR2 &  dst,
const VECTOR2 &  src 
) const
inline

Solve for right hand side src, but allow for the fact that the vectors given to this function have different type from the vectors used by the inner solver.

Definition at line 168 of file iterative_inverse.h.

Member Data Documentation

template<class VECTOR >
SolverSelector<VECTOR> IterativeInverse< VECTOR >::solver

The solver, which allows selection of the actual solver as well as adjuxtment of parameters.

Definition at line 116 of file iterative_inverse.h.

template<class VECTOR >
std_cxx1x::shared_ptr<PointerMatrixBase<VECTOR> > IterativeInverse< VECTOR >::matrix
private

The matrix in use.

Definition at line 122 of file iterative_inverse.h.

template<class VECTOR >
std_cxx1x::shared_ptr<PointerMatrixBase<VECTOR> > IterativeInverse< VECTOR >::preconditioner
private

The preconditioner to use.

Definition at line 127 of file iterative_inverse.h.


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