OpenLB 1.7
Loading...
Searching...
No Matches
Classes | Namespaces | Functions | Variables
particleContactForceFunctions.h File Reference
#include "core/vector.h"
#include "functors/analytical/indicator/indicatorBase.h"
#include "particles/particles.h"
+ Include dependency graph for particleContactForceFunctions.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  olb::particles::contact::particle_particle< T, PARTICLETYPE, ParticleContactArbitraryFromOverlapVolume< T, PARTICLETYPE::d, CONVEX >, WALLCONTACTTYPE, BBCORRECTIONMETHOD, CONVEX, useSDF >
 
struct  olb::particles::contact::particle_wall< T, PARTICLETYPE, PARTICLECONTACTTYPE, WallContactArbitraryFromOverlapVolume< T, PARTICLETYPE::d, CONVEX >, BBCORRECTIONMETHOD, CONVEX, useSDF >
 

Namespaces

namespace  olb
 Top level namespace for all of OpenLB.
 
namespace  olb::particles
 
namespace  olb::particles::defaults
 
namespace  olb::particles::contact
 

Functions

template<typename T , unsigned D, typename CONTACTTYPE >
constexpr T olb::particles::contact::evalCurrentDampingFactor (CONTACTTYPE &contact, const T coefficientOfRestitution, const Vector< T, D > &initialRelativeNormalVelocity)
 
template<typename T , typename PARTICLETYPE >
constexpr Vector< T, PARTICLETYPE::d > olb::particles::contact::evalRelativeVelocity (Particle< T, PARTICLETYPE > &particleA, Particle< T, PARTICLETYPE > &particleB, const Vector< T, PARTICLETYPE::d > &position)
 Returns the relative velocity of two particles at a defined position.
 
template<typename T , typename PARTICLETYPE >
constexpr Vector< T, PARTICLETYPE::d > olb::particles::contact::evalRelativeVelocity (Particle< T, PARTICLETYPE > &particle, const Vector< T, PARTICLETYPE::d > &position)
 
template<typename T , unsigned D>
constexpr Vector< T, D > olb::particles::contact::evalRelativeNormalVelocity (const Vector< T, D > &contactNormal, const Vector< T, D > &relVel)
 
template<typename T , typename F >
constexpr void olb::particles::contact::forEachPosition (Vector< T, 3 > startPos, Vector< T, 3 > endPos, F f)
 
template<typename T , typename F >
constexpr void olb::particles::contact::forEachPosition (Vector< T, 2 > startPos, Vector< T, 2 > endPos, F f)
 
template<typename T , typename F >
constexpr void olb::particles::contact::forEachPositionWithBreak (Vector< T, 3 > startPos, Vector< T, 3 > endPos, F f)
 
template<typename T , typename F >
constexpr void olb::particles::contact::forEachPositionWithBreak (Vector< T, 2 > startPos, Vector< T, 2 > endPos, F f)
 
template<typename T , unsigned D>
constexpr Vector< T, D > olb::particles::contact::evalContactDeltaX (const Vector< T, D > &min, const Vector< T, D > &max, const T physDeltaX, const unsigned contactBoxResolutionPerDirection)
 
template<typename T , typename PARTICLETYPE , typename PARTICLECONTACTTYPE , typename WALLCONTACTTYPE , bool CONVEX>
void olb::particles::contact::prepareForceCalculation (ContactContainer< T, PARTICLECONTACTTYPE, WALLCONTACTTYPE > &contactContainer)
 
template<typename T , unsigned D>
Vector< T, D > olb::particles::contact::calcElasticAndViscousForce (T effectiveE, T k, T overlapVolume, T indentation, T dampingFactor, const Vector< T, D > &relVelNormal, const Vector< T, D > &contactNormal)
 Elastic and viscous force from overlap volume according to Nassauer & Kuna (2013)
 
template<typename T , unsigned D>
olb::particles::contact::evalApproxSurface (const Vector< T, D > &normalizedNormal, const PhysR< T, D > &contactPhysDeltaX)
 Takes a normalized normal and the voxel sizes and approximates the corresponding surface.
 
