ESyS-Particle  2.3.4
HertzianViscoElasticFrictionInteraction.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 __HERTZIANVISCOELASTICFRICTIONINTERACTION_H
14 #define __HERTZIANVISCOELASTICFRICTIONINTERACTION_H
15 
16 #include "Model/IGParam.h"
17 #include "Model/Interaction.h"
18 #include "Model/Particle.h"
19 #include "Foundation/vec3.h"
20 
21 #include <iostream>
22 #include <utility>
23 
28 {
29 public:
31 
33  const std::string &name,
34  double A,
35  double E,
36  double nu,
37  double fricCoef,
38  double shearK,
39  double dT
40  );
41 
42  virtual std::string getTypeString() const
43  {
44  return "HertzianViscoElasticFriction";
45  }
46 
47  void setTimeStepSize(double dt);
48 
49  double m_A; // Dissipative constant
50  double m_E; // Young's modulus
51  double m_nu; // Poisson ratio
52  double mu; // Friction coefficient
53  double k_s; // Shear coefficient
54  double dt;
55 };
56 
64 {
65  public: // types
67 
68  typedef
70  ) const;
71  typedef
72  std::pair<bool,double>
74  ) const;
75  typedef
77  ) const;
78 
79  static ScalarFieldFunction getScalarFieldFunction(const string&);
81  const string&
82  );
83  static VectorFieldFunction getVectorFieldFunction(const string&);
84 
85  protected:
86  double m_A;
87  double m_E;
88  double m_nu;
89  double m_r0;
90  double m_mu;
91  double m_ks;
92  double m_dt;
97  double m_dn;
100  double m_E_diss;
101 
102  public:
106  CParticle*,
107  CParticle*,
109  );
111 
112  static string getType() {return "HertzianViscoElasticFriction";};
113 
114  virtual void calcForces();
115  virtual bool isPersistent();
116 
117  void setTimeStepSize(double dt);
118 
119  std::pair<bool,double> getAbsFrictionalForce() const;
120  std::pair<bool,double> getAbsFN() const;
121  std::pair<bool,double> getAbsMuFN() const;
122  std::pair<bool,double> getSlipVelocity() const;
123  std::pair<bool,double> getNormalStress() const;
124  std::pair<bool,double> getMaxFricStress() const;
125  std::pair<bool,double> getAbsFrictionalStress() const;
126 
127  double getAbsForceDeficit() const;
128  double getPotentialEnergy() const;
129  double getSlipping()const;
130  double getSticking()const;
131  double getDissipatedEnergy() const;
132  double Count() const;
133  Vec3 getForce() const;
134  Vec3 getNormalForce() const;
135  virtual Vec3 getPos() const {return m_cpos;};
136 
137  std::pair<bool,double> getMuEff(const Vec3&,const Vec3&) const;
138  std::pair<bool,double> getMuEffXY() const
139  {
140  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,1.0,0.0));
141  };
142  std::pair<bool,double> getMuEffXZ() const
143  {
144  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,0.0,1.0));
145  };
146 
147  friend std::ostream& operator<<(
148  std::ostream&,
150  );
152 };
153 
154 #endif //__HERTZIANVISCOELASTICFRICTIONINTERACTION_H
CHertzianViscoElasticFrictionInteraction::m_nu
double m_nu
Poisson ratio.
Definition: HertzianViscoElasticFrictionInteraction.h:88
CHertzianViscoElasticFrictionInteraction::getAbsForceDeficit
double getAbsForceDeficit() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:212
CHertzianViscoElasticFrictionInteraction::getNormalStress
std::pair< bool, double > getNormalStress() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:377
CHertzianViscoElasticFrictionInteraction::calcForces
virtual void calcForces()
Definition: HertzianViscoElasticFrictionInteraction.cpp:120
CHertzianViscoElasticFrictionInteraction::m_dt
double m_dt
time step
Definition: HertzianViscoElasticFrictionInteraction.h:92
CHertzianViscoElasticFrictionInteraction::getSlipping
double getSlipping() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:435
APairInteraction
Abstract base class for 2-particle interactions.
Definition: Interaction.h:69
HertzianViscoElasticFrictionInteraction.h
CHertzianViscoElasticFrictionInteraction::getAbsFrictionalStress
std::pair< bool, double > getAbsFrictionalStress() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:247
APairInteraction::m_p2
CParticle * m_p2
Definition: Interaction.h:71
TML_PackedMessageInterface
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:29
CHertzianViscoElasticFrictionIGP::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzianViscoElasticFrictionInteraction.cpp:62
CHertzianViscoElasticFrictionInteraction::getPos
virtual Vec3 getPos() const
Definition: HertzianViscoElasticFrictionInteraction.h:135
CHertzianViscoElasticFrictionInteraction::getMuEff
std::pair< bool, double > getMuEff(const Vec3 &, const Vec3 &) const
Definition: HertzianViscoElasticFrictionInteraction.cpp:499
CHertzianViscoElasticFrictionInteraction::getAbsFrictionalForce
std::pair< bool, double > getAbsFrictionalForce() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:221
CHertzianViscoElasticFrictionInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: HertzianViscoElasticFrictionInteraction.cpp:665
CHertzianViscoElasticFrictionInteraction::m_r0
double m_r0
equilibrium distance
Definition: HertzianViscoElasticFrictionInteraction.h:89
CHertzianViscoElasticFrictionInteraction::VectorFieldFunction
Vec3(CHertzianViscoElasticFrictionInteraction::* VectorFieldFunction)() const
Definition: HertzianViscoElasticFrictionInteraction.h:76
operator<<
ostream & operator<<(ostream &ost, const CHertzianViscoElasticFrictionInteraction &BI)
Definition: HertzianViscoElasticFrictionInteraction.cpp:738
CHertzianViscoElasticFrictionInteraction::m_normal_force
Vec3 m_normal_force
current normal force
Definition: HertzianViscoElasticFrictionInteraction.h:96
CHertzianViscoElasticFrictionInteraction::m_cpos
Vec3 m_cpos
contact position
Definition: HertzianViscoElasticFrictionInteraction.h:95
CHertzianViscoElasticFrictionInteraction::getMaxFricStress
std::pair< bool, double > getMaxFricStress() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:321
CHertzianViscoElasticFrictionInteraction::operator<<
friend std::ostream & operator<<(std::ostream &, const CHertzianViscoElasticFrictionInteraction &)
CHertzianViscoElasticFrictionInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: HertzianViscoElasticFrictionInteraction.cpp:562
CHertzianViscoElasticFrictionInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: HertzianViscoElasticFrictionInteraction.cpp:605
console.h
CHertzianViscoElasticFrictionInteraction::ParameterType
CHertzianViscoElasticFrictionIGP ParameterType
Definition: HertzianViscoElasticFrictionInteraction.h:66
Vec3::unit
VEC3_INLINE Vec3 unit() const
Definition: vec3.hpp:225
CHertzianViscoElasticFrictionInteraction::getDissipatedEnergy
double getDissipatedEnergy() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:455
TML_PackedMessageInterface::pop_vec3
virtual Vec3 pop_vec3()=0
CHertzianViscoElasticFrictionInteraction::m_E_diss
double m_E_diss
dissipated energy
Definition: HertzianViscoElasticFrictionInteraction.h:100
CHertzianViscoElasticFrictionInteraction::CHertzianViscoElasticFrictionInteraction
CHertzianViscoElasticFrictionInteraction()
Definition: HertzianViscoElasticFrictionInteraction.cpp:47
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
CHertzianViscoElasticFrictionIGP::m_A
double m_A
Definition: HertzianViscoElasticFrictionInteraction.h:49
APairInteraction::m_p1
CParticle * m_p1
Definition: Interaction.h:71
CHertzianViscoElasticFrictionInteraction::getSticking
double getSticking() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:446
Interaction.h
CHertzianViscoElasticFrictionInteraction::m_mu
double m_mu
coefficient of friction
Definition: HertzianViscoElasticFrictionInteraction.h:90
CHertzianViscoElasticFrictionIGP::dt
double dt
Definition: HertzianViscoElasticFrictionInteraction.h:54
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
CHertzianViscoElasticFrictionIGP::m_E
double m_E
Definition: HertzianViscoElasticFrictionInteraction.h:50
CHertzianViscoElasticFrictionIGP::mu
double mu
Definition: HertzianViscoElasticFrictionInteraction.h:52
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CHertzianViscoElasticFrictionInteraction::Count
double Count() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:483
CHertzianViscoElasticFrictionInteraction::m_Ffric
Vec3 m_Ffric
current frictional force
Definition: HertzianViscoElasticFrictionInteraction.h:93
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
CHertzianViscoElasticFrictionIGP::getTypeString
virtual std::string getTypeString() const
Definition: HertzianViscoElasticFrictionInteraction.h:42
CHertzianViscoElasticFrictionInteraction::getAbsFN
std::pair< bool, double > getAbsFN() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:368
NULL
#define NULL
Definition: t_list.h:17
packed_message_interface.h
CHertzianViscoElasticFrictionInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:474
CHertzianViscoElasticFrictionInteraction::m_A
double m_A
Dissipative constant.
Definition: HertzianViscoElasticFrictionInteraction.h:86
TML_PackedMessageInterface::append
virtual void append(int)=0
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CHertzianViscoElasticFrictionIGP::m_nu
double m_nu
Definition: HertzianViscoElasticFrictionInteraction.h:51
CHertzianViscoElasticFrictionInteraction::m_dn
double m_dn
caching displacement for E_pot
Definition: HertzianViscoElasticFrictionInteraction.h:97
CHertzianViscoElasticFrictionIGP
Interaction group parameters for Hertzian viscoelastic interactions with friction.
Definition: HertzianViscoElasticFrictionInteraction.h:28
CHertzianViscoElasticFrictionInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:425
CHertzianViscoElasticFrictionInteraction::CheckedScalarFieldFunction
std::pair< bool, double >(CHertzianViscoElasticFrictionInteraction::* CheckedScalarFieldFunction)() const
Definition: HertzianViscoElasticFrictionInteraction.h:73
CHertzianViscoElasticFrictionInteraction::m_ks
double m_ks
shear stiffness (Cundall)
Definition: HertzianViscoElasticFrictionInteraction.h:91
Vec3
Definition: vec3.h:47
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CHertzianViscoElasticFrictionInteraction::getAbsMuFN
std::pair< bool, double > getAbsMuFN() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:273
CHertzianViscoElasticFrictionInteraction::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzianViscoElasticFrictionInteraction.cpp:112
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
vec3.h
CHertzianViscoElasticFrictionInteraction::m_is_touching
bool m_is_touching
contact status of the interaction
Definition: HertzianViscoElasticFrictionInteraction.h:99
CHertzianViscoElasticFrictionInteraction::getForce
Vec3 getForce() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:464
CHertzianViscoElasticFrictionInteraction::getSlipVelocity
std::pair< bool, double > getSlipVelocity() const
Definition: HertzianViscoElasticFrictionInteraction.cpp:401
CHertzianViscoElasticFrictionInteraction::getMuEffXY
std::pair< bool, double > getMuEffXY() const
Definition: HertzianViscoElasticFrictionInteraction.h:138
CHertzianViscoElasticFrictionIGP::k_s
double k_s
Definition: HertzianViscoElasticFrictionInteraction.h:53
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
CHertzianViscoElasticFrictionInteraction
Frictional+ViscoElastic interaction between particles.
Definition: HertzianViscoElasticFrictionInteraction.h:64
CHertzianViscoElasticFrictionInteraction::ScalarFieldFunction
double(CHertzianViscoElasticFrictionInteraction::* ScalarFieldFunction)() const
Definition: HertzianViscoElasticFrictionInteraction.h:69
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
CHertzianViscoElasticFrictionInteraction::m_is_slipping
bool m_is_slipping
static/dynamic status of the interaction
Definition: HertzianViscoElasticFrictionInteraction.h:98
AInteraction::m_id
vector< int > m_id
id's of the particles involved
Definition: Interaction.h:39
CParticle
Class for a basic particle.
Definition: Particle.h:51
IGParam.h
CHertzianViscoElasticFrictionInteraction::getType
static string getType()
Definition: HertzianViscoElasticFrictionInteraction.h:112
CHertzianViscoElasticFrictionInteraction::~CHertzianViscoElasticFrictionInteraction
virtual ~CHertzianViscoElasticFrictionInteraction()
Definition: HertzianViscoElasticFrictionInteraction.cpp:108
CHertzianViscoElasticFrictionInteraction::m_E
double m_E
Young's modulus.
Definition: HertzianViscoElasticFrictionInteraction.h:87
CHertzianViscoElasticFrictionInteraction::getMuEffXZ
std::pair< bool, double > getMuEffXZ() const
Definition: HertzianViscoElasticFrictionInteraction.h:142
CHertzianViscoElasticFrictionInteraction::m_force_deficit
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: HertzianViscoElasticFrictionInteraction.h:94
CHertzianViscoElasticFrictionInteraction::isPersistent
virtual bool isPersistent()
Definition: HertzianViscoElasticFrictionInteraction.cpp:201
Particle.h
CHertzianViscoElasticFrictionIGP::CHertzianViscoElasticFrictionIGP
CHertzianViscoElasticFrictionIGP()
Definition: HertzianViscoElasticFrictionInteraction.cpp:22