22#include <core/debug/Debug.h>
23#include <core/mpi/RecvBuffer.h>
24#include <core/mpi/SendBuffer.h>
25#include <domain_decomposition/IBlock.h>
26#include <field/FlagUID.h>
27#include <field/communication/PackInfo.h>
28#include <stencil/Directions.h>
36namespace communication {
38template <
typename GhostLayerField_T>
51template <
typename GhostLayerField_T,
typename Boundary_T>
67 std::shared_ptr<Boundary_T> boundary) {
68 m_lattice = std::move(lattice);
69 m_boundary = std::move(boundary);
76 stencil::Direction dir)
override {
89 mpi::RecvBuffer &buffer)
override {
98 auto const begin = [
gl, dir](
auto const *field) {
99 return field->beginGhostLayerOnly(
gl, dir);
117 auto const offset = m_lattice->get_block_corner(*
receiver,
true);
118 typename Boundary_T::value_type value;
123 m_boundary->unpack_node(node, value);
130 mpi::SendBuffer &buffer)
const override {
139 auto const begin = [
gl, dir](
auto const *field) {
140 return field->beginSliceBeforeGhostLayer(dir,
cell_idx_c(
gl));
154 auto const offset = m_lattice->get_block_corner(*
sender,
true);
158 buffer << m_boundary->get_node_value_at_boundary(node);
164 std::shared_ptr<LatticeWalberla> m_lattice;
165 std::shared_ptr<Boundary_T> m_boundary;
bool threadsafeReceiving() const override
~BoundaryFlagPackInfo() override=default
bool constantDataExchange() const override
void setup_boundary_handle(std::shared_ptr< LatticeWalberla > lattice, std::shared_ptr< Boundary_T > boundary)
~BoundaryPackInfo() override=default
void unpackData(IBlock *receiver, stencil::Direction dir, mpi::RecvBuffer &buffer) override
void packDataImpl(IBlock const *sender, stencil::Direction dir, mpi::SendBuffer &buffer) const override
void communicateLocal(IBlock const *sender, IBlock *receiver, stencil::Direction dir) override
bool threadsafeReceiving() const override
FlagUID const Domain_flag
Flag for domain cells, i.e.
FlagUID const Boundary_flag
Flag for boundary cells.
bool constantDataExchange() const override
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
\file PackInfoPdfDoublePrecision.cpp \author pystencils