8#include <kernel/global/muxer.hpp>
9#include <kernel/global/vector.hpp>
10#include <kernel/lafem/transfer.hpp>
21 template<
typename LocalTransfer_,
typename Mirror_>
39 template <
typename DT2_,
typename IT2_>
42 typename Mirror_::template MirrorType<DT2_, IT2_> >;
44 static constexpr bool is_global =
true;
45 static constexpr bool is_local =
false;
79 template<
typename... Args_>
99 _transfer = std::forward<LocalTransfer_>(other._transfer);
100 _vec_tmp = std::forward<LocalVectorType>(other._vec_tmp);
106 template<
typename LocalTransfer2_,
typename Mirror2_>
109 if((
void*)
this == (
void*)&other)
316 XASSERTM(
false,
"this function must not be called");
#define XASSERT(expr)
Assertion macro definition.
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
Global multiplexer/demultiplexer implementation.
bool is_child() const
Specifies whether this process represents a child in the muxer.
void join_send(const LocalVector_ &vec_src) const
Sends a join operation to the parent process.
bool is_ghost() const
Specifies whether this process is a ghost in the muxer.
bool is_parent() const
Specifies whether this process represents a parent in the muxer.
void split_recv(LocalVector_ &vec_trg) const
Receives a split operation from the parent process.
void join(const LocalVector_ &vec_src, LocalVector_ &vec_trg) const
Performs a join operation on the parent process.
void split(LocalVector_ &vec_trg, const LocalVector_ &vec_src) const
Performs a split operation on the parent process.
Global grid-transfer operator class template.
bool rest_send(const VectorType &vec_fine) const
Sends the restriction for a ghost operator.
LocalTransfer_::MatrixType LocalMatrixType
our internal local matrix type
Global::Vector< LocalVectorType, Mirror_ > VectorType
our global vector type
const LocalTransfer_ & local() const
void convert(MuxerType *coarse_muxer, const Transfer< LocalTransfer2_, Mirror2_ > &other)
container conversion function
Global::Muxer< LocalVectorType, Mirror_ > MuxerType
our coarse grid multiplexer type
bool trunc(const VectorType &vec_fine, VectorType &vec_coarse) const
Applies the truncation operator.
Transfer clone(LAFEM::CloneMode clone_mode=LAFEM::CloneMode::Weak) const
Creates a clone of this object.
bool trunc_send(const VectorType &vec_fine) const
Sends the truncation for a ghost operator.
virtual ~Transfer()
virtual destructor
std::size_t bytes() const
Transfer & operator=(Transfer &&other)
move-assign operator
const MuxerType * _coarse_muxer
the coarse-level multiplexer
bool prol(VectorType &vec_fine, const VectorType &vec_coarse) const
Applies the prolongation operator.
bool rest(const VectorType &vec_fine, VectorType &vec_coarse) const
Applies the restriction operator.
bool prol_recv(VectorType &vec_fine) const
Receives the prolongation for a ghost operator.
bool is_ghost() const
Checks whether this transfer is a ghost-operator.
void prol_cancel() const
Cancels the prolongation.
LocalVectorType _vec_tmp
a temporary local vector
Transfer(const MuxerType *coarse_muxer, Args_ &&... args)
Constructor.
Transfer(Transfer &&other)
move-constructor
Transfer()
standard constructor
LocalTransfer_ LocalTransferType
our local transfer
LocalTransfer_ _transfer
the local transfer operator
LocalTransfer_::VectorType LocalVectorType
our internal local vector type
Global vector wrapper class template.
LocalVector_ & local()
Returns a reference to the internal local LAFEM vector object.
void sync_0()
Performs a type-0 synchronization of the vector, i.e. sums up all local DOF contributions.