ESyS-Particle  2.3.4
HertzMindlinInteraction.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 __HERTZMINDLININTERACTION_H
14 #define __HERTZMINDLININTERACTION_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 
27 class CHertzMindlinIGP : public AIGParam
28 {
29 public:
31 
33  const std::string &name,
34  double E,
35  double nu,
36  double fricCoef,
37  double dT
38  );
39 
40  virtual std::string getTypeString() const
41  {
42  return "HertzMindlin";
43  }
44 
45  void setTimeStepSize(double dt);
46 
47  double m_E; // Young's modulus
48  double m_nu; // Poisson ratio
49  double mu; // Friction coefficient
50  double dt;
51 };
52 
60 {
61  public: // types
63 
64  typedef
66  ) const;
67  typedef
68  std::pair<bool,double>
70  ) const;
71  typedef
73  ) const;
74 
75  static ScalarFieldFunction getScalarFieldFunction(const string&);
77  const string&
78  );
79  static VectorFieldFunction getVectorFieldFunction(const string&);
80 
81  protected:
82  double m_E;
83  double m_nu;
84  double m_r0;
85  double m_mu;
86  double m_dt;
91  double m_dn;
94  double m_E_diss;
95 
96  public:
100  CParticle*,
101  CParticle*,
102  const CHertzMindlinIGP&
103  );
104  virtual ~CHertzMindlinInteraction();
105 
106  static string getType() {return "CHertzMindlinInteraction";};
107 
108  virtual void calcForces();
109  virtual bool isPersistent();
110 
111  void setTimeStepSize(double dt);
112 
113  std::pair<bool,double> getAbsFrictionalForce() const;
114  std::pair<bool,double> getAbsFN() const;
115  std::pair<bool,double> getAbsMuFN() const;
116  std::pair<bool,double> getSlipVelocity() const;
117  std::pair<bool,double> getNormalStress() const;
118  std::pair<bool,double> getMaxFricStress() const;
119  std::pair<bool,double> getAbsFrictionalStress() const;
120 
121  double getAbsForceDeficit() const;
122  double getPotentialEnergy() const;
123  double getSlipping()const;
124  double getSticking()const;
125  double getDissipatedEnergy() const;
126  double Count() const;
127  Vec3 getForce() const;
128  Vec3 getNormalForce() const;
129  virtual Vec3 getPos() const {return m_cpos;};
130 
131  std::pair<bool,double> getMuEff(const Vec3&,const Vec3&) const;
132  std::pair<bool,double> getMuEffXY() const
133  {
134  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,1.0,0.0));
135  };
136  std::pair<bool,double> getMuEffXZ() const
137  {
138  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,0.0,1.0));
139  };
140 
141  friend std::ostream& operator<<(
142  std::ostream&,
144  );
146 };
147 
148 #endif //__HERTZMINDLININTERACTION_H
APairInteraction
Abstract base class for 2-particle interactions.
Definition: Interaction.h:69
APairInteraction::m_p2
CParticle * m_p2
Definition: Interaction.h:71
CHertzMindlinInteraction::m_is_touching
bool m_is_touching
contact status of the interaction
Definition: HertzMindlinInteraction.h:93
TML_PackedMessageInterface
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:29
CHertzMindlinInteraction::m_E_diss
double m_E_diss
dissipated energy
Definition: HertzMindlinInteraction.h:94
CHertzMindlinInteraction::getMuEff
std::pair< bool, double > getMuEff(const Vec3 &, const Vec3 &) const
Definition: HertzMindlinInteraction.cpp:445
CHertzMindlinInteraction::getAbsFN
std::pair< bool, double > getAbsFN() const
Definition: HertzMindlinInteraction.cpp:314
CHertzMindlinInteraction::getAbsFrictionalForce
std::pair< bool, double > getAbsFrictionalForce() const
Definition: HertzMindlinInteraction.cpp:194
CHertzMindlinInteraction::VectorFieldFunction
Vec3(CHertzMindlinInteraction::* VectorFieldFunction)() const
Definition: HertzMindlinInteraction.h:72
CHertzMindlinInteraction::operator<<
friend std::ostream & operator<<(std::ostream &, const CHertzMindlinInteraction &)
CHertzMindlinInteraction::~CHertzMindlinInteraction
virtual ~CHertzMindlinInteraction()
Definition: HertzMindlinInteraction.cpp:96
CHertzMindlinInteraction::getPos
virtual Vec3 getPos() const
Definition: HertzMindlinInteraction.h:129
CHertzMindlinInteraction::CheckedScalarFieldFunction
std::pair< bool, double >(CHertzMindlinInteraction::* CheckedScalarFieldFunction)() const
Definition: HertzMindlinInteraction.h:69
CHertzMindlinInteraction::getSlipping
double getSlipping() const
Definition: HertzMindlinInteraction.cpp:381
operator<<
ostream & operator<<(ostream &ost, const CHertzMindlinInteraction &BI)
Definition: HertzMindlinInteraction.cpp:680
console.h
Vec3::unit
VEC3_INLINE Vec3 unit() const
Definition: vec3.hpp:225
CHertzMindlinInteraction::getMuEffXY
std::pair< bool, double > getMuEffXY() const
Definition: HertzMindlinInteraction.h:132
CHertzMindlinInteraction::getAbsMuFN
std::pair< bool, double > getAbsMuFN() const
Definition: HertzMindlinInteraction.cpp:246
TML_PackedMessageInterface::pop_vec3
virtual Vec3 pop_vec3()=0
CHertzMindlinInteraction::m_cpos
Vec3 m_cpos
contact position
Definition: HertzMindlinInteraction.h:89
CHertzMindlinInteraction::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzMindlinInteraction.cpp:100
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
CHertzMindlinInteraction::calcForces
virtual void calcForces()
Definition: HertzMindlinInteraction.cpp:108
APairInteraction::m_p1
CParticle * m_p1
Definition: Interaction.h:71
CHertzMindlinInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: HertzMindlinInteraction.cpp:371
Interaction.h
CHertzMindlinInteraction::m_normal_force
Vec3 m_normal_force
current normal force
Definition: HertzMindlinInteraction.h:90
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
CHertzMindlinInteraction::ScalarFieldFunction
double(CHertzMindlinInteraction::* ScalarFieldFunction)() const
Definition: HertzMindlinInteraction.h:65
CParticle::applyForce
void applyForce(const Vec3 &, const Vec3 &)
Definition: Particle.cpp:384
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CHertzMindlinInteraction::m_E
double m_E
Young's modulus.
Definition: HertzMindlinInteraction.h:82
NULL
#define NULL
Definition: t_list.h:17
CHertzMindlinIGP::CHertzMindlinIGP
CHertzMindlinIGP()
Definition: HertzMindlinInteraction.cpp:18
CHertzMindlinIGP::dt
double dt
Definition: HertzMindlinInteraction.h:50
CHertzMindlinInteraction::getSlipVelocity
std::pair< bool, double > getSlipVelocity() const
Definition: HertzMindlinInteraction.cpp:347
CHertzMindlinInteraction::getMuEffXZ
std::pair< bool, double > getMuEffXZ() const
Definition: HertzMindlinInteraction.h:136
CHertzMindlinInteraction::getMaxFricStress
std::pair< bool, double > getMaxFricStress() const
Definition: HertzMindlinInteraction.cpp:281
CHertzMindlinInteraction::isPersistent
virtual bool isPersistent()
Definition: HertzMindlinInteraction.cpp:174
CHertzMindlinInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: HertzMindlinInteraction.cpp:420
packed_message_interface.h
CHertzMindlinInteraction::ParameterType
CHertzMindlinIGP ParameterType
Definition: HertzMindlinInteraction.h:62
TML_PackedMessageInterface::append
virtual void append(int)=0
CHertzMindlinInteraction::m_mu
double m_mu
coefficient of friction
Definition: HertzMindlinInteraction.h:85
CHertzMindlinInteraction::m_nu
double m_nu
Poisson ratio.
Definition: HertzMindlinInteraction.h:83
CHertzMindlinInteraction::m_is_slipping
bool m_is_slipping
static/dynamic status of the interaction
Definition: HertzMindlinInteraction.h:92
CHertzMindlinInteraction::getForce
Vec3 getForce() const
Definition: HertzMindlinInteraction.cpp:410
CHertzMindlinInteraction::getNormalStress
std::pair< bool, double > getNormalStress() const
Definition: HertzMindlinInteraction.cpp:323
Vec3
Definition: vec3.h:47
CHertzMindlinInteraction::getAbsFrictionalStress
std::pair< bool, double > getAbsFrictionalStress() const
Definition: HertzMindlinInteraction.cpp:220
CHertzMindlinInteraction::getType
static string getType()
Definition: HertzMindlinInteraction.h:106
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CHertzMindlinInteraction::m_force_deficit
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: HertzMindlinInteraction.h:88
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
CHertzMindlinInteraction::m_Ffric
Vec3 m_Ffric
current frictional force
Definition: HertzMindlinInteraction.h:87
vec3.h
CHertzMindlinInteraction::CHertzMindlinInteraction
CHertzMindlinInteraction()
Definition: HertzMindlinInteraction.cpp:39
CHertzMindlinInteraction::m_dt
double m_dt
time step
Definition: HertzMindlinInteraction.h:86
CHertzMindlinInteraction::m_dn
double m_dn
caching displacement for E_pot
Definition: HertzMindlinInteraction.h:91
CHertzMindlinIGP
Interaction group parameters for Hertz-Mindlin interactions.
Definition: HertzMindlinInteraction.h:28
CHertzMindlinInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: HertzMindlinInteraction.cpp:551
CHertzMindlinInteraction::getSticking
double getSticking() const
Definition: HertzMindlinInteraction.cpp:392
CHertzMindlinIGP::getTypeString
virtual std::string getTypeString() const
Definition: HertzMindlinInteraction.h:40
CHertzMindlinInteraction
Frictional+Elastic interaction between particles.
Definition: HertzMindlinInteraction.h:60
CHertzMindlinIGP::m_E
double m_E
Definition: HertzMindlinInteraction.h:47
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CHertzMindlinInteraction::getAbsForceDeficit
double getAbsForceDeficit() const
Definition: HertzMindlinInteraction.cpp:185
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
CHertzMindlinInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: HertzMindlinInteraction.cpp:508
HertzMindlinInteraction.h
CHertzMindlinIGP::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzMindlinInteraction.cpp:52
CHertzMindlinInteraction::m_r0
double m_r0
equilibrium distance
Definition: HertzMindlinInteraction.h:84
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
CHertzMindlinInteraction::Count
double Count() const
Definition: HertzMindlinInteraction.cpp:429
CHertzMindlinIGP::m_nu
double m_nu
Definition: HertzMindlinInteraction.h:48
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
CHertzMindlinInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: HertzMindlinInteraction.cpp:611
CHertzMindlinInteraction::getDissipatedEnergy
double getDissipatedEnergy() const
Definition: HertzMindlinInteraction.cpp:401
CHertzMindlinIGP::mu
double mu
Definition: HertzMindlinInteraction.h:49
Particle.h