MGTransferBase< VECTOR > Class Template Reference
[Multilevel support]

Inheritance diagram for MGTransferBase< VECTOR >:
Inheritance graph
[legend]

List of all members.

Public Member Functions

virtual ~MGTransferBase ()
virtual void prolongate (const unsigned int to_level, VECTOR &dst, const VECTOR &src) const =0
virtual void restrict_and_add (const unsigned int from_level, VECTOR &dst, const VECTOR &src) const =0

Detailed Description

template<class VECTOR>
class MGTransferBase< VECTOR >

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 PDF 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 mutligrid (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

Constructor & Destructor Documentation

template<class VECTOR>
virtual MGTransferBase< VECTOR >::~MGTransferBase (  )  [virtual]

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


Member Function Documentation

template<class VECTOR>
virtual void MGTransferBase< VECTOR >::prolongate ( const unsigned int  to_level,
VECTOR &  dst,
const VECTOR &  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< VECTOR >, MGTransferBlock< number >, MGTransferBlockSelect< number >, and MGTransferSelect< number >.

template<class VECTOR>
virtual void MGTransferBase< VECTOR >::restrict_and_add ( const unsigned int  from_level,
VECTOR &  dst,
const VECTOR &  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 degress 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< VECTOR >, MGTransferBlock< number >, MGTransferBlockSelect< number >, and MGTransferSelect< number >.


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

deal.II documentation generated on Mon Nov 23 22:57:57 2009 by doxygen 1.6.1