waLBerla 7.2
Loading...
Searching...
No Matches
walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T > Class Template Reference

#include <GeneratedNonUniformFieldPackInfo.h>

+ Inheritance diagram for walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >:

Public Types

using value_type = typename Field_T::value_type
 

Public Member Functions

 GeneratedNonUniformFieldPackInfo (const BlockDataID fieldID)
 
 ~GeneratedNonUniformFieldPackInfo ()=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 packDataEqualLevelImpl (const Block *sender, stencil::Direction dir, mpi::SendBuffer &buffer) const override
 Must be 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 packDataCoarseToFineImpl (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir, mpi::SendBuffer &buffer) const override
 
void unpackDataCoarseToFine (Block *fineReceiver, const BlockID &coarseSender, stencil::Direction dir, mpi::RecvBuffer &buffer) override
 
void communicateLocalCoarseToFine (const Block *coarseSender, Block *fineReceiver, stencil::Direction dir) override
 
void packDataFineToCoarseImpl (const Block *fineSender, const BlockID &coarseReceiver, stencil::Direction dir, mpi::SendBuffer &buffer) const override
 
void unpackDataFineToCoarse (Block *coarseReceiver, const BlockID &fineSender, stencil::Direction dir, mpi::RecvBuffer &buffer) override
 
void communicateLocalFineToCoarse (const Block *fineSender, Block *coarseReceiver, stencil::Direction dir) override
 
uint_t sizeEqualLevelSend (const Block *sender, stencil::Direction dir) const
 
uint_t sizeCoarseToFineSend (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir) const
 
uint_t sizeCoarseToFineReceive (Block *fineReceiver, stencil::Direction dir) const
 
uint_t sizeFineToCoarseSend (const Block *fineSender, stencil::Direction dir) const
 
- 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 ()
 

Private Attributes

const BlockDataID fieldID_
 
PackingKernels_T kernels_
 

Additional Inherited Members

- 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_
 

Member Typedef Documentation

◆ value_type

template<typename Field_T , typename PackingKernels_T >
using walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::value_type = typename Field_T::value_type

Constructor & Destructor Documentation

◆ GeneratedNonUniformFieldPackInfo()

template<typename Field_T , typename PackingKernels_T >
walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::GeneratedNonUniformFieldPackInfo ( const BlockDataID fieldID)
inline

◆ ~GeneratedNonUniformFieldPackInfo()

template<typename Field_T , typename PackingKernels_T >
walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::~GeneratedNonUniformFieldPackInfo ( )
default

Member Function Documentation

◆ communicateLocalCoarseToFine()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::communicateLocalCoarseToFine ( const Block * coarseSender,
Block * fineReceiver,
stencil::Direction dir )
overridevirtual

◆ communicateLocalEqualLevel()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::communicateLocalEqualLevel ( const Block * sender,
Block * receiver,
stencil::Direction dir )
overridevirtual

If NOT thread-safe, threadsafeReceiving must return false!

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

◆ communicateLocalFineToCoarse()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::communicateLocalFineToCoarse ( const Block * fineSender,
Block * coarseReceiver,
stencil::Direction dir )
overridevirtual

◆ constantDataExchange()

template<typename Field_T , typename PackingKernels_T >
bool walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::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()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::packDataCoarseToFineImpl ( const Block * coarseSender,
const BlockID & fineReceiver,
stencil::Direction dir,
mpi::SendBuffer & buffer ) const
overridevirtual

◆ packDataEqualLevelImpl()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::packDataEqualLevelImpl ( const Block * sender,
stencil::Direction dir,
mpi::SendBuffer & buffer ) const
overridevirtual

◆ packDataFineToCoarseImpl()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::packDataFineToCoarseImpl ( const Block * fineSender,
const BlockID & coarseReceiver,
stencil::Direction dir,
mpi::SendBuffer & buffer ) const
overridevirtual

◆ sizeCoarseToFineReceive()

template<typename Field_T , typename PackingKernels_T >
uint_t walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::sizeCoarseToFineReceive ( Block * fineReceiver,
stencil::Direction dir ) const

◆ sizeCoarseToFineSend()

template<typename Field_T , typename PackingKernels_T >
uint_t walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::sizeCoarseToFineSend ( const Block * coarseSender,
const BlockID & fineReceiver,
stencil::Direction dir ) const

◆ sizeEqualLevelSend()

template<typename Field_T , typename PackingKernels_T >
uint_t walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::sizeEqualLevelSend ( const Block * sender,
stencil::Direction dir ) const

◆ sizeFineToCoarseSend()

template<typename Field_T , typename PackingKernels_T >
uint_t walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::sizeFineToCoarseSend ( const Block * fineSender,
stencil::Direction dir ) const

◆ threadsafeReceiving()

template<typename Field_T , typename PackingKernels_T >
bool walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::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()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::unpackDataCoarseToFine ( Block * fineReceiver,
const BlockID & coarseSender,
stencil::Direction dir,
mpi::RecvBuffer & buffer )
overridevirtual

◆ unpackDataEqualLevel()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::unpackDataEqualLevel ( Block * receiver,
stencil::Direction dir,
mpi::RecvBuffer & buffer )
overridevirtual

If NOT thread-safe, threadsafeReceiving must return false!

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

◆ unpackDataFineToCoarse()

template<typename Field_T , typename PackingKernels_T >
void walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::unpackDataFineToCoarse ( Block * coarseReceiver,
const BlockID & fineSender,
stencil::Direction dir,
mpi::RecvBuffer & buffer )
overridevirtual

Member Data Documentation

◆ fieldID_

template<typename Field_T , typename PackingKernels_T >
const BlockDataID walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::fieldID_
private

◆ kernels_

template<typename Field_T , typename PackingKernels_T >
PackingKernels_T walberla::GeneratedNonUniformFieldPackInfo< Field_T, PackingKernels_T >::kernels_
private

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