Reference documentation for deal.II version 9.4.1
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
Public Member Functions | List of all members
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
 

Subscriptor functionality

Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class.

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)
 
using map_value_type = decltype(counter_map)::value_type
 
using map_iterator = decltype(counter_map)::iterator
 
std::atomic< unsigned intcounter
 
std::map< std::string, unsigned intcounter_map
 
std::vector< std::atomic< bool > * > validity_pointers
 
const std::type_info * object_info
 
static std::mutex mutex
 
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 
void check_no_subscribers () const noexcept
 

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 251 of file mg_base.h.

Constructor & Destructor Documentation

◆ ~MGSmootherBase()

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

Virtual destructor.

Member Function Documentation

◆ 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.

Implemented in MGSmootherIdentity< VectorType >, MGSmootherRelaxation< MatrixType, RelaxationType, VectorType >, mg::SmootherRelaxation< RelaxationType, VectorType >, and MGSmootherPrecondition< MatrixType, PreconditionerType, VectorType >.

◆ 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);
virtual void smooth(const unsigned int level, VectorType &u, const VectorType &rhs) const =0
unsigned int level
Definition: grid_out.cc:4606

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 MGSmootherRelaxation< MatrixType, RelaxationType, VectorType >, mg::SmootherRelaxation< RelaxationType, VectorType >, and MGSmootherPrecondition< MatrixType, PreconditionerType, VectorType >.

Definition at line 35 of file mg_base.cc.


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