ESyS-Particle  2.3
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, Vec3
getRaw2Data () 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

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

Constructor & Destructor Documentation

CRotFrictionInteraction::CRotFrictionInteraction ( )
CRotFrictionInteraction::~CRotFrictionInteraction ( )
virtual

Member Function Documentation

void CRotFrictionInteraction::calcForces ( )
virtual

Implements ARotPairInteraction.

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

Here is the call graph for this function:

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:

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:

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:

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:

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:

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:

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

References NULL.

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:

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:

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:

virtual Vec3 CRotFrictionInteraction::getPos ( ) const
inlinevirtual

Implements ARotPairInteraction.

References m_cpos.

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:

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:

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:

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:

Vec3 CRotFrictionInteraction::getTangentialForce ( ) const

References m_Ffric, and m_is_touching.

Referenced by getVectorFieldFunction().

Here is the caller graph for this function:

static string CRotFrictionInteraction::getType ( )
inlinestatic
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:

bool CRotFrictionInteraction::isPersistent ( )
virtual

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

Here is the call graph for this function:

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:

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:

void CRotFrictionInteraction::setTimeStepSize ( double  dt)

References m_dt.

Friends And Related Function Documentation

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

Member Data Documentation

Vec3 CRotFrictionInteraction::m_cpos
private
double CRotFrictionInteraction::m_dt
private
double CRotFrictionInteraction::m_E_diss
private
Vec3 CRotFrictionInteraction::m_Ffric
private
Vec3 CRotFrictionInteraction::m_force_deficit
private

difference between fric. force & force necessary for slip

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

bool CRotFrictionInteraction::m_is_slipping
private
bool CRotFrictionInteraction::m_is_touching
private
double CRotFrictionInteraction::m_k
private
double CRotFrictionInteraction::m_ks
private
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(), and saveRestartData().

double CRotFrictionInteraction::m_mu_d
private
double CRotFrictionInteraction::m_mu_s
private
Vec3 CRotFrictionInteraction::m_normal_force
private
double CRotFrictionInteraction::m_r0
private

equilibrium distance

Referenced by CRotFrictionInteraction(), loadRestartData(), and saveRestartData().

bool CRotFrictionInteraction::m_rigid
private

toggles whether to use rigid body friction interactions

Referenced by calcForces(), and CRotFrictionInteraction().

bool CRotFrictionInteraction::m_scaling
private

toggles scaling of elastic properties by particle size

Referenced by CRotFrictionInteraction(), loadRestartData(), and saveRestartData().


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