ESyS-Particle  2.3.4
CRotFrictionInteraction Class Reference

Frictional+Elastic interaction between particles between rotational particles. More...

#include <RotFricInteraction.h>

Inheritance diagram for CRotFrictionInteraction:
Collaboration diagram for CRotFrictionInteraction:

Public Types

typedef CRotFrictionIGP ParameterType
 
typedef double(CRotFrictionInteraction::* ScalarFieldFunction) () const
 
typedef pair< bool, double >(CRotFrictionInteraction::* CheckedScalarFieldFunction) () const
 
typedef Vec3(CRotFrictionInteraction::* VectorFieldFunction) () const
 

Public Member Functions

 CRotFrictionInteraction ()
 
 CRotFrictionInteraction (CRotParticle *, CRotParticle *, const CRotFrictionIGP &)
 
virtual ~CRotFrictionInteraction ()
 
virtual void calcForces ()
 
virtual void calcSimpleForces ()
 
virtual void calcRigidBodyForces ()
 
virtual bool isPersistent ()
 
void setTimeStepSize (double dt)
 
void calcNormalForce ()
 
double getAbsForceDeficit () const
 
double getPotentialEnergy () const
 
double getSlipping () const
 
double getSticking () const
 
double getDissipatedEnergy () const
 
double getAbsSlip () const
 
virtual double Count () const
 
virtual Vec3 getPos () const
 
Vec3 getForce () const
 
Vec3 getNormalForce () const
 
Vec3 getTangentialForce () const
 
virtual void saveRestartData (std::ostream &oStream)
 
virtual void loadRestartData (std::istream &iStream)
 
- Public Member Functions inherited from ARotPairInteraction
 ARotPairInteraction ()
 
 ARotPairInteraction (CRotParticle *, CRotParticle *)
 
virtual ~ARotPairInteraction ()
 
const CParticlefirst () const
 
const CParticlesecond () const
 
CRotParticlefirst ()
 
CRotParticlesecond ()
 
pair< int, int > getPairID () const
 
void checkIDs ()
 
virtual bool hasTag (int, int) const
 
virtual Vec3 getPosFirst () const
 
virtual Vec3 getPosSecond () const
 
void setPP (CRotParticle *, CRotParticle *)
 
void setPP (const vector< CRotParticle * >)
 
esys::lsm::quintuple< Vec3, double, Vec3, double, Vec3getRaw2Data () const
 
virtual void calcHeatTrans ()
 
virtual void calcHeatFrict ()
 
- Public Member Functions inherited from AInteraction
 AInteraction ()
 
virtual ~AInteraction ()
 
bool initialized () const
 
vector< int > getAllID () const
 
int getID ()
 
double Count () const
 

Static Public Member Functions

static CheckedScalarFieldFunction getCheckedScalarFieldFunction (const string &)
 
static ScalarFieldFunction getScalarFieldFunction (const string &)
 
static VectorFieldFunction getVectorFieldFunction (const string &)
 
static string getType ()
 

Private Attributes

double m_k
 spring constant More...
 
double m_r0
 equilibrium distance More...
 
double m_mu_d
 coefficient of dynamic friction More...
 
double m_mu_s
 coefficient of static friction More...
 
double m_ks
 shear stiffness (Cundall) More...
 
double m_dt
 time step More...
 
Vec3 m_Ffric
 current frictional force More...
 
Vec3 m_force_deficit
 difference between fric. force & force necessary for slip More...
 
Vec3 m_cpos
 contact position More...
 
Vec3 m_normal_force
 current normal force More...
 
bool m_is_slipping
 static/dynamic status of the interaction More...
 
bool m_is_touching
 contact status of the interaction More...
 
double m_E_diss
 dissipated energy More...
 
bool m_scaling
 toggles scaling of elastic properties by particle size More...
 
bool m_rigid
 toggles whether to use rigid body friction interactions More...
 
bool m_meanR_scaling
 toggles whether to use the mean particle radius or minimum particle radius to define bond radius More...
 

Friends

class TML_PackedMessageInterface
 
ostream & operator<< (ostream &, const CRotFrictionInteraction &)
 

Additional Inherited Members

- Protected Attributes inherited from ARotPairInteraction
CRotParticlem_p1
 
CRotParticlem_p2
 
- Protected Attributes inherited from AInteraction
vector< int > m_id
 id's of the particles involved More...
 
int m_iid
 interaction id More...
 
bool m_init
 

Detailed Description

Frictional+Elastic interaction between particles between rotational particles.

Author
Shane Latham, Steffen Abe $Revision$ $Date$

Member Typedef Documentation

◆ CheckedScalarFieldFunction

typedef pair<bool,double>(CRotFrictionInteraction::* CRotFrictionInteraction::CheckedScalarFieldFunction) () const

◆ ParameterType

◆ ScalarFieldFunction

typedef double(CRotFrictionInteraction::* CRotFrictionInteraction::ScalarFieldFunction) () const

◆ VectorFieldFunction

typedef Vec3(CRotFrictionInteraction::* CRotFrictionInteraction::VectorFieldFunction) () const