template<typename T , unsigned D>
Vector< T, D > olb::particles::contact::getTangentialForceFromOverlapVolume (const Vector< T, D > &contactNormal, const T coefficientStaticFriction, const T coefficientKineticFriction, const T staticKineticTransitionVelocity, const T k, const Vector< T, D > &relVel, const Vector< T, D > &normalForce)
 
template<typename T , unsigned D>
Vector< T, D > olb::particles::contact::getNormalForceFromOverlapVolume (const Vector< T, D > &contactNormal, const T indentation, const T overlapVolume, const T effectiveE, const T dampingFactor, const T k, const Vector< T, D > &relVel)
 
template<typename T , typename PARTICLETYPE >
void olb::particles::contact::applyForceOnParticle (std::multimap< int, std::unique_ptr< std::uint8_t[]> > &dataMap, Particle< T, PARTICLETYPE > &particle, XParticleSystem< T, PARTICLETYPE > &particleSystem, const Vector< T, PARTICLETYPE::d > &contactPoint, const Vector< T, PARTICLETYPE::d > &normalForce, const Vector< T, PARTICLETYPE::d > &tangentialForce)
 
template<typename T , typename PARTICLETYPE , typename CONTACTPROPERTIES , typename F = decltype(defaults::processContactForce<T, PARTICLETYPE::d>)>
void olb::particles::contact::applyForceFromOverlapVolume (std::multimap< int, std::unique_ptr< std::uint8_t[]> > &dataMap, Particle< T, PARTICLETYPE > &particleA, Particle< T, PARTICLETYPE > &particleB, XParticleSystem< T, PARTICLETYPE > &particleSystem, const PhysR< T, PARTICLETYPE::d > &contactPoint, const Vector< T, PARTICLETYPE::d > &contactNormal, const T indentation, const T overlapVolume, const Vector< T, PARTICLETYPE::d > &relVel, const T dampingFactor, const CONTACTPROPERTIES &contactProperties, T k, const std::size_t &particleAID, const std::size_t &particleBID, F processContactForce=defaults::processContactForce< T, PARTICLETYPE::d >)
 
template<typename T , typename PARTICLETYPE , typename CONTACTPROPERTIES , typename F = decltype(defaults::processContactForce<T, PARTICLETYPE::d>)>
void olb::particles::contact::applyForceFromOverlapVolume (std::multimap< int, std::unique_ptr< std::uint8_t[]> > &dataMap, Particle< T, PARTICLETYPE > &particle, XParticleSystem< T, PARTICLETYPE > &particleSystem, SolidBoundary< T, PARTICLETYPE::d > &solidBoundary, const PhysR< T, PARTICLETYPE::d > &contactPoint, const Vector< T, PARTICLETYPE::d > &contactNormal, const T indentation, const T overlapVolume, const Vector< T, PARTICLETYPE::d > &relVel, const T dampingFactor, const CONTACTPROPERTIES &contactProperties, T k, const std::size_t &particleID, const std::size_t &wallID, F processContactForce=defaults::processContactForce< T, PARTICLETYPE::d >)
 
template<typename T , unsigned D>
void olb::particles::contact::evalStartAndEndPos (Vector< long, D > &startPos, Vector< long, D > &endPos, const PhysR< T, D > &max, const PhysR< T, D > &min, const PhysR< T, D > &contactPhysDeltaX)
 
template<typename T , unsigned D>
olb::particles::contact::evalForceViaVolumeCoefficient (const Vector< T, D > &min, const Vector< T, D > &max, T overlapVolume)
 
template<typename T >
constexpr T olb::particles::contact::evalForceViaVolumeCoefficient (const T contactVolume, const T contactSurface, const T indentationDepth)
 
template<typename T , unsigned D, typename F1 , typename F2 , typename F3 , typename F4 , typename F5 >
void olb::particles::contact::processCell (const PhysR< T, D > &pos, const PhysR< T, D > &contactPhysDeltaX, PhysR< T, D > &center, Vector< T, D > &contactNormal, unsigned &volumeCellCount, T &surfaceCellCount, F1 isInside, F2 isOnSurface, F3 calcNormalA, F4 calcNormalB, F5 updateMinMax)
 
