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
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 prolongate_and_add (const unsigned int to_level, VectorType &dst, const VectorType &src) const
 
virtual void restrict_and_add (const unsigned int from_level, VectorType &dst, const VectorType &src) const =0
 

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 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 171 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 MGTransferBlock< number >, MGTransferBlockMatrixFreeBase< dim, Number, TransferType >, MGTransferBlockMatrixFreeBase< dim, Number, MGTransferMatrixFree< dim, Number > >, MGTransferMatrixFree< dim, Number >, MGTransferBlockSelect< number >, MGTransferSelect< number >, MGTransferPrebuilt< VectorType >, and MGTransferGlobalCoarsening< dim, VectorType >.

◆ prolongate_and_add()

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

Prolongate a vector from level to_level-1 to level to_level, summing into the previous content of dst.

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

Reimplemented in MGTransferBlockMatrixFreeBase< dim, Number, TransferType >, MGTransferBlockMatrixFreeBase< dim, Number, MGTransferMatrixFree< dim, Number > >, and MGTransferGlobalCoarsening< dim, VectorType >.

Definition at line 47 of file mg_base.cc.

◆ 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 MGTransferBlock< number >, MGTransferBlockMatrixFreeBase< dim, Number, TransferType >, MGTransferBlockMatrixFreeBase< dim, Number, MGTransferMatrixFree< dim, Number > >, MGTransferMatrixFree< dim, Number >, MGTransferBlockSelect< number >, MGTransferSelect< number >, MGTransferPrebuilt< VectorType >, and MGTransferGlobalCoarsening< dim, VectorType >.


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