Reference documentation for deal.II version 9.1.1
|
#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 > &mg_dof) |
void | build (const std::vector< const DoFHandler< dim, dim > *> &mg_dof) |
virtual void | prolongate (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 > &mg_dof, 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 > *> &mg_dof, 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 > &mg_dof, 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 > *> &mg_dof, LinearAlgebra::distributed::BlockVector< Number2 > &dst, const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number >> &src) const |
std::size_t | memory_consumption () const |
Public Member Functions inherited from MGTransferBase< LinearAlgebra::distributed::BlockVector< Number > > | |
virtual | ~MGTransferBase () override=default |
Public Member Functions inherited from Subscriptor | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
Subscriptor (Subscriptor &&) noexcept | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (const Subscriptor &) |
Subscriptor & | operator= (Subscriptor &&) noexcept |
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) |
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 |
Additional Inherited Members | |
Static Public Member Functions inherited from Subscriptor | |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
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 286 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 601 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 611 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 623 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 639 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 657 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::build | ( | const DoFHandler< dim, dim > & | mg_dof | ) |
Actually build the information for the prolongation for each level.
Definition at line 666 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::build | ( | const std::vector< const DoFHandler< dim, dim > *> & | mg_dof | ) |
Same as above for the case that each block has its own DoFHandler.
Definition at line 677 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 689 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 713 of file mg_transfer_matrix_free.cc.
void MGTransferBlockMatrixFree< dim, Number >::copy_to_mg | ( | const DoFHandler< dim, spacedim > & | mg_dof, |
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 > *> & | mg_dof, |
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 > & | mg_dof, |
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 > *> & | mg_dof, |
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 | ( | ) | const |
Memory used by this object.
Definition at line 737 of file mg_transfer_matrix_free.cc.
|
static |
This class can both be used with a single DoFHandler or a separate DoFHandler for each block.
Definition at line 447 of file mg_transfer_matrix_free.h.
|
private |
Non-block matrix-free versions of transfer operation.
Definition at line 453 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 459 of file mg_transfer_matrix_free.h.