template<typename T , unsigned D, typename F1 , typename F2 , typename F3 , typename F4 >
void olb::particles::contact::processContactViaVolume (const Vector< T, D > &min, const Vector< T, D > &max, T physDeltaX, unsigned contactBoxResolutionPerDirection, F1 resetContactBox, F2 processCellWrapped, F3 calculateIndentation, F4 applyForce)
 
template<typename T , unsigned D, typename F1 >
bool olb::particles::contact::evalStartingPoint (const Vector< long, D > &startPos, const Vector< long, D > &endPos, const Vector< T, D > &contactPhysDeltaX, Vector< long, D > &currPos, F1 isInsideContact)
 
template<typename T , unsigned D, typename F1 , typename F2 >
void olb::particles::contact::evalBoundingBoxRecursive (const Vector< long, D > &startPos, const Vector< long, D > &endPos, const Vector< T, D > &contactPhysDeltaX, const Vector< long, D > &currPos, const Vector< short, D > &dirIn, F1 isInsideContact, F2 updateMinMax)
 
template<typename T , unsigned D, typename F1 , typename F2 , typename F3 >
void olb::particles::contact::correctBoundingBox (const PhysR< T, D > &min, const PhysR< T, D > &max, const T physDeltaX, const unsigned contactBoxResolutionPerDirection, F1 isInsideContact, F2 resetContactBox, F3 updateMinMax)
 
template<typename T , unsigned D, typename F1 , typename F2 , typename F3 >
void olb::particles::contact::correctBoundingBoxNewContact (PhysR< T, D > min, PhysR< T, D > max, T physDeltaX, unsigned contactBoxResolutionPerDirection, F1 signedDistanceToIntersection, F2 resetContactBox, F3 updateMinMax)
 
template<typename T , typename PARTICLETYPE , typename PARTICLECONTACTTYPE , typename WALLCONTACTTYPE , typename CONTACTPROPERTIES , unsigned BBCORRECTIONMETHOD = 0, typename F1 = decltype(defaults::periodicity<PARTICLETYPE::d>), typename F2 = decltype(defaults::processContactForce<T, PARTICLETYPE::d>)>
void olb::particles::contact::processContacts (SuperParticleSystem< T, PARTICLETYPE > &particleSystem, std::vector< SolidBoundary< T, PARTICLETYPE::d > > &solidBoundaries, ContactContainer< T, PARTICLECONTACTTYPE, WALLCONTACTTYPE > &contactContainer, const CONTACTPROPERTIES &contactProperties, const SuperGeometry< T, PARTICLETYPE::d > &sGeometry, MPI_Comm contactTreatmentComm, const unsigned contactBoxResolutionPerDirection=8, const T k=static_cast< T >(4./(3 *util::sqrt(M_PI))), F1 getSetupPeriodicity=defaults::periodicity< PARTICLETYPE::d >, F2 processContactForce=defaults::processContactForce< T, PARTICLETYPE::d >)
 
template<typename T , typename PARTICLETYPE , typename PARTICLECONTACTTYPE , typename WALLCONTACTTYPE , typename CONTACTPROPERTIES , unsigned BBCORRECTIONMETHOD = 0, typename F1 = decltype(defaults::periodicity<PARTICLETYPE::d>), typename F2 = decltype(defaults::processContactForce<T, PARTICLETYPE::d>)>
void olb::particles::contact::processContacts (ParticleSystem< T, PARTICLETYPE > &particleSystem, std::vector< SolidBoundary< T, PARTICLETYPE::d > > &solidBoundaries, ContactContainer< T, PARTICLECONTACTTYPE, WALLCONTACTTYPE > &contactContainer, const CONTACTPROPERTIES &contactProperties, const SuperGeometry< T, PARTICLETYPE::d > &sGeometry, const unsigned contactBoxResolutionPerDirection=8, const T k=static_cast< T >(4./(3 *util::sqrt(M_PI))), F1 getSetupPeriodicity=defaults::periodicity< PARTICLETYPE::d >, F2 processContactForce=defaults::processContactForce< T, PARTICLETYPE::d >)
 

Variables

template<typename T , unsigned D>
const auto olb::particles::defaults::processContactForce