![]() |
Reference documentation for deal.II version 8.1.0
|
#include <iterative_inverse.h>
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 |
![]() | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (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 |
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.
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.
Definition at line 79 of file iterative_inverse.h.
|
inline |
Initialization function. Provide a matrix and preconditioner for the solve in vmult().
Definition at line 135 of file iterative_inverse.h.
|
inline |
Delete the pointers to matrix and preconditioner.
Definition at line 147 of file iterative_inverse.h.
|
inline |
Solve for right hand side src
.
Definition at line 156 of file iterative_inverse.h.
|
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.
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.
|
private |
The matrix in use.
Definition at line 122 of file iterative_inverse.h.
|
private |
The preconditioner to use.
Definition at line 127 of file iterative_inverse.h.