Constructor & Destructor Documentation

◆ CRotFrictionInteraction() [1/2]

CRotFrictionInteraction::CRotFrictionInteraction ( )

◆ CRotFrictionInteraction() [2/2]

◆ ~CRotFrictionInteraction()

CRotFrictionInteraction::~CRotFrictionInteraction ( )
virtual

Member Function Documentation

◆ calcForces()

void CRotFrictionInteraction::calcForces ( )
virtual

Implements ARotPairInteraction.

References calcRigidBodyForces(), calcSimpleForces(), and m_rigid.

Here is the call graph for this function:

◆ calcNormalForce()

void CRotFrictionInteraction::calcNormalForce ( )

Calculate the normal force.

References CBasicParticle::getPos(), CBasicParticle::getRad(), m_k, m_normal_force, ARotPairInteraction::m_p1, and ARotPairInteraction::m_p2.

Here is the call graph for this function:

◆ calcRigidBodyForces()

void CRotFrictionInteraction::calcRigidBodyForces ( )
virtual

Yucang Wang's friction implementation which takes into account rigid body rotation of particle-pairs.

References CParticle::applyForce(), CRotParticle::applyMoment(), cross(), dot(), CRotParticle::getAngVel(), CBasicParticle::getPos(), CBasicParticle::getRad(), CParticle::getVel(), m_cpos, m_dt, m_E_diss, m_Ffric, m_force_deficit, m_is_slipping, m_is_touching, m_k, m_ks, m_mu_d, m_mu_s, m_normal_force, ARotPairInteraction::m_p1, ARotPairInteraction::m_p2, and Vec3::norm().

Referenced by calcForces().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calcSimpleForces()

void CRotFrictionInteraction::calcSimpleForces ( )
virtual

Calculate elastic and frictional forces. Rigid body rotations of particle-pairs are ignored

References CParticle::applyForce(), CRotParticle::applyMoment(), cross(), CRotParticle::getAngVel(), CBasicParticle::getPos(), CBasicParticle::getRad(), CParticle::getVel(), m_cpos, m_dt, m_E_diss, m_Ffric, m_force_deficit, m_is_slipping, m_is_touching, m_k, m_ks, m_mu_d, m_mu_s, m_normal_force, ARotPairInteraction::m_p1, ARotPairInteraction::m_p2, and Vec3::norm().

Referenced by calcForces().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Count()

double CRotFrictionInteraction::Count ( ) const
virtual

return 1 if particles are in contact, 0 otherwise

References m_is_touching.

Referenced by getScalarFieldFunction().

Here is the caller graph for this function:

◆ getAbsForceDeficit()

double CRotFrictionInteraction::getAbsForceDeficit ( ) const

get the force needed to overcome friction and make the interaction slip

References m_force_deficit, and Vec3::norm().

Referenced by getScalarFieldFunction().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getAbsSlip()

double CRotFrictionInteraction::getAbsSlip ( ) const

Return distance slipped at the contact in the current time step. Returns 0 if interaction is sticking or if particles are not in contact.

References cross(), CRotParticle::getAngVel(), CBasicParticle::getPos(), CParticle::getVel(), m_cpos, m_dt, m_is_slipping, m_is_touching, ARotPairInteraction::m_p1, ARotPairInteraction::m_p2, Vec3::norm(), and Vec3::norm2().

Referenced by getScalarFieldFunction().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getCheckedScalarFieldFunction()

CRotFrictionInteraction::CheckedScalarFieldFunction CRotFrictionInteraction::getCheckedScalarFieldFunction ( const string &  name)
static

References NULL.

◆ getDissipatedEnergy()

double CRotFrictionInteraction::getDissipatedEnergy ( ) const

return the amount of energy dissipated during the last time step

References m_E_diss.

Referenced by getScalarFieldFunction().

Here is the caller graph for this function:

◆ getForce()

Vec3 CRotFrictionInteraction::getForce ( ) const

If the particles are in contact, get total force, if not in contact return (0,0,0)

References m_Ffric, m_is_touching, and m_normal_force.

Referenced by getVectorFieldFunction().

Here is the caller graph for this function:

◆ getNormalForce()

Vec3 CRotFrictionInteraction::getNormalForce ( ) const

If the particles are in contact, get normal force, if not in contact return (0,0,0)

References m_is_touching, and m_normal_force.

Referenced by getVectorFieldFunction().

Here is the caller graph for this function:

◆ getPos()

virtual Vec3 CRotFrictionInteraction::getPos ( ) const
inlinevirtual

Implements ARotPairInteraction.

References m_cpos.

◆ getPotentialEnergy()

double CRotFrictionInteraction::getPotentialEnergy ( ) const

get the potential energy stored in the interaction

Warning
For performance reasons the tangential part of the elastic energy is calculated directly from the current tangential force whereas it would be more accurate to calculate it incrementally during the force calculation. Be aware that therefore the potential energy is an approximation. Tests suggest an accuracy of a few percent.

References m_Ffric, m_k, m_ks, and m_normal_force.

