walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T > Class Template Reference

Detailed Description

template<typename LatticeModel_T, typename FlagField_T>
class walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >

Optimized PackInfo for sparse PDF fields.

In principle a PDF field can be communicated using a FieldPackInfo which copies all entries (=values for f) of the ghost layer.

For PDF fields, however, it is sufficient to communicate only those discrete velocities which point into the direction of the neighboring block

This PackInfo sends only these required components and therefore the sizes of the messages decrease.

Additionally this PackInfo only communicates PDFs in fluid cells.

see also documentation for FieldPackInfo

Warning
For fields with nrOfGhostLayers > 1: only the components pointing towards the boundary are communicated, which may not be the desired behavior for the 'inner' ghost layers

#include <SparsePdfFieldPackInfo.h>

+ Inheritance diagram for walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >:

Public Types

typedef lbm::PdfField< LatticeModel_TPdfField_T
 
typedef FlagField_T::flag_t flag_t
 
typedef LatticeModel_T::Stencil Stencil
 

Public Member Functions

 SparsePdfFieldPackInfo (const BlockDataID &pdfFieldId, const BlockDataID &flagFieldId, FlagUID flag, bool flagFieldConstant)
 
virtual ~SparsePdfFieldPackInfo ()
 
bool constantDataExchange () const
 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. More...
 
bool threadsafeReceiving () const
 Must return false if calling unpackData and/or communicateLocal is not thread-safe. More...
 
void unpackData (IBlock *receiver, stencil::Direction dir, mpi::RecvBuffer &buffer)
 Unpacks received Data. More...
 
void communicateLocal (const IBlock *sender, IBlock *receiver, stencil::Direction dir)
 Function to copy data from one local block to another local block. More...
 
- Public Member Functions inherited from walberla::communication::UniformPackInfo
 UniformPackInfo ()=default
 
virtual ~UniformPackInfo ()=default
 
void packData (const IBlock *sender, stencil::Direction dir, mpi::SendBuffer &buffer) const
 Packs data from a block into a send buffer. More...
 
virtual void beforeStartCommunication ()
 This function is called once before the communication is started by the UniformBufferedScheme. More...
 
virtual void afterStartCommunication ()
 This function is called once after the communication has been started by the UniformBufferedScheme. More...
 
virtual void beforeWait ()
 This function is called once before the UniformBufferedScheme waits for the communication to finish. More...
 
virtual void afterWait ()
 This function is called once after the communication has been finished by the UniformBufferedScheme. More...
 

Protected Member Functions

void packDataImpl (const IBlock *sender, stencil::Direction dir, mpi::SendBuffer &outBuffer) const
 Packs data from a block into a send buffer. More...
 
- Protected Member Functions inherited from walberla::communication::UniformPackInfo

Protected Attributes

BlockDataID pdfFieldId_
 
BlockDataID flagFieldId_
 
FlagUID flag_
 
bool flagFieldConstant_
 
- Protected Attributes inherited from walberla::communication::UniformPackInfo
std::map< const IBlock *, std::map< stencil::Direction, size_t > > bufferSize_
 

Member Typedef Documentation

◆ flag_t

template<typename LatticeModel_T , typename FlagField_T >
typedef FlagField_T::flag_t walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::flag_t

◆ PdfField_T

template<typename LatticeModel_T , typename FlagField_T >
typedef lbm::PdfField<LatticeModel_T> walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::PdfField_T

◆ Stencil

template<typename LatticeModel_T , typename FlagField_T >
typedef LatticeModel_T::Stencil walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::Stencil

Constructor & Destructor Documentation

◆ SparsePdfFieldPackInfo()

template<typename LatticeModel_T , typename FlagField_T >
walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::SparsePdfFieldPackInfo ( const BlockDataID pdfFieldId,
const BlockDataID flagFieldId,
FlagUID  flag,
bool  flagFieldConstant 
)
inline

◆ ~SparsePdfFieldPackInfo()

template<typename LatticeModel_T , typename FlagField_T >
virtual walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::~SparsePdfFieldPackInfo ( )
inlinevirtual

Member Function Documentation

◆ communicateLocal()

template<typename LatticeModel_T , typename FlagField_T >
void walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::communicateLocal ( const IBlock sender,
IBlock receiver,
stencil::Direction  dir 
)
virtual

Function to copy data from one local block to another local block.

Both blocks are allocated on the current process. If NOT thread-safe, threadsafeReceiving must return false!

Parameters
senderid of block where the data should be copied from
receiverid of block where the data should be copied to
dirthe direction of the communication ( from sender to receiver )

Implements walberla::communication::UniformPackInfo.

◆ constantDataExchange()

template<typename LatticeModel_T , typename FlagField_T >
bool walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::constantDataExchange ( ) const
inlinevirtual

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 save. 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::communication::UniformPackInfo.

◆ packDataImpl()

template<typename LatticeModel_T , typename FlagField_T >
void walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::packDataImpl ( const IBlock sender,
stencil::Direction  dir,
mpi::SendBuffer buffer 
) const
protectedvirtual

Packs data from a block into a send buffer.

Must be thread-safe!

Parameters
senderthe block whose data should be packed into a buffer
dirpack data for neighbor in this direction
bufferbuffer for writing the data into

Implements walberla::communication::UniformPackInfo.

◆ threadsafeReceiving()

template<typename LatticeModel_T , typename FlagField_T >
bool walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::threadsafeReceiving ( ) const
inlinevirtual

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

True otherwise. If you are not sure what to return, return false! Returning false is always save. 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::communication::UniformPackInfo.

◆ unpackData()

template<typename LatticeModel_T , typename FlagField_T >
void walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::unpackData ( IBlock receiver,
stencil::Direction  dir,
mpi::RecvBuffer buffer 
)
virtual

Unpacks received Data.

If NOT thread-safe, threadsafeReceiving must return false!

Parameters
receiverthe block where the unpacked data should be stored into
dirreceive data from neighbor in this direction
buffer

Implements walberla::communication::UniformPackInfo.

Member Data Documentation

◆ flag_

template<typename LatticeModel_T , typename FlagField_T >
FlagUID walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::flag_
protected

◆ flagFieldConstant_

template<typename LatticeModel_T , typename FlagField_T >
bool walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::flagFieldConstant_
protected

◆ flagFieldId_

template<typename LatticeModel_T , typename FlagField_T >
BlockDataID walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::flagFieldId_
protected

◆ pdfFieldId_

template<typename LatticeModel_T , typename FlagField_T >
BlockDataID walberla::lbm::SparsePdfFieldPackInfo< LatticeModel_T, FlagField_T >::pdfFieldId_
protected

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