Reference documentation for deal.II version Git a73d35cdfe 2020-05-28 10:34:58 +0200
MGTransferBase< VectorType > Class Template Referenceabstract

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

Inheritance diagram for MGTransferBase< VectorType >:
[legend]

## Public Member Functions

virtual ~MGTransferBase () override=default

virtual void prolongate (const unsigned int to_level, VectorType &dst, const VectorType &src) const =0

virtual void restrict_and_add (const unsigned int from_level, VectorType &dst, const VectorType &src) const =0

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 MGTransferBase< VectorType >

Base class used to declare the operations needed by a concrete class implementing prolongation and restriction of vectors in the multigrid context. This class is abstract and has no implementation of these operations.

There are several derived classes, reflecting the fact that vector types and numbering of the fine-grid discretization and of the multi-level implementation are independent.

If you use multigrid for a single PDE or for your complete system of equations, you will use MGTransferPrebuilt together with Multigrid. The vector types used on the fine grid as well as for the multilevel operations may be Vector or BlockVector. In both cases, MGTransferPrebuilt will operate on all components of the solution.

Note
For the following, it is important to realize the difference between a solution component and a solution block. The distinction only applies if vector valued elements are used, but is quite important then. This is reflected in the fact that it is not possible right now to use transfer classes based on MGTransferComponentBase for genuine vector valued elements, but descendants of MGTransferBlockBase would have to be applied. In the following text, we will use the term block, but remark that it might refer to components as well.
Todo:
update the following documentation, since it does not reflect the latest changes in structure.

For mixed systems, it may be required to do multigrid only for a single component or for some components. The classes MGTransferSelect and MGTransferBlock handle these cases.

MGTransferSelect is used if you use multigrid (on Vector objects) for a single component, possibly grouped using mg_target_component.

The class MGTransferBlock handles the case where your multigrid method operates on BlockVector objects. These can contain all or a consecutive set of the blocks of the complete system. Since most smoothers cannot operate on block structures, it is not clear whether this case is really useful. Therefore, a tested implementation of this case will be supplied when needed.

Definition at line 177 of file mg_base.h.

## ◆ ~MGTransferBase()

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

Destructor. Does nothing here, but needs to be declared virtual anyway.

## ◆ prolongate()

template<typename VectorType>
 virtual void MGTransferBase< VectorType >::prolongate ( const unsigned int to_level, VectorType & dst, const VectorType & src ) const
pure virtual

Prolongate a vector from level to_level-1 to level to_level. The previous content of dst is overwritten.

• src is a vector with as many elements as there are degrees of freedom on the coarser level involved.
• dst has as many elements as there are degrees of freedom on the finer level.

Restrict a vector from level from_level to level from_level-1 and add this restriction to dst. If the region covered by cells on level from_level is smaller than that of level from_level-1 (local refinement), then some degrees of freedom in dst are active and will not be altered. For the other degrees of freedom, the result of the restriction is added.