Referenced by getScalarFieldFunction().

Here is the caller graph for this function:

◆ getScalarFieldFunction()

CRotFrictionInteraction::ScalarFieldFunction CRotFrictionInteraction::getScalarFieldFunction ( const string &  name)
static

Get the particle member function which returns a scalar field of a given name.

Parameters
namethe name of the field

References Count(), getAbsForceDeficit(), getAbsSlip(), getDissipatedEnergy(), getPotentialEnergy(), getSlipping(), getSticking(), and NULL.

Here is the call graph for this function:

◆ getSlipping()

double CRotFrictionInteraction::getSlipping ( ) const

Get the static/dynamic status of the interaction. Returns 1 for a contact in dynamic friction, 0 for static or no contact

References m_is_slipping.

Referenced by getScalarFieldFunction().

Here is the caller graph for this function:

◆ getSticking()

double CRotFrictionInteraction::getSticking ( ) const

Get "sticking" contacts, i.e. return 1 if the contact is touching but not slipping, 0 otherwise

References m_is_slipping, and m_is_touching.

Referenced by getScalarFieldFunction().

Here is the caller graph for this function:

◆ getTangentialForce()

Vec3 CRotFrictionInteraction::getTangentialForce ( ) const

References m_Ffric, and m_is_touching.

Referenced by getVectorFieldFunction().

Here is the caller graph for this function:

◆ getType()

static string CRotFrictionInteraction::getType ( )
inlinestatic

◆ getVectorFieldFunction()

CRotFrictionInteraction::VectorFieldFunction CRotFrictionInteraction::getVectorFieldFunction ( const string &  name)
static

Get the particle member function which returns a vector field of a given name.

Parameters
namethe name of the field

References getForce(), getNormalForce(), getTangentialForce(), and NULL.

Here is the call graph for this function:

◆ isPersistent()

bool CRotFrictionInteraction::isPersistent ( )
virtual

References CBasicParticle::getPos(), CBasicParticle::getRad(), ARotPairInteraction::m_p1, and ARotPairInteraction::m_p2.

Here is the call graph for this function:

◆ loadRestartData()

void CRotFrictionInteraction::loadRestartData ( std::istream &  iStream)
virtual

Load restart data from an open istream

Parameters
iStreamthe input stream

Reimplemented from ARotPairInteraction.

References m_dt, m_Ffric, AInteraction::m_id, m_is_slipping, m_is_touching, m_k, m_ks, m_meanR_scaling, m_mu_d, m_mu_s, m_r0, m_scaling, Vec3::X(), Vec3::Y(), and Vec3::Z().

Here is the call graph for this function:

◆ saveRestartData()

void CRotFrictionInteraction::saveRestartData ( std::ostream &  oStream)
virtual

Save restart data to an open ostream

Parameters
oStreamthe output stream

Reimplemented from ARotPairInteraction.

References m_dt, m_Ffric, AInteraction::m_id, m_is_slipping, m_is_touching, m_k, m_ks, m_meanR_scaling, m_mu_d, m_mu_s, m_r0, m_scaling, Vec3::X(), Vec3::Y(), and Vec3::Z().

Here is the call graph for this function:

◆ setTimeStepSize()

void CRotFrictionInteraction::setTimeStepSize ( double  dt)

References m_dt.

Friends And Related Function Documentation

◆ operator<<

ostream& operator<< ( ostream &  ost,
const CRotFrictionInteraction BI 
)
friend

◆ TML_PackedMessageInterface

friend class TML_PackedMessageInterface
friend

Member Data Documentation

◆ m_cpos

Vec3 CRotFrictionInteraction::m_cpos
private

◆ m_dt

◆ m_E_diss

double CRotFrictionInteraction::m_E_diss
private

◆ m_Ffric

◆ m_force_deficit

Vec3 CRotFrictionInteraction::m_force_deficit
private

difference between fric. force & force necessary for slip

Referenced by calcRigidBodyForces(), calcSimpleForces(), and getAbsForceDeficit().

◆ m_is_slipping

◆ m_is_touching

bool CRotFrictionInteraction::m_is_touching
private

◆ m_k

◆ m_ks

◆ m_meanR_scaling

bool CRotFrictionInteraction::m_meanR_scaling
private

toggles whether to use the mean particle radius or minimum particle radius to define bond radius

Referenced by CRotFrictionInteraction(), loadRestartData(), TML_PackedMessageInterface::pack(), saveRestartData(), and TML_PackedMessageInterface::unpack().

◆ m_mu_d

double CRotFrictionInteraction::m_mu_d
private

◆ m_mu_s

◆ m_normal_force

Vec3 CRotFrictionInteraction::m_normal_force
private

◆ m_r0

double CRotFrictionInteraction::m_r0
private

◆ m_rigid

bool CRotFrictionInteraction::m_rigid
private

toggles whether to use rigid body friction interactions

Referenced by calcForces(), and CRotFrictionInteraction().

◆ m_scaling

bool CRotFrictionInteraction::m_scaling
private

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