Reference documentation for deal.II version 9.3.3
|
#include <deal.II/multigrid/mg_transfer_matrix_free.h>
Public Member Functions | |
MGTransferBlockMatrixFree ()=default | |
MGTransferBlockMatrixFree (const MGConstrainedDoFs &mg_constrained_dofs) | |
MGTransferBlockMatrixFree (const std::vector< MGConstrainedDoFs > &mg_constrained_dofs) | |
virtual | ~MGTransferBlockMatrixFree () override=default |
void | initialize_constraints (const MGConstrainedDoFs &mg_constrained_dofs) |
void | initialize_constraints (const std::vector< MGConstrainedDoFs > &mg_constrained_dofs) |
void | clear () |
void | build (const DoFHandler< dim, dim > &dof_handler) |
void | build (const std::vector< const DoFHandler< dim, dim > * > &dof_handler) |
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 |
std::size_t | memory_consumption () const |
virtual void | prolongate_and_add (const unsigned int to_level, LinearAlgebra::distributed::BlockVector< Number > &dst, const LinearAlgebra::distributed::BlockVector< Number > &src) const |
Static Public Attributes | |
static const bool | supports_dof_handler_vector = true |
Private Attributes | |
std::vector< MGTransferMatrixFree< dim, Number > > | matrix_free_transfer_vector |
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. | |
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) |
using | map_value_type = decltype(counter_map)::value_type |
using | map_iterator = decltype(counter_map)::iterator |
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 |
Implementation of the MGTransferBase interface for which the transfer operations is implemented in a matrix-free way based on the interpolation matrices of the underlying finite element. This requires considerably less memory than MGTransferPrebuilt and can also be considerably faster than that variant.
This class works with LinearAlgebra::distributed::BlockVector and performs exactly the same transfer operations for each block as MGTransferMatrixFree. Both the cases that the same DoFHandler is used for all the blocks and that each block uses its own DoFHandler are supported.
Definition at line 317 of file mg_transfer_matrix_free.h.
|
default |
Constructor without constraint matrices. Use this constructor only with discontinuous finite elements or with no local refinement.
MGTransferBlockMatrixFree< dim, Number >::MGTransferBlockMatrixFree | ( | const MGConstrainedDoFs & | mg_constrained_dofs | ) |
Constructor with constraints. Equivalent to the default constructor followed by initialize_constraints().
Definition at line 682 of file mg_transfer_matrix_free.cc.
MGTransferBlockMatrixFree< dim, Number >::MGTransferBlockMatrixFree | ( | const std::vector< MGConstrainedDoFs > & | mg_constrained_dofs | ) |
Same as above for the case that each block has its own DoFHandler.
Definition at line 692 of file mg_transfer_matrix_free.cc.
|
overridevirtualdefault |
Destructor.
void MGTransferBlockMatrixFree< dim, Number >::initialize_constraints | ( | const MGConstrainedDoFs & | mg_constrained_dofs | ) |
Initialize the constraints to be used in build().
Definition at line 704 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::initialize_constraints | ( | const std::vector< MGConstrainedDoFs > & | mg_constrained_dofs | ) |
Same as above for the case that each block has its own DoFHandler.
Definition at line 720 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::clear |
Reset the object to the state it had right after the default constructor.
Definition at line 738 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::build | ( | const DoFHandler< dim, dim > & | dof_handler | ) |
Actually build the information for the prolongation for each level.
Definition at line 747 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::build | ( | const std::vector< const DoFHandler< dim, dim > * > & | dof_handler | ) |
Same as above for the case that each block has its own DoFHandler.
Definition at line 758 of file mg_transfer_matrix_free.cc.
|
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 > >.
Definition at line 770 of file mg_transfer_matrix_free.cc.
|
overridevirtual |
Definition at line 794 of file mg_transfer_matrix_free.cc.
|
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 > >.
Definition at line 818 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::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 MGTransferBlockMatrixFree< dim, Number >::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 MGTransferBlockMatrixFree< dim, Number >::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 MGTransferBlockMatrixFree< dim, Number >::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.
std::size_t MGTransferBlockMatrixFree< dim, Number >::memory_consumption |
Memory used by this object.
Definition at line 842 of file mg_transfer_matrix_free.cc.
|
virtualinherited |
Prolongate a vector from level to_level-1
to level to_level
, summing into the previous content of dst
.
Definition at line 205 of file mg_base.cc.
|
static |
This class can both be used with a single DoFHandler or a separate DoFHandler for each block.
Definition at line 484 of file mg_transfer_matrix_free.h.
|
private |
Non-block matrix-free versions of transfer operation.
Definition at line 490 of file mg_transfer_matrix_free.h.
|
private |
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 496 of file mg_transfer_matrix_free.h.