Reference documentation for deal.II version GIT 7bd1c95dbb 2022-06-29 20:50:01+00:00
\(\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\}}\)
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MGTransferGlobalCoarsening< dim, VectorType > Class Template Reference

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

Inheritance diagram for MGTransferGlobalCoarsening< dim, VectorType >:
[legend]

Public Types

using Number = typename VectorType::value_type
 

Public Member Functions

 MGTransferGlobalCoarsening (const MGLevelObject< MGTwoLevelTransfer< dim, VectorType >> &transfer, const std::function< void(const unsigned int, VectorType &)> &initialize_dof_vector={})
 
void build (const std::vector< std::shared_ptr< const Utilities::MPI::Partitioner >> &external_partitioners={})
 
void build (const std::function< void(const unsigned int, VectorType &)> &initialize_dof_vector)
 
void prolongate (const unsigned int to_level, VectorType &dst, const VectorType &src) const override
 
void prolongate_and_add (const unsigned int to_level, VectorType &dst, const VectorType &src) const override
 
virtual void restrict_and_add (const unsigned int from_level, VectorType &dst, const VectorType &src) const override
 
template<class InVector , int spacedim>
void copy_to_mg (const DoFHandler< dim, spacedim > &dof_handler, MGLevelObject< VectorType > &dst, const InVector &src) const
 
template<class OutVector , int spacedim>
void copy_from_mg (const DoFHandler< dim, spacedim > &dof_handler, OutVector &dst, const MGLevelObject< VectorType > &src) const
 
template<class InVector >
void interpolate_to_mg (MGLevelObject< VectorType > &dst, const InVector &src) const
 
template<class InVector , int spacedim>
void interpolate_to_mg (const DoFHandler< dim, spacedim > &dof_handler, MGLevelObject< VectorType > &dst, const InVector &src) const
 
std::size_t memory_consumption () const
 
unsigned int min_level () const
 
unsigned int max_level () const
 

Private Member Functions

void initialize_dof_vector (const unsigned int level, VectorType &vector) const
 

Private Attributes

MGLevelObject< MGTwoLevelTransfer< dim, VectorType > > transfer
 
std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > external_partitioners
 

Subscriptor functionality

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

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

Detailed Description

template<int dim, typename VectorType>
class MGTransferGlobalCoarsening< dim, VectorType >

Implementation of the MGTransferBase. In contrast to other multigrid transfer operators, the user can provide separate transfer operators of type MGTwoLevelTransfer between each level.

This class currently only works for the tensor-product finite elements FE_Q and FE_DGQ and simplex elements FE_SimplexP and FE_SimplexDGP as well as for systems involving multiple components of one of these elements. Other elements are currently not implemented.

The implementation of this class is explained in detail in [116].

Definition at line 481 of file mg_transfer_global_coarsening.h.

Member Typedef Documentation

◆ Number

template<int dim, typename VectorType >
using MGTransferGlobalCoarsening< dim, VectorType >::Number = typename VectorType::value_type

Value type.

Definition at line 487 of file mg_transfer_global_coarsening.h.

Constructor & Destructor Documentation

◆ MGTransferGlobalCoarsening()

template<int dim, typename VectorType >
MGTransferGlobalCoarsening< dim, VectorType >::MGTransferGlobalCoarsening ( const MGLevelObject< MGTwoLevelTransfer< dim, VectorType >> &  transfer,
const std::function< void(const unsigned int, VectorType &)> &  initialize_dof_vector = {} 
)

Constructor taking a collection of transfer operators (with the coarsest level kept empty in transfer) and an optional function that initializes the internal level vectors within the function call copy_to_mg() if used in the context of PreconditionMG.

Member Function Documentation

◆ build() [1/2]

template<int dim, typename VectorType >
void MGTransferGlobalCoarsening< dim, VectorType >::build ( const std::vector< std::shared_ptr< const Utilities::MPI::Partitioner >> &  external_partitioners = {})

Similar function to MGTransferMatrixFree::build() with the difference that the information for the prolongation for each level has already been built. So this function only tries to optimize the data structures of the two-level transfer operators, e.g., by enabling inplace vector operations, by checking if external_partitioners and the internal ones are compatible.

◆ build() [2/2]

template<int dim, typename VectorType >
void MGTransferGlobalCoarsening< dim, VectorType >::build ( const std::function< void(const unsigned int, VectorType &)> &  initialize_dof_vector)

Same as above but taking a lambda for initializing vector instead of partitioners.

◆ prolongate()

