Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
Public Member Functions | List of all members
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)
 

Additional Inherited Members

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

Author
Wolfgang Bangerth, Guido Kanschat, 1999, 2002, 2007

Definition at line 177 of file mg_base.h.

Constructor & Destructor Documentation

◆ ~MGTransferBase()

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

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

Member Function Documentation

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

Implemented in MGTransferPrebuilt< VectorType >, MGTransferBlockSelect< number >, MGTransferBlockMatrixFree< dim, Number >, MGTransferSelect< number >, MGTransferBlock< number >, and MGTransferMatrixFree< dim, Number >.

◆ restrict_and_add()

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

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.

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

Implemented in MGTransferPrebuilt< VectorType >, MGTransferBlockMatrixFree< dim, Number >, MGTransferBlockSelect< number >, MGTransferSelect< number >, MGTransferBlock< number >, and MGTransferMatrixFree< dim, Number >.


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