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