Reference documentation for deal.II version 9.4.1
|
#include <deal.II/multigrid/mg_transfer_matrix_free.h>
Public Member Functions | |
MGTransferBlockMatrixFreeBase (const bool same_for_all) | |
virtual void | prolongate (const unsigned int to_level, LinearAlgebra::distributed::BlockVector< Number > &dst, const LinearAlgebra::distributed::BlockVector< Number > &src) const override |
virtual void | prolongate_and_add (const unsigned int to_level, LinearAlgebra::distributed::BlockVector< Number > &dst, const LinearAlgebra::distributed::BlockVector< Number > &src) const override |
virtual void | restrict_and_add (const unsigned int from_level, LinearAlgebra::distributed::BlockVector< Number > &dst, const LinearAlgebra::distributed::BlockVector< Number > &src) const override |
template<typename Number2 , int spacedim> | |
void | copy_to_mg (const DoFHandler< dim, spacedim > &dof_handler, MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &dst, const LinearAlgebra::distributed::BlockVector< Number2 > &src) const |
template<typename Number2 , int spacedim> | |
void | copy_to_mg (const std::vector< const DoFHandler< dim, spacedim > * > &dof_handler, MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &dst, const LinearAlgebra::distributed::BlockVector< Number2 > &src) const |
template<typename Number2 , int spacedim> | |
void | copy_from_mg (const DoFHandler< dim, spacedim > &dof_handler, LinearAlgebra::distributed::BlockVector< Number2 > &dst, const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &src) const |
template<typename Number2 , int spacedim> | |
void | copy_from_mg (const std::vector< const DoFHandler< dim, spacedim > * > &dof_handler, LinearAlgebra::distributed::BlockVector< Number2 > &dst, const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &src) const |
Static Public Attributes | |
static const bool | supports_dof_handler_vector = true |
Protected Member Functions | |
virtual const TransferType & | get_matrix_free_transfer (const unsigned int b) const =0 |
Protected Attributes | |
const bool | same_for_all |
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 int > | counter |
std::map< std::string, unsigned int > | counter_map |
std::vector< std::atomic< bool > * > | validity_pointers |
const std::type_info * | object_info |
static std::mutex | mutex |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
void | check_no_subscribers () const noexcept |
Base class of MGTransferBlockMatrixFree. While MGTransferBlockMatrixFree contains all the setup routines of the transfer operators for the blocks, this class simply applies them, e.g., for restricting and prolongating.
Definition at line 320 of file mg_transfer_matrix_free.h.
|
inline |
Definition at line 324 of file mg_transfer_matrix_free.h.
|
overridevirtual |
Prolongate a vector from level to_level-1
to level to_level
using the embedding matrices of the underlying finite element. The previous content of dst
is overwritten.
to_level | The index of the level to prolongate to, which is the level 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. |
Implements MGTransferBase< LinearAlgebra::distributed::BlockVector< Number > >.
|
overridevirtual |
Prolongate a vector from level to_level-1
to level to_level
, summing into the previous content of dst
.
Reimplemented from MGTransferBase< LinearAlgebra::distributed::BlockVector< Number > >.
|
overridevirtual |
Restrict a vector from level from_level
to level from_level-1
using the transpose operation of the prolongate() method. 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.
from_level | The index of the level to restrict from, which is the level of src . |
src | is a vector with as many elements as there are degrees of freedom on the finer level involved. |
dst | has as many elements as there are degrees of freedom on the coarser level. |
Implements MGTransferBase< LinearAlgebra::distributed::BlockVector< Number > >.
void MGTransferBlockMatrixFreeBase< dim, Number, TransferType >::copy_to_mg | ( | const DoFHandler< dim, spacedim > & | dof_handler, |
MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > & | dst, | ||
const LinearAlgebra::distributed::BlockVector< Number2 > & | src | ||
) | const |
Transfer from a block-vector on the global grid to block-vectors defined on each of the levels separately for active degrees of freedom. In particular, for a globally refined mesh only the finest level in dst
is filled as a plain copy of src
. All the other level objects are left untouched.
This function will initialize dst
accordingly if needed as required by the Multigrid class.
void MGTransferBlockMatrixFreeBase< dim, Number, TransferType >::copy_to_mg | ( | const std::vector< const DoFHandler< dim, spacedim > * > & | dof_handler, |
MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > & | dst, | ||
const LinearAlgebra::distributed::BlockVector< Number2 > & | src | ||
) | const |
Same as above for the case that each block has its own DoFHandler.
void MGTransferBlockMatrixFreeBase< dim, Number, TransferType >::copy_from_mg | ( | const DoFHandler< dim, spacedim > & | dof_handler, |
LinearAlgebra::distributed::BlockVector< Number2 > & | dst, | ||
const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > & | src | ||
) | const |
Transfer from multi-level block-vector to normal vector.
void MGTransferBlockMatrixFreeBase< dim, Number, TransferType >::copy_from_mg | ( | const std::vector< const DoFHandler< dim, spacedim > * > & | dof_handler, |
LinearAlgebra::distributed::BlockVector< Number2 > & | dst, | ||
const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > & | src | ||
) | const |
Same as above for the case that each block has its own DoFHandler.
|
protectedpure virtual |
Return the right non-block transfer operator. Has to be implemented by the derived class.
Implemented in MGTransferBlockGlobalCoarsening< dim, VectorType >, and MGTransferBlockMatrixFree< dim, Number >.
|
static |
This class can both be used with a single DoFHandler or a separate DoFHandler for each block.
Definition at line 431 of file mg_transfer_matrix_free.h.
|
protected |
A flag to indicate whether the same DoFHandler is used for all the components or if each block has its own DoFHandler.
Definition at line 445 of file mg_transfer_matrix_free.h.