waLBerla 7.2
Loading...
Searching...
No Matches
walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter Class Reference

Detailed Description

Adapter to use a communication::UniformPackInfo in a NonUniformBufferedScheme.

No communication between coarse <-> fine blocks happens.

#include <UniformToNonUniformPackInfoAdapter.h>

+ Inheritance diagram for walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter:

Construction & Destruction

shared_ptr< walberla::communication::UniformPackInfouniformPackInfo_
 
 UniformToNonUniformPackInfoAdapter (const shared_ptr< walberla::communication::UniformPackInfo > &uniformPackInfo)
 
 ~UniformToNonUniformPackInfoAdapter () override=default
 
bool constantDataExchange () const override
 Should return true if the amount of data that is packed for a given block in direction "dir" is guaranteed to remain constant over time.
 
bool threadsafeReceiving () const override
 Must return false if calling unpackData*() and/or communicateLocal*() methods is not thread-safe.
 
void unpackDataEqualLevel (Block *receiver, stencil::Direction dir, mpi::RecvBuffer &buffer) override
 If NOT thread-safe, threadsafeReceiving must return false!
 
void communicateLocalEqualLevel (const Block *sender, Block *receiver, stencil::Direction dir) override
 If NOT thread-safe, threadsafeReceiving must return false!
 
void unpackDataCoarseToFine (Block *, const BlockID &, stencil::Direction, mpi::RecvBuffer &) override
 
void communicateLocalCoarseToFine (const Block *, Block *, stencil::Direction) override
 
void unpackDataFineToCoarse (Block *, const BlockID &, stencil::Direction, mpi::RecvBuffer &) override
 
void communicateLocalFineToCoarse (const Block *, Block *, stencil::Direction) override
 
void packDataEqualLevelImpl (const Block *sender, stencil::Direction dir, mpi::SendBuffer &buffer) const override
 Must be thread-safe!
 
void packDataCoarseToFineImpl (const Block *, const BlockID &, stencil::Direction, mpi::SendBuffer &) const override
 
void packDataFineToCoarseImpl (const Block *, const BlockID &, stencil::Direction, mpi::SendBuffer &) const override
 

Additional Inherited Members

- Public Member Functions inherited from walberla::blockforest::communication::NonUniformPackInfo
 NonUniformPackInfo ()=default
 
virtual ~NonUniformPackInfo ()=default
 
void packDataEqualLevel (const Block *sender, stencil::Direction dir, mpi::SendBuffer &buffer) const
 Must be thread-safe! Calls packDataEqualLevelImpl.
 
void packDataCoarseToFine (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir, mpi::SendBuffer &buffer) const
 
void packDataFineToCoarse (const Block *fineSender, const BlockID &coarseReceiver, stencil::Direction dir, mpi::SendBuffer &buffer) const
 
void clearBufferSizeCheckMap ()
 
- Protected Member Functions inherited from walberla::blockforest::communication::NonUniformPackInfo
- Protected Attributes inherited from walberla::blockforest::communication::NonUniformPackInfo
std::map< const Block *, std::map< stencil::Direction, std::map< uint_t, size_t > > > bufferSize_
 

Constructor & Destructor Documentation

◆ UniformToNonUniformPackInfoAdapter()

walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::UniformToNonUniformPackInfoAdapter ( const shared_ptr< walberla::communication::UniformPackInfo > & uniformPackInfo)
inline

◆ ~UniformToNonUniformPackInfoAdapter()

walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::~UniformToNonUniformPackInfoAdapter ( )
overridedefault

Member Function Documentation

◆ communicateLocalCoarseToFine()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::communicateLocalCoarseToFine ( const Block * ,
Block * ,
stencil::Direction  )
inlineoverridevirtual

◆ communicateLocalEqualLevel()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::communicateLocalEqualLevel ( const Block * sender,
Block * receiver,
stencil::Direction dir )
inlineoverridevirtual

If NOT thread-safe, threadsafeReceiving must return false!

Implements walberla::blockforest::communication::NonUniformPackInfo.

◆ communicateLocalFineToCoarse()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::communicateLocalFineToCoarse ( const Block * ,
Block * ,
stencil::Direction  )
inlineoverridevirtual

◆ constantDataExchange()

bool walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::constantDataExchange ( ) const
inlineoverridevirtual

Should return true if the amount of data that is packed for a given block in direction "dir" is guaranteed to remain constant over time.

False otherwise. If you are not sure what to return, return false! Returning false is always safe. Falsely return true will lead to errors! However, if the data can be guaranteed to remain constant over time, returning true enables performance optimizations during the communication.

Implements walberla::blockforest::communication::NonUniformPackInfo.

◆ packDataCoarseToFineImpl()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::packDataCoarseToFineImpl ( const Block * ,
const BlockID & ,
stencil::Direction ,
mpi::SendBuffer &  ) const
inlineoverrideprotectedvirtual

◆ packDataEqualLevelImpl()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::packDataEqualLevelImpl ( const Block * sender,
stencil::Direction dir,
mpi::SendBuffer & buffer ) const
inlineoverrideprotectedvirtual

◆ packDataFineToCoarseImpl()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::packDataFineToCoarseImpl ( const Block * ,
const BlockID & ,
stencil::Direction ,
mpi::SendBuffer &  ) const
inlineoverrideprotectedvirtual

◆ threadsafeReceiving()

bool walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::threadsafeReceiving ( ) const
inlineoverridevirtual

Must return false if calling unpackData*() and/or communicateLocal*() methods is not thread-safe.

True otherwise. If you are not sure what to return, return false! Returning false is always safe. Falsely return true will most likely lead to errors! However, if both unpackData*() AND communicateLocal*() are thread-safe, returning true can lead to performance improvements.

Implements walberla::blockforest::communication::NonUniformPackInfo.

◆ unpackDataCoarseToFine()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::unpackDataCoarseToFine ( Block * ,
const BlockID & ,
stencil::Direction ,
mpi::RecvBuffer &  )
inlineoverridevirtual

◆ unpackDataEqualLevel()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::unpackDataEqualLevel ( Block * receiver,
stencil::Direction dir,
mpi::RecvBuffer & buffer )
inlineoverridevirtual

If NOT thread-safe, threadsafeReceiving must return false!

Implements walberla::blockforest::communication::NonUniformPackInfo.

◆ unpackDataFineToCoarse()

void walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::unpackDataFineToCoarse ( Block * ,
const BlockID & ,
stencil::Direction ,
mpi::RecvBuffer &  )
inlineoverridevirtual

Member Data Documentation

◆ uniformPackInfo_

shared_ptr<walberla::communication::UniformPackInfo> walberla::blockforest::communication::UniformToNonUniformPackInfoAdapter::uniformPackInfo_
protected

The documentation for this class was generated from the following file: