walberla::lbm_mesapd_coupling::LubricationCorrectionKernel Class Reference

Detailed Description

Applies a correction for the unresolved lubrication forces and torques on the the interacting particles.

For gap sizes (in cells) below minimalGapSizeFunction(radius), no longer the actual gap size is used in the formulas. This value/function has to be found by calibration with collision experiments. For negative gap sizes, i.e. there is an overlap of the surfaces, no lubrication corrections are applied at any time.

Three different cut off distance have to be specified: normal, tangential translational and tangential rotational. These distances have to be determined by extra simulations to evaluate up to which resolution the forces can still be reliably predicted by the simulation itself. Note that these cutoff distances are in cell size "units" and not non-dimensionalized as they are not physically motivated but instead numerical parameters.

The formulas for the lubrication corrections for two spheres with different radii are taken from Simeonov, Calantoni - Modeling mechanical contact and lubrication in Direct Numerical Simulations of colliding particles, IJMF, 2012

By choosing the respective cutoff distances equal to 0, these contributions can be switched off.

Should be used in combination with mesa_pd's contact detection algorithm to determine the interaction partners and the gap size.

#include <LubricationCorrectionKernel.h>

Public Member Functions

 LubricationCorrectionKernel (real_t dynamicFluidViscosity, std::function< real_t(real_t)> minimalGapSizeFunction, real_t cutOffDistanceNormal=real_t(2)/real_t(3), real_t cutOffDistanceTangentialTranslational=real_t(0.5), real_t cutOffDistanceTangentialRotational=real_t(0.5))
 
template<typename Shape1_T , typename Shape2_T , typename ParticleAccessor_T >
void operator() (const size_t, const size_t, const Shape1_T &, const Shape2_T &, ParticleAccessor_T &, const Vector3< real_t > &, const real_t &)
 
template<typename ParticleAccessor_T >
void operator() (const size_t idx1, const size_t idx2, const mesa_pd::data::Sphere &sphere1, const mesa_pd::data::Sphere &sphere2, ParticleAccessor_T &ac, const Vector3< real_t > &interactionNormal, const real_t &gapSize)
 
template<typename ParticleAccessor_T >
void operator() (const size_t idx1, const size_t idx2, const mesa_pd::data::Sphere &sphere, const mesa_pd::data::HalfSpace &, ParticleAccessor_T &ac, const Vector3< real_t > &interactionNormal, const real_t &gapSize)
 
template<typename ParticleAccessor_T >
void operator() (const size_t idx1, const size_t idx2, const mesa_pd::data::HalfSpace &halfSpace, const mesa_pd::data::Sphere &sphere, ParticleAccessor_T &ac, const Vector3< real_t > &interactionNormal, const real_t &gapSize)
 
void setDynamicFluidViscosity (const real_t dynamicFluidViscosity)
 
void setMinimalGapSizeFunction (std::function< real_t(real_t)> minimalGapSizeFunction)
 
void setNormalCutOffDistance (const real_t cutOffDistanceNormal)
 
void setTangentialTranslationalCutOffDistance (const real_t cutOffDistanceTangentialTranslational)
 
void setTangentialRotationalCutOffDistance (const real_t cutOffDistanceTangentialRotational)
 
real_t getDynamicFluidViscosity () const
 
real_t getMinimalGapSize (real_t radius) const
 
real_t getNormalCutOffDistance () const
 
real_t getTangentialTranslationalCutOffDistance () const
 
real_t getTangentialRotationalCutOffDistance () const
 

Private Attributes

real_t dynamicFluidViscosity_
 
std::function< real_t(real_t)> minimalGapSizeFunction_
 
real_t cutOffDistanceNormal_
 
real_t cutOffDistanceTangentialTranslational_
 
real_t cutOffDistanceTangentialRotational_
 

Constructor & Destructor Documentation

◆ LubricationCorrectionKernel()

walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::LubricationCorrectionKernel ( real_t  dynamicFluidViscosity,
std::function< real_t(real_t)>  minimalGapSizeFunction,
real_t  cutOffDistanceNormal = real_t(2) / real_t(3),
real_t  cutOffDistanceTangentialTranslational = real_t(0.5),
real_t  cutOffDistanceTangentialRotational = real_t(0.5) 
)
inlineexplicit

Member Function Documentation

◆ getDynamicFluidViscosity()

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::getDynamicFluidViscosity ( ) const
inline

◆ getMinimalGapSize()

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::getMinimalGapSize ( real_t  radius) const
inline

◆ getNormalCutOffDistance()

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::getNormalCutOffDistance ( ) const
inline

◆ getTangentialRotationalCutOffDistance()

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::getTangentialRotationalCutOffDistance ( ) const
inline

◆ getTangentialTranslationalCutOffDistance()

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::getTangentialTranslationalCutOffDistance ( ) const
inline

◆ operator()() [1/4]

template<typename ParticleAccessor_T >
void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::operator() ( const size_t  idx1,
const size_t  idx2,
const mesa_pd::data::HalfSpace halfSpace,
const mesa_pd::data::Sphere sphere,
ParticleAccessor_T &  ac,
const Vector3< real_t > &  interactionNormal,
const real_t gapSize 
)
inline

◆ operator()() [2/4]

template<typename ParticleAccessor_T >
void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::operator() ( const size_t  idx1,
const size_t  idx2,
const mesa_pd::data::Sphere sphere,
const mesa_pd::data::HalfSpace ,
ParticleAccessor_T &  ac,
const Vector3< real_t > &  interactionNormal,
const real_t gapSize 
)
inline

◆ operator()() [3/4]

template<typename ParticleAccessor_T >
void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::operator() ( const size_t  idx1,
const size_t  idx2,
const mesa_pd::data::Sphere sphere1,
const mesa_pd::data::Sphere sphere2,
ParticleAccessor_T &  ac,
const Vector3< real_t > &  interactionNormal,
const real_t gapSize 
)
inline

◆ operator()() [4/4]

template<typename Shape1_T , typename Shape2_T , typename ParticleAccessor_T >
void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::operator() ( const  size_t,
const  size_t,
const Shape1_T &  ,
const Shape2_T &  ,
ParticleAccessor_T &  ,
const Vector3< real_t > &  ,
const real_t  
)
inline

◆ setDynamicFluidViscosity()

void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::setDynamicFluidViscosity ( const real_t  dynamicFluidViscosity)
inline

◆ setMinimalGapSizeFunction()

void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::setMinimalGapSizeFunction ( std::function< real_t(real_t)>  minimalGapSizeFunction)
inline

◆ setNormalCutOffDistance()

void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::setNormalCutOffDistance ( const real_t  cutOffDistanceNormal)
inline

◆ setTangentialRotationalCutOffDistance()

void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::setTangentialRotationalCutOffDistance ( const real_t  cutOffDistanceTangentialRotational)
inline

◆ setTangentialTranslationalCutOffDistance()

void walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::setTangentialTranslationalCutOffDistance ( const real_t  cutOffDistanceTangentialTranslational)
inline

Member Data Documentation

◆ cutOffDistanceNormal_

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::cutOffDistanceNormal_
private

◆ cutOffDistanceTangentialRotational_

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::cutOffDistanceTangentialRotational_
private

◆ cutOffDistanceTangentialTranslational_

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::cutOffDistanceTangentialTranslational_
private

◆ dynamicFluidViscosity_

real_t walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::dynamicFluidViscosity_
private

◆ minimalGapSizeFunction_

std::function<real_t(real_t)> walberla::lbm_mesapd_coupling::LubricationCorrectionKernel::minimalGapSizeFunction_
private

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