ESyS-Particle  2.3.4
RotFricInteraction.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __ROTFRICTIONINTERACTION_H
14 #define __ROTFRICTIONINTERACTION_H
15 
16 // -- project includes --
18 #include "Model/RotParticle.h"
19 #include "Model/IGParam.h"
20 #include "Foundation/vec3.h"
21 
22 // -- I/O includes --
23 #include <iostream>
24 using std::ostream;
25 
26 
27 //double calc_angle( double , double ) ;
28 
29 
37 class CRotFrictionIGP : public AIGParam
38 {
39 public:
41 
43  const std::string &name,
44  double k,
45  double mu_d,
46  double mu_s,
47  double k_s,
48  double dt,
49  bool scaling,
50  bool rigid,
51  bool meanR_scaling
52  );
53 
55  const std::string &name,
56  double youngsModulus,
57  double poissonsRatio,
58  double mu_d,
59  double mu_s,
60  double dt,
61  bool rigid,
62  bool meanR_scaling
63  );
64 
65  virtual std::string getTypeString() const
66  {
67  return "RotFriction";
68  }
69 
70  void setTimeStepSize(double dt);
71 
72  double k;
73  double mu_d; // sliding frictional coefficient
74  double mu_s; // max static frictional coefficient
75  double k_s;
76  double dt;
77  bool scaling;
78  bool rigid;
80 };
81 
90 {
91  public: // types
93 
94  typedef double (CRotFrictionInteraction::* ScalarFieldFunction)() const;
95  typedef pair<bool,double> (CRotFrictionInteraction::* CheckedScalarFieldFunction)() const;
97 
99  static ScalarFieldFunction getScalarFieldFunction(const string&);
100  static VectorFieldFunction getVectorFieldFunction(const string&);
101 
102 // protected:
103  private:
104 
105  double m_k;
106  double m_r0;
107  double m_mu_d;
108  double m_mu_s;
109  double m_ks;
110  double m_dt;
117  double m_E_diss;
118  bool m_scaling;
119  bool m_rigid;
121 
122  //Quaternion m_init_q1, m_init_q2;
123  //Vec3 m_init_pos1 , m_init_pos2;
124 
125  public:
128  virtual ~CRotFrictionInteraction();
129 
130  static string getType() {return "RotFriction";};
131 
132  virtual void calcForces();
133  virtual void calcSimpleForces();
134  virtual void calcRigidBodyForces();
135  virtual bool isPersistent();
136 
137  void setTimeStepSize(double dt);
138 
139  void calcNormalForce();
140  double getAbsForceDeficit()const;
141  double getPotentialEnergy()const;
142  double getSlipping()const;
143  double getSticking()const;
144  double getDissipatedEnergy() const;
145  double getAbsSlip() const;
146  virtual double Count() const;
147  virtual Vec3 getPos() const {return m_cpos;};
148  Vec3 getForce() const;
149  Vec3 getNormalForce() const;
150  Vec3 getTangentialForce() const;
151 
152  friend ostream& operator<<(ostream&,const CRotFrictionInteraction&);
154 
155  // checkpointing
156  virtual void saveRestartData(std::ostream &oStream);
157  virtual void loadRestartData(std::istream &iStream);
158 };
159 
160 #endif //__ROTFRICTIONINTERACTION_H
RotPairInteraction.h
CRotFrictionInteraction::getAbsForceDeficit
double getAbsForceDeficit() const
Definition: RotFricInteraction.cpp:354
CRotFrictionInteraction::setTimeStepSize
void setTimeStepSize(double dt)
Definition: RotFricInteraction.cpp:148
RotFricInteraction.h
CRotFrictionInteraction::VectorFieldFunction
Vec3(CRotFrictionInteraction::* VectorFieldFunction)() const
Definition: RotFricInteraction.h:96
CRotFrictionInteraction::getForce
Vec3 getForce() const
Definition: RotFricInteraction.cpp:421
TML_PackedMessageInterface
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:29
CRotFrictionIGP
Interaction parameters for frictional interaction between rotational particles.
Definition: RotFricInteraction.h:38
CRotFrictionInteraction::operator<<
friend ostream & operator<<(ostream &, const CRotFrictionInteraction &)
Definition: RotFricInteraction.cpp:639
calc_angle
double calc_angle(double, double)
Definition: RotBondedInteraction.cpp:22
CRotFrictionIGP::setTimeStepSize
void setTimeStepSize(double dt)
Definition: RotFricInteraction.cpp:81
CRotFrictionInteraction::m_dt
double m_dt
time step
Definition: RotFricInteraction.h:110
CRotFrictionIGP::k
double k
Definition: RotFricInteraction.h:72
CRotFrictionInteraction::m_mu_s
double m_mu_s
coefficient of static friction
Definition: RotFricInteraction.h:108
CRotFrictionInteraction::m_force_deficit
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: RotFricInteraction.h:112
CRotFrictionIGP::CRotFrictionIGP
CRotFrictionIGP()
Definition: RotFricInteraction.cpp:21
RotParticle.h
CRotFrictionInteraction::ScalarFieldFunction
double(CRotFrictionInteraction::* ScalarFieldFunction)() const
Definition: RotFricInteraction.h:94
CRotFrictionInteraction::getSticking
double getSticking() const
Definition: RotFricInteraction.cpp:404
CRotFrictionIGP::mu_s
double mu_s
Definition: RotFricInteraction.h:74
CRotFrictionInteraction::isPersistent
virtual bool isPersistent()
Definition: RotFricInteraction.cpp:343
CRotFrictionInteraction::m_r0
double m_r0
equilibrium distance
Definition: RotFricInteraction.h:106
dot
VEC3_INLINE double dot(const Vec3 &v1, const Vec3 &v2)
Definition: vec3.hpp:196
CRotFrictionInteraction::m_Ffric
Vec3 m_Ffric
current frictional force
Definition: RotFricInteraction.h:111
CRotFrictionInteraction::getSlipping
double getSlipping() const
Definition: RotFricInteraction.cpp:394
CRotFrictionInteraction::CheckedScalarFieldFunction
pair< bool, double >(CRotFrictionInteraction::* CheckedScalarFieldFunction)() const
Definition: RotFricInteraction.h:95
CRotFrictionInteraction::m_is_touching
bool m_is_touching
contact status of the interaction
Definition: RotFricInteraction.h:116
CRotFrictionIGP::mu_d
double mu_d
Definition: RotFricInteraction.h:73
console.h
CRotFrictionInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: RotFricInteraction.cpp:430
CRotFrictionInteraction::m_k
double m_k
spring constant
Definition: RotFricInteraction.h:105
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
CRotFrictionInteraction::m_ks
double m_ks
shear stiffness (Cundall)
Definition: RotFricInteraction.h:109
CRotFrictionInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: RotFricInteraction.cpp:522
CRotFrictionInteraction::calcForces
virtual void calcForces()
Definition: RotFricInteraction.cpp:158
cross
VEC3_INLINE Vec3 cross(const Vec3 &lhs, const Vec3 &rhs)
Definition: vec3.hpp:187
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
CParticle::applyForce
void applyForce(const Vec3 &, const Vec3 &)
Definition: Particle.cpp:384
Vec3::X
VEC3_INLINE double & X()
Definition: vec3.h:119
ARotPairInteraction::m_p2
CRotParticle * m_p2
Definition: RotPairInteraction.h:31
CRotFrictionIGP::getTypeString
virtual std::string getTypeString() const
Definition: RotFricInteraction.h:65
CRotFrictionInteraction::m_meanR_scaling
bool m_meanR_scaling
toggles whether to use the mean particle radius or minimum particle radius to define bond radius
Definition: RotFricInteraction.h:120
CRotFrictionInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: RotFricInteraction.cpp:510
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CRotFrictionIGP::scaling
bool scaling
Definition: RotFricInteraction.h:77
CRotFrictionInteraction::getTangentialForce
Vec3 getTangentialForce() const
Definition: RotFricInteraction.cpp:436
CRotFrictionInteraction::~CRotFrictionInteraction
virtual ~CRotFrictionInteraction()
Definition: RotFricInteraction.cpp:153
CRotFrictionInteraction::getDissipatedEnergy
double getDissipatedEnergy() const
Definition: RotFricInteraction.cpp:413
CRotFrictionInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: RotFricInteraction.cpp:382
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
CRotFrictionIGP::meanR_scaling
bool meanR_scaling
Definition: RotFricInteraction.h:79
NULL
#define NULL
Definition: t_list.h:17
ARotPairInteraction
Abstract base class interactions between 2 rotational particles.
Definition: RotPairInteraction.h:29
CRotFrictionInteraction::m_is_slipping
bool m_is_slipping
static/dynamic status of the interaction
Definition: RotFricInteraction.h:115
CRotFrictionInteraction::m_mu_d
double m_mu_d
coefficient of dynamic friction
Definition: RotFricInteraction.h:107
CRotFrictionInteraction::getType
static string getType()
Definition: RotFricInteraction.h:130
ARotPairInteraction::m_p1
CRotParticle * m_p1
Definition: RotPairInteraction.h:31
packed_message_interface.h
TML_PackedMessageInterface::append
virtual void append(int)=0
CRotFrictionInteraction::m_normal_force
Vec3 m_normal_force
current normal force
Definition: RotFricInteraction.h:114
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CRotFrictionInteraction
Frictional+Elastic interaction between particles between rotational particles.
Definition: RotFricInteraction.h:90
CRotFrictionInteraction::calcRigidBodyForces
virtual void calcRigidBodyForces()
Definition: RotFricInteraction.cpp:235
CRotFrictionInteraction::getPos
virtual Vec3 getPos() const
Definition: RotFricInteraction.h:147
CRotFrictionInteraction::m_E_diss
double m_E_diss
dissipated energy
Definition: RotFricInteraction.h:117
Vec3
Definition: vec3.h:47
CParticle::getDo2dCalculations
static bool getDo2dCalculations()
Definition: Particle.h:181
operator<<
ostream & operator<<(ostream &ost, const CRotFrictionInteraction &BI)
Definition: RotFricInteraction.cpp:639
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CRotFrictionInteraction::m_cpos
Vec3 m_cpos
contact position
Definition: RotFricInteraction.h:113
CRotFrictionInteraction::m_rigid
bool m_rigid
toggles whether to use rigid body friction interactions
Definition: RotFricInteraction.h:119
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
vec3.h
CRotParticle::getAngVel
const Vec3 & getAngVel() const
Definition: RotParticle.h:172
CRotFrictionInteraction::getAbsSlip
double getAbsSlip() const
Definition: RotFricInteraction.cpp:456
CRotFrictionInteraction::Count
virtual double Count() const
Definition: RotFricInteraction.cpp:445
CRotFrictionIGP::k_s
double k_s
Definition: RotFricInteraction.h:75
Vec3::norm2
VEC3_INLINE double norm2() const
Definition: vec3.hpp:218
CRotFrictionInteraction::calcNormalForce
void calcNormalForce()
Definition: RotFricInteraction.cpp:362
CRotFrictionInteraction::ParameterType
CRotFrictionIGP ParameterType
Definition: RotFricInteraction.h:92
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CRotFrictionInteraction::CRotFrictionInteraction
CRotFrictionInteraction()
Definition: RotFricInteraction.cpp:86
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
CRotFrictionInteraction::m_scaling
bool m_scaling
toggles scaling of elastic properties by particle size
Definition: RotFricInteraction.h:118
CRotFrictionInteraction::saveRestartData
virtual void saveRestartData(std::ostream &oStream)
Definition: RotFricInteraction.cpp:595
CRotFrictionInteraction::loadRestartData
virtual void loadRestartData(std::istream &iStream)
Definition: RotFricInteraction.cpp:620
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
AInteraction::m_id
vector< int > m_id
id's of the particles involved
Definition: Interaction.h:39
CRotFrictionInteraction::calcSimpleForces
virtual void calcSimpleForces()
Definition: RotFricInteraction.cpp:171
IGParam.h
CRotParticle::applyMoment
void applyMoment(const Vec3 &)
Definition: RotParticle.cpp:327
CRotFrictionIGP::dt
double dt
Definition: RotFricInteraction.h:76
CRotFrictionIGP::rigid
bool rigid
Definition: RotFricInteraction.h:78
CRotFrictionInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: RotFricInteraction.cpp:484
CRotParticle
Class for a rotational particle.
Definition: RotParticle.h:54