template<int dim, typename VectorType >
void MGTransferGlobalCoarsening< dim, VectorType >::prolongate ( const unsigned int  to_level,
VectorType &  dst,
const VectorType &  src 
) const
overridevirtual

Perform prolongation.

Implements MGTransferBase< VectorType >.

◆ prolongate_and_add()

template<int dim, typename VectorType >
void MGTransferGlobalCoarsening< dim, VectorType >::prolongate_and_add ( const unsigned int  to_level,
VectorType &  dst,
const VectorType &  src 
) const
overridevirtual

Perform prolongation.

Reimplemented from MGTransferBase< VectorType >.

◆ restrict_and_add()

template<int dim, typename VectorType >
virtual void MGTransferGlobalCoarsening< dim, VectorType >::restrict_and_add ( const unsigned int  from_level,
VectorType &  dst,
const VectorType &  src 
) const
overridevirtual

Perform restriction.

Implements MGTransferBase< VectorType >.

◆ copy_to_mg()

template<int dim, typename VectorType >
template<class InVector , int spacedim>
void MGTransferGlobalCoarsening< dim, VectorType >::copy_to_mg ( const DoFHandler< dim, spacedim > &  dof_handler,
MGLevelObject< VectorType > &  dst,
const InVector &  src 
) const

Initialize internal vectors and copy src vector to the finest multigrid level.

Note
DoFHandler is not needed here, but is required by the interface.

◆ copy_from_mg()

template<int dim, typename VectorType >
template<class OutVector , int spacedim>
void MGTransferGlobalCoarsening< dim, VectorType >::copy_from_mg ( const DoFHandler< dim, spacedim > &  dof_handler,
OutVector &  dst,
const MGLevelObject< VectorType > &  src 
) const

Initialize internal vectors and copy the values on the finest multigrid level to dst vector.

Note
DoFHandler is not needed here, but is required by the interface.

◆ interpolate_to_mg() [1/2]

template<int dim, typename VectorType >
template<class InVector >
void MGTransferGlobalCoarsening< dim, VectorType >::interpolate_to_mg ( MGLevelObject< VectorType > &  dst,
const InVector &  src 
) const

Interpolate fine-mesh field src to each multigrid level in dof_handler and store the result in dst. This function is different from restriction, where a weighted residual is transferred to a coarser level (transposition of prolongation matrix).

The argument dst has to be initialized with the correct size according to the number of levels of the triangulation.

If an inner vector of dst is empty or has incorrect locally owned size, it will be resized to locally relevant degrees of freedom on each level.

◆ interpolate_to_mg() [2/2]

template<int dim, typename VectorType >
template<class InVector , int spacedim>
void MGTransferGlobalCoarsening< dim, VectorType >::interpolate_to_mg ( const DoFHandler< dim, spacedim > &  dof_handler,
MGLevelObject< VectorType > &  dst,
const InVector &  src 
) const

Like the above function but with a user-provided DoFHandler as additional argument. However, this DoFHandler is not used internally, but is required to be able to use MGTransferGlobalCoarsening and MGTransferMatrixFree as template argument.

◆ memory_consumption()

template<int dim, typename VectorType >
std::size_t MGTransferGlobalCoarsening< dim, VectorType >::memory_consumption ( ) const

Return the memory consumption of the allocated memory in this class.

Note
Counts also the memory consumption of the underlying two-level transfer operators.

◆ min_level()

template<int dim, typename VectorType >
unsigned int MGTransferGlobalCoarsening< dim, VectorType >::min_level ( ) const

Minimum level.

◆ max_level()

template<int dim, typename VectorType >
unsigned int MGTransferGlobalCoarsening< dim, VectorType >::max_level ( ) const

Maximum level.

◆ initialize_dof_vector()

template<int dim, typename VectorType >
void MGTransferGlobalCoarsening< dim, VectorType >::initialize_dof_vector ( const unsigned int  level,
VectorType &  vector 
) const
private

Function to initialize internal level vectors.

Member Data Documentation

◆ transfer

template<int dim, typename VectorType >
MGLevelObject<MGTwoLevelTransfer<dim, VectorType> > MGTransferGlobalCoarsening< dim, VectorType >::transfer
private

Collection of the two-level transfer operators.

Definition at line 628 of file mg_transfer_global_coarsening.h.

◆ external_partitioners

template<int dim, typename VectorType >
std::vector<std::shared_ptr<const Utilities::MPI::Partitioner> > MGTransferGlobalCoarsening< dim, VectorType >::external_partitioners
private

External partitioners used during initialize_dof_vector().

Definition at line 634 of file mg_transfer_global_coarsening.h.


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