Reference documentation for deal.II version 9.0.0
|
#include <deal.II/multigrid/mg_base.h>
Public Member Functions | |
virtual | ~MGSmootherBase ()=default |
virtual void | clear ()=0 |
virtual void | smooth (const unsigned int level, VectorType &u, const VectorType &rhs) const =0 |
virtual void | apply (const unsigned int level, VectorType &u, const VectorType &rhs) const |
Public Member Functions inherited from Subscriptor | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
Subscriptor (Subscriptor &&) noexcept | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (const Subscriptor &) |
Subscriptor & | operator= (Subscriptor &&) noexcept |
void | subscribe (const char *identifier=nullptr) const |
void | unsubscribe (const char *identifier=nullptr) const |
unsigned int | n_subscriptions () const |
void | list_subscribers () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Additional Inherited Members | |
Static Public Member Functions inherited from Subscriptor | |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
Base class for multigrid smoothers. Does nothing but defining the interface used by multigrid methods.
The smoother interface provides two methods, a smooth() method and an apply() method. The multigrid preconditioner interfaces distinguish between the two for efficiency reasons: Upon entry to the preconditioner operations, the vector u
needs to be set to zero and smoothing starts by a simple application of the smoother on the rhs
vector. This method is provided by the apply() method of this class. It is the same as first setting u
to zero and then calling smooth(), but for many classes the separate apply() interface is more efficient because it can skip one matrix-vector product.
In the multigrid preconditioner interfaces, the apply() method is used for the pre-smoothing operation because the previous content in the solution vector needs to be overwritten for a new incoming residual. On the other hand, all subsequent operations need to smooth the content already present in the vector u
given the right hand side, which is done by smooth().
|
virtualdefault |
Virtual destructor.
|
pure virtual |
Release matrices.
Implemented in MGSmootherPrecondition< MatrixType, PreconditionerType, VectorType >, MGSmootherRelaxation< MatrixType, RelaxationType, VectorType >, mg::SmootherRelaxation< RelaxationType, VectorType >, MGSmootherIdentity< VectorType >, and MGSmootherBlock< MatrixType, RelaxationType, number >.
|
pure virtual |
Smoothing function that smooths the content in u
given the right hand side vector rhs
. This is the function used in multigrid methods.
Implemented in MGSmootherPrecondition< MatrixType, PreconditionerType, VectorType >, MGSmootherRelaxation< MatrixType, RelaxationType, VectorType >, mg::SmootherRelaxation< RelaxationType, VectorType >, MGSmootherIdentity< VectorType >, and MGSmootherBlock< MatrixType, RelaxationType, number >.
|
virtual |
As opposed to the smooth() function, this function applies the action of the smoothing, overwriting the previous content in the vector u. This function must be equivalent to the following code
but can usually be implemented more efficiently than the former. If a particular smoother does not override the apply() method, the default implementation as described here is used.
In the multigrid preconditioner interfaces, the apply() method is used for the pre-smoothing operation because the previous content in the solution vector needs to be overwritten for a new incoming residual. On the other hand, all subsequent operations need to smooth the content already present in the vector u
given the right hand side, which is done by smooth().
Reimplemented in MGSmootherPrecondition< MatrixType, PreconditionerType, VectorType >, MGSmootherRelaxation< MatrixType, RelaxationType, VectorType >, and mg::SmootherRelaxation< RelaxationType, VectorType >.
Definition at line 32 of file mg_base.cc.