walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T > Class Template Reference

Detailed Description

template<typename LatticeModel_T, typename Filter_T, typename DensityVelocityIn_T, typename DensityVelocityOut_T, int SolidCollision_T, int Weighting_T>
class walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >

LBM sweep for the partially saturated cells method.

Literature: Original idea: Noble et al. - A lattice-Boltzmann method for partially saturated computational cells, 1998 Overview paper: Owen et al. - An efficient framework for fluid-structure interaction using the lattice Boltzmann method and immersed moving boundaries, 2010

Based on the overview paper, at least three different versions for the calculation of the solid collision term (omega_S) and two different versions for the cell coverage weighting function (B) are available. They can be selected via the template parameters SolidCollision_T ( = {1,2,3} ) and Weighting_T ( = {1,2} ). SolidCollision_T = 1: Eq. 28 Weighting_T = 1: B = solid volume fraction SolidCollision_T = 2: Eq. 29 Weighting_T = 2: Eq. 30 SolidCollision_T = 3: Eq. 33

For the calculation of the force acting on the body, an additional minus sign has to be added compared to Eqs. 31 and 32 in the paper.

#include <PSMSweep.h>

+ Inheritance diagram for walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >:

Public Types

using PdfField_T = typename lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >::PdfField_T
 
using Stencil_T = typename LatticeModel_T::Stencil
 
using BodyAndVolumeFraction_T = std::pair< pe::BodyID, real_t >
 
using BodyAndVolumeFractionField_T = Field< std::vector< BodyAndVolumeFraction_T >, 1 >
 
- Public Types inherited from walberla::lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >
using PdfField_T = PdfField< LatticeModel_T >
 

Public Member Functions

 PSMSweep (const BlockDataID &pdfFieldID, const BlockDataID &bodyAndVolumeFractionFieldID, const shared_ptr< StructuredBlockStorage > &blockStorage, const Filter_T &_filter=walberla::field::DefaultEvaluationFilter(), const DensityVelocityIn_T &_densityVelocityIn=lbm::DefaultDensityEquilibriumVelocityCalculation(), const DensityVelocityOut_T &_densityVelocityOut=lbm::DefaultDensityVelocityCallback())
 
 PSMSweep (const BlockDataID &src, const BlockDataID &dst, const BlockDataID &bodyAndVolumeFractionFieldID, const shared_ptr< StructuredBlockStorage > &blockStorage, const Filter_T &_filter=walberla::field::DefaultEvaluationFilter(), const DensityVelocityIn_T &_densityVelocityIn=lbm::DefaultDensityEquilibriumVelocityCalculation(), const DensityVelocityOut_T &_densityVelocityOut=lbm::DefaultDensityVelocityCallback())
 
void operator() (IBlock *const block, const uint_t numberOfGhostLayersToInclude=uint_t(0))
 
void streamCollide (IBlock *const block, const uint_t numberOfGhostLayersToInclude=uint_t(0))
 
void stream (IBlock *const block, const uint_t numberOfGhostLayersToInclude=uint_t(0))
 
void collide (IBlock *const block, const uint_t numberOfGhostLayersToInclude=uint_t(0))
 
BodyAndVolumeFractionField_TgetBodyAndVolumeFractionField (IBlock *const block) const
 
void getFields (IBlock *const block, PdfField_T *&src, PdfField_T *&dst, BodyAndVolumeFractionField_T *&bodyAndVolumeFractionField)
 
- Public Member Functions inherited from walberla::lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >
 SweepBase (const BlockDataID &pdfField, const Filter_T &_filter=walberla::field::DefaultEvaluationFilter(), const DensityVelocityIn_T &_densityVelocityIn=DefaultDensityEquilibriumVelocityCalculation(), const DensityVelocityOut_T &_densityVelocityOut=DefaultDensityVelocityCallback())
 
 SweepBase (const BlockDataID &src, const BlockDataID &dst, const Filter_T &_filter=walberla::field::DefaultEvaluationFilter(), const DensityVelocityIn_T &_densityVelocityIn=DefaultDensityEquilibriumVelocityCalculation(), const DensityVelocityOut_T &_densityVelocityOut=DefaultDensityVelocityCallback())
 
virtual ~SweepBase ()
 
void filter (IBlock &block)
 
bool filter (const cell_idx_t x, const cell_idx_t y, const cell_idx_t z) const
 
void densityVelocityIn (IBlock &block)
 
