![]() |
Reference documentation for deal.II version 8.1.0
|
#include <precondition.h>
Public Member Functions | |
PreconditionLACSolver () | |
void | initialize (SOLVER &, const MATRIX &, const PRECONDITION &) |
template<class VECTOR > | |
void | vmult (VECTOR &, const VECTOR &) 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) |
Private Attributes | |
SmartPointer< SOLVER, PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION > > | solver |
SmartPointer< const MATRIX, PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION > > | matrix |
SmartPointer< const PRECONDITION, PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION > > | precondition |
Preconditioner using an iterative solver. This preconditioner uses a fully initialized LAC iterative solver for the approximate inverse of the matrix. Naturally, this solver needs another preconditionig method.
Usually, the use of ReductionControl is preferred over the use of the basic SolverControl in defining this solver.
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 790 of file precondition.h.
PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION >::PreconditionLACSolver | ( | ) |
Constructor. All work is done in initialize.
void PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION >::initialize | ( | SOLVER & | , |
const MATRIX & | , | ||
const PRECONDITION & | |||
) |
Initialization function. Provide a solver object, a matrix, and another preconditioner for this.
void PreconditionLACSolver< SOLVER, MATRIX, PRECONDITION >::vmult | ( | VECTOR & | , |
const VECTOR & | |||
) | const |
Execute preconditioning.
|
private |
The solver object to use.
Definition at line 819 of file precondition.h.
|
private |
The matrix in use.
Definition at line 824 of file precondition.h.
|
private |
The preconditioner to use.
Definition at line 829 of file precondition.h.