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>
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 > |
![]() | |
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_T * | getBodyAndVolumeFractionField (IBlock *const block) const |
void | getFields (IBlock *const block, PdfField_T *&src, PdfField_T *&dst, BodyAndVolumeFractionField_T *&bodyAndVolumeFractionField) |
![]() | |
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< StructuredBlockStorage > | blockStorage_ |
Additional Inherited Members | |
![]() | |
PdfField_T * | getSrcField (IBlock *const block) const |
PdfField_T * | getDstField (IBlock *const block, PdfField_T *const src) |
void | getFields (IBlock *const block, PdfField_T *&src, PdfField_T *&dst) |
![]() | |
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_ |
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> |
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> |
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 |
using walberla::pe_coupling::PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T >::Stencil_T = typename LatticeModel_T::Stencil |
|
inline |
|
inline |
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) |
||
) |
|
inline |
|
inline |
|
inline |
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) |
||
) |
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) |
||
) |
|
private |
|
private |