|
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> |
T | 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> |
T | 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 > ¢er, 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 >) |
|