42 using namespace descriptors;
43 auto rotationMatrix = util::calculateRotationMatrix<T,PARTICLETYPE::d>(
44 particle.template getField<SURFACE,ANGLE>() );
45 if constexpr ( PARTICLETYPE::template providesNested<SURFACE,ROT_MATRIX>() ) {
46 particle.template setField<SURFACE,ROT_MATRIX>( rotationMatrix );
48 std::cerr <<
"ERROR: The field ROT_MATRIX must be provided." << std::endl;
65 using namespace particles::access;
66 auto radius = getRadius<T,PARTICLETYPE>( particle );
67 auto position = getPosition<T,PARTICLETYPE>( particle );
68 for (
int iDim=0; iDim<PARTICLETYPE::d; ++iDim) {
69 T distToLowerBound = (position[iDim] - radius) - domainMin[iDim];
70 T distToUpperBound = domainMax[iDim] - (position[iDim] + radius);
72 if ( distToLowerBound <= 0. ) {
74 boundTreatment(iDim, normal, distToLowerBound);
76 if ( distToUpperBound <= 0. ) {
78 boundTreatment(iDim, normal, distToUpperBound);
87 using namespace descriptors;
88 const unsigned D = PARTICLETYPE::d;
89 Vector<T,D> position( particle.template getField<GENERAL,POSITION>() );
90 Vector<T,D> velocity( particle.template getField<MOBILITY,VELOCITY>() );
91 position[iDir] = positionPre[iDir];
93 particle.template setField<GENERAL,POSITION>( position );
94 particle.template setField<MOBILITY,VELOCITY>( velocity );
void resetMovement(Particle< T, PARTICLETYPE > &particle, Vector< T, PARTICLETYPE::d > positionPre, Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > anglePre=Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation >(0.))
std::conditional_t< PARTICLETYPE::template providesNested< descriptors::SURFACE, descriptors::ANGLE >(), ParticleDynamicStateAngle< T, PARTICLETYPE >, ParticleDynamicStateNoAngle< T, PARTICLETYPE > > DynState
void resetDirection(Particle< T, PARTICLETYPE > &particle, Vector< T, PARTICLETYPE::d > positionPre, int iDir)
void updateRotationMatrix(Particle< T, PARTICLETYPE > &particle)
void doAtCubicBoundPenetration(Particle< T, PARTICLETYPE > &particle, Vector< T, PARTICLETYPE::d > domainMin, Vector< T, PARTICLETYPE::d > domainMax, F boundTreatment)
Helper functions.
Vector< T, PARTICLETYPE::d > position
Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > angle
ParticleDynamicStateAngle(Vector< T, PARTICLETYPE::d > position, Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > angle)
ParticleDynamicStateAngle(Vector< T, PARTICLETYPE::d > position)
Vector< T, PARTICLETYPE::d > position
ParticleDynamicStateNoAngle(Vector< T, PARTICLETYPE::d > position)