Reference documentation for deal.II version Git 03163e8c3d 2019-04-23 18:40:00 -0600
MGSmootherBase< VectorType > Class Template Referenceabstract

#include <deal.II/multigrid/mg_base.h>

Inheritance diagram for MGSmootherBase< VectorType >:
[legend]

## Public Member Functions

virtual ~MGSmootherBase () override=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 ()

Subscriptoroperator= (const Subscriptor &)

Subscriptoroperator= (Subscriptor &&) noexcept

void subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const

void unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const

unsigned int n_subscriptions () const

template<typename StreamType >
void list_subscribers (StreamType &stream) const

void list_subscribers () const

template<class Archive >
void serialize (Archive &ar, const unsigned int version)

Static Public Member Functions inherited from Subscriptor
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)

static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)

## Detailed Description

### template<typename VectorType> class MGSmootherBase< VectorType >

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().

Definition at line 245 of file mg_base.h.

## ◆ ~MGSmootherBase()

template<typename VectorType>
 virtual MGSmootherBase< VectorType >::~MGSmootherBase ( )
overridevirtualdefault

Virtual destructor.

## ◆ clear()

template<typename VectorType>
 virtual void MGSmootherBase< VectorType >::clear ( )
pure virtual

## ◆ smooth()

template<typename VectorType>
 virtual void MGSmootherBase< VectorType >::smooth ( const unsigned int level, VectorType & u, const VectorType & rhs ) const
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.

## ◆ apply()

template<typename VectorType>
 void MGSmootherBase< VectorType >::apply ( const unsigned int level, VectorType & u, const VectorType & rhs ) const
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

u = 0;
smooth(level, u, rhs);

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().

Definition at line 34 of file mg_base.cc.

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