real_t densityVelocityIn (Vector3< real_t > &velocity, const PdfField_T *const field, const cell_idx_t x, const cell_idx_t y, const cell_idx_t z)
 
void densityVelocityOut (IBlock &block)
 
void densityVelocityOut (const cell_idx_t x, const cell_idx_t y, const cell_idx_t z, const LatticeModel_T &lm, const Vector3< real_t > &velocity, const real_t rho)
 

Private Attributes

const BlockDataID bodyAndVolumeFractionFieldID_
 
shared_ptr< StructuredBlockStorageblockStorage_
 

Additional Inherited Members

- Protected Member Functions inherited from walberla::lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >
PdfField_TgetSrcField (IBlock *const block) const
 
PdfField_TgetDstField (IBlock *const block, PdfField_T *const src)
 
void getFields (IBlock *const block, PdfField_T *&src, PdfField_T *&dst)
 
- Protected Attributes inherited from walberla::lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >
const BlockDataID src_ {}
 
const bool dstFromBlockData_
 
const BlockDataID dst_ {}
 
std::set< PdfField_T *, field::SwapableCompare< PdfField_T * > > dstFields_
 
Filter_T filter_
 
DensityVelocityIn_T densityVelocityIn_
 
DensityVelocityOut_T densityVelocityOut_
 

Member Typedef Documentation

◆ BodyAndVolumeFraction_T

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
using walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>

◆ BodyAndVolumeFractionField_T

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
using walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::BodyAndVolumeFractionField_T = Field<std::vector<BodyAndVolumeFraction_T>, 1>

◆ PdfField_T

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
using walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::PdfField_T = typename lbm::SweepBase<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>::PdfField_T

◆ Stencil_T

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
using walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::Stencil_T = typename LatticeModel_T::Stencil

Constructor & Destructor Documentation

◆ PSMSweep() [1/2]

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::PSMSweep ( const BlockDataID pdfFieldID,
const BlockDataID bodyAndVolumeFractionFieldID,
const shared_ptr< StructuredBlockStorage > &  blockStorage,
const Filter_T &  _filter = walberla::field::DefaultEvaluationFilter(),
const DensityVelocityIn_T &  _densityVelocityIn = lbm::DefaultDensityEquilibriumVelocityCalculation(),
const DensityVelocityOut_T &  _densityVelocityOut = lbm::DefaultDensityVelocityCallback() 
)
inline

◆ PSMSweep() [2/2]

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::PSMSweep ( const BlockDataID src,
const BlockDataID dst,
const BlockDataID bodyAndVolumeFractionFieldID,
const shared_ptr< StructuredBlockStorage > &  blockStorage,
const Filter_T &  _filter = walberla::field::DefaultEvaluationFilter(),
const DensityVelocityIn_T &  _densityVelocityIn = lbm::DefaultDensityEquilibriumVelocityCalculation(),
const DensityVelocityOut_T &  _densityVelocityOut = lbm::DefaultDensityVelocityCallback() 
)
inline

Member Function Documentation

◆ collide()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
void walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::collide ( IBlock *const  block,
const uint_t  numberOfGhostLayersToInclude = uint_t(0) 
)

◆ getBodyAndVolumeFractionField()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
BodyAndVolumeFractionField_T* walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::getBodyAndVolumeFractionField ( IBlock *const  block) const
inline

◆ getFields()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
void walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::getFields ( IBlock *const  block,
PdfField_T *&  src,
PdfField_T *&  dst,
BodyAndVolumeFractionField_T *&  bodyAndVolumeFractionField 
)
inline

◆ operator()()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
void walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::operator() ( IBlock *const  block,
const uint_t  numberOfGhostLayersToInclude = uint_t(0) 
)
inline

◆ stream()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
void walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::stream ( IBlock *const  block,
const uint_t  numberOfGhostLayersToInclude = uint_t(0) 
)

◆ streamCollide()

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
void walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::streamCollide ( IBlock *const  block,
const uint_t  numberOfGhostLayersToInclude = uint_t(0) 
)

Member Data Documentation

◆ blockStorage_

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
shared_ptr<StructuredBlockStorage> walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::blockStorage_
private

◆ bodyAndVolumeFractionFieldID_

template<typename LatticeModel_T , typename Filter_T , typename DensityVelocityIn_T , typename DensityVelocityOut_T , int SolidCollision_T, int Weighting_T>
const BlockDataID walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::bodyAndVolumeFractionFieldID_
private

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