Reference documentation for deal.II version 9.4.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 > &dof_handler) |
void | build (const std::vector< const DoFHandler< dim, dim > * > &dof_handler) |
std::size_t | memory_consumption () const |
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 |
void | copy_to_mg (const DoFHandler< dim, spacedim > &dof_handler, MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &dst, const LinearAlgebra::distributed::BlockVector< Number2 > &src) const |
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 |
void | copy_from_mg (const DoFHandler< dim, spacedim > &dof_handler, LinearAlgebra::distributed::BlockVector< Number2 > &dst, const MGLevelObject< LinearAlgebra::distributed::BlockVector< Number > > &src) const |
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 |
Protected Member Functions | |
const MGTransferMatrixFree< dim, Number > & | get_matrix_free_transfer (const unsigned int b) const override |
Protected Attributes | |
const bool | same_for_all |
Private Attributes | |
std::vector< MGTransferMatrixFree< dim, Number > > | matrix_free_transfer_vector |
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 464 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 708 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 720 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 734 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 750 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 813 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 768 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 779 of file mg_transfer_matrix_free.cc.
std::size_t MGTransferBlockMatrixFree< dim, Number >::memory_consumption |
Memory used by this object.
Definition at line 791 of file mg_transfer_matrix_free.cc.
|
overrideprotectedvirtual |
Return the right non-block transfer operator. Has to be implemented by the derived class.
Implements MGTransferBlockMatrixFreeBase< dim, Number, MGTransferMatrixFree< dim, Number > >.
Definition at line 803 of file mg_transfer_matrix_free.cc.
|
overridevirtualinherited |
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 > >.
|
overridevirtualinherited |
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 > >.
|
overridevirtualinherited |
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 > >.
|
inherited |
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.
|
inherited |
Same as above for the case that each block has its own DoFHandler.
|
inherited |
Transfer from multi-level block-vector to normal vector.
|
inherited |
Same as above for the case that each block has its own DoFHandler.
|
private |
Non-block matrix-free versions of transfer operation.
Definition at line 538 of file mg_transfer_matrix_free.h.
|
staticinherited |
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.
|
protectedinherited |
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.