OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE > Class Template Reference

Verlet dynamics for particles aware of their DYNAMIC_STATE. More...

#include <particleDynamicsBase.h>

+ Inheritance diagram for olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE >:
+ Collaboration diagram for olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE >:

Public Member Functions

 ParticleDetachmentDynamics (SolidBoundary< T, PARTICLETYPE::d > &solidBoundary, Vector< T, PARTICLETYPE::d > &mainFlowDirection, T tiltThreshold=0.3 *M_PI)
 Constructor.
 
void process (Particle< T, PARTICLETYPE > &particle, T timeStepSize) override
 Procesisng step.
 
- Public Member Functions inherited from olb::particles::dynamics::VerletParticleDynamics< T, PARTICLETYPE, conditions::active_particles >
 VerletParticleDynamics ()
 Constructor.
 
void process (Particle< T, PARTICLETYPE > &particle, T timeStepSize) override
 Procesisng step.
 
- Public Member Functions inherited from olb::particles::dynamics::ParticleDynamics< T, PARTICLETYPE >
virtual ~ParticleDynamics ()
 Destructor: virtual to enable inheritance.
 
std::string & getName ()
 read and write access to name
 
std::string const & getName () const
 read only access to name
 

Detailed Description

template<typename T, typename PARTICLETYPE>
class olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE >

Verlet dynamics for particles aware of their DYNAMIC_STATE.

Definition at line 252 of file particleDynamicsBase.h.

Constructor & Destructor Documentation

◆ ParticleDetachmentDynamics()

template<typename T , typename PARTICLETYPE >
olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE >::ParticleDetachmentDynamics ( SolidBoundary< T, PARTICLETYPE::d > & solidBoundary,
Vector< T, PARTICLETYPE::d > & mainFlowDirection,
T tiltThreshold = 0.3*M_PI )

Constructor.

Definition at line 373 of file particleDynamicsBase.hh.

376 : _solidBoundary(solidBoundary), _mainFlowDirection(mainFlowDirection), _tiltThreshold(tiltThreshold)
377{
378 this->getName() = "ParticleDetachmentDynamics";
379 static_assert(PARTICLETYPE::template providesNested<descriptors::SURFACE,descriptors::ANGLE>(),
380 "Field SURFACE:ANGLE has to be provided");
381 static_assert(PARTICLETYPE::template providesNested<descriptors::DYNBEHAVIOUR,descriptors::DETACHING>(),
382 "Field DYNBEHAVIOUR:DETACHING has to be provided");
383}
std::string & getName()
read and write access to name

References olb::particles::dynamics::ParticleDynamics< T, PARTICLETYPE >::getName().

+ Here is the call graph for this function:

Member Function Documentation

◆ process()

template<typename T , typename PARTICLETYPE >
void olb::particles::dynamics::ParticleDetachmentDynamics< T, PARTICLETYPE >::process ( Particle< T, PARTICLETYPE > & particle,
T timeStepSize )
overridevirtual

Procesisng step.

Implements olb::particles::dynamics::ParticleDynamics< T, PARTICLETYPE >.

Definition at line 386 of file particleDynamicsBase.hh.

388{
389 using namespace particles::access;
390 using namespace descriptors;
391
392 //Check for valid particles condition
393 doWhenMeetingCondition<T,PARTICLETYPE,conditions::valid_particles>( particle,[&](){
394 //Check current dynamic state
395 bool detaching = isDetaching( particle );
396 //State: Normal motion
397 if (!detaching){
398 //Execute process of VerletParticleDynamcis (valid, not detaching, active)
399 VerletParticleDynamics<T,PARTICLETYPE,conditions::active_particles>
400 ::process(particle,timeStepSize);
401 }
402 //State: Detaching
403 else{
404 //Check adhesion threshold (set active, if passed once)
405 bool isAdhering = interaction::checkAdhesion( _solidBoundary, _mainFlowDirection, particle );
406 //Perform detachment dynamics (valid, detaching, adhering)
407 if (!isAdhering){
408 //Calculate angular acceleration
409 auto angularAcceleration = getAngAcceleration( particle );
410 //Verlet algorithm
412 particle, timeStepSize, timeStepSize*timeStepSize, angularAcceleration );
413 //Check if rotation matrix provided and update
414 if constexpr ( providesRotationMatrix<PARTICLETYPE>() ) {
415 updateRotationMatrix( particle );
416 }
417 //Handle detachment from surface
418 interaction::handleDetachment( _solidBoundary, _mainFlowDirection, particle );
419 //Reevaluate state: Check, whether state has to be changed (e.g. detachment finished)
420 interaction::evaluateDetachmentState( _solidBoundary, particle, _tiltThreshold );
421 } //if (!isAdhering)
422 }
423 }); //doWhenMeetingCondition<T,PARTICLETYPE,conditions::valid_particles>
424}
Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > getAngAcceleration(Particle< T, PARTICLETYPE > particle)
bool isDetaching(Particle< T, PARTICLETYPE > &particle)
void velocityVerletRotation(Particle< T, PARTICLETYPE > &particle, T delTime, T delTime2, Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > angularAcceleration)
void updateRotationMatrix(Particle< T, PARTICLETYPE > &particle)
bool checkAdhesion(SolidBoundary< T, PARTICLETYPE::d > &wall, Vector< T, PARTICLETYPE::d > &mainFlowDirection, Particle< T, PARTICLETYPE > &particle)
Check adhesion and return true if still adhering.
void evaluateDetachmentState(SolidBoundary< T, PARTICLETYPE::d > &wall, Particle< T, PARTICLETYPE > &particle, T tiltThreshold=0.3 *M_PI)
void handleDetachment(SolidBoundary< T, PARTICLETYPE::d > &wall, Vector< T, PARTICLETYPE::d > &mainFlowDirection, Particle< T, PARTICLETYPE > &particle)

References olb::particles::interaction::checkAdhesion(), olb::particles::interaction::evaluateDetachmentState(), olb::particles::interaction::handleDetachment(), olb::particles::dynamics::updateRotationMatrix(), and olb::particles::dynamics::velocityVerletRotation().

+ Here is the call graph for this function:

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