ESyS-Particle  2.3.4
HertzMindlinViscoInteraction.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 __HERTZMINDLINVISCOINTERACTION_H
14 #define __HERTZMINDLINVISCOINTERACTION_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 E,
35  double nu,
36  double fricCoef,
37  double restiCoef,
38  double dT
39  );
40 
41  virtual std::string getTypeString() const
42  {
43  return "HertzMindlinVisco";
44  }
45 
46  void setTimeStepSize(double dt);
47 
48  double m_E; // Young's modulus
49  double m_nu; // Poisson ratio
50  double mu; // Friction coefficient
51  double m_COR; //Coefficient of restitution
52  double dt;
53 };
54 
62 {
63  public: // types
65 
66  typedef
68  ) const;
69  typedef
70  std::pair<bool,double>
72  ) const;
73  typedef
75  ) const;
76 
77  static ScalarFieldFunction getScalarFieldFunction(const string&);
79  const string&
80  );
81  static VectorFieldFunction getVectorFieldFunction(const string&);
82 
83  protected:
84  double m_E;
85  double m_nu;
86  double m_r0;
87  double m_mu;
88  double m_COR;
89  double m_dt;
94  double m_dn;
97  double m_E_diss;
98 
99  public:
103  CParticle*,
104  CParticle*,
105  const CHertzMindlinViscoIGP&
106  );
108 
109  static string getType() {return "CHertzMindlinViscoInteraction";};
110 
111  virtual void calcForces();
112  virtual bool isPersistent();
113 
114  void setTimeStepSize(double dt);
115 
116  std::pair<bool,double> getAbsFrictionalForce() const;
117  std::pair<bool,double> getAbsFN() const;
118  std::pair<bool,double> getAbsMuFN() const;
119  std::pair<bool,double> getSlipVelocity() const;
120  std::pair<bool,double> getNormalStress() const;
121  std::pair<bool,double> getMaxFricStress() const;
122  std::pair<bool,double> getAbsFrictionalStress() const;
123 
124  double getAbsForceDeficit() const;
125  double getPotentialEnergy() const;
126  double getSlipping()const;
127  double getSticking()const;
128  double getDissipatedEnergy() const;
129  double Count() const;
130  Vec3 getForce() const;
131  Vec3 getNormalForce() const;
132  virtual Vec3 getPos() const {return m_cpos;};
133 
134  std::pair<bool,double> getMuEff(const Vec3&,const Vec3&) const;
135  std::pair<bool,double> getMuEffXY() const
136  {
137  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,1.0,0.0));
138  };
139  std::pair<bool,double> getMuEffXZ() const
140  {
141  return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,0.0,1.0));
142  };
143 
144  friend std::ostream& operator<<(
145  std::ostream&,
147  );
149 };
150 
151 #endif //__HERTZMINDLINVISCOINTERACTION_H
CHertzMindlinViscoInteraction::m_dt
double m_dt
time step
Definition: HertzMindlinViscoInteraction.h:89
CHertzMindlinViscoInteraction::m_dn
double m_dn
caching displacement for E_pot
Definition: HertzMindlinViscoInteraction.h:94
CHertzMindlinViscoInteraction::CheckedScalarFieldFunction
std::pair< bool, double >(CHertzMindlinViscoInteraction::* CheckedScalarFieldFunction)() const
Definition: HertzMindlinViscoInteraction.h:71
CHertzMindlinViscoInteraction::getMuEff
std::pair< bool, double > getMuEff(const Vec3 &, const Vec3 &) const
Definition: HertzMindlinViscoInteraction.cpp:478
CHertzMindlinViscoInteraction::m_mu
double m_mu
coefficient of friction
Definition: HertzMindlinViscoInteraction.h:87
CHertzMindlinViscoInteraction::getSlipping
double getSlipping() const
Definition: HertzMindlinViscoInteraction.cpp:414
APairInteraction
Abstract base class for 2-particle interactions.
Definition: Interaction.h:69
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
CHertzMindlinViscoInteraction::CHertzMindlinViscoInteraction
CHertzMindlinViscoInteraction()
Definition: HertzMindlinViscoInteraction.cpp:42
CHertzMindlinViscoInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: HertzMindlinViscoInteraction.cpp:541
CHertzMindlinViscoIGP::m_E
double m_E
Definition: HertzMindlinViscoInteraction.h:48
CHertzMindlinViscoInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: HertzMindlinViscoInteraction.cpp:584
CHertzMindlinViscoInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: HertzMindlinViscoInteraction.cpp:644
CParticle::getMass
double getMass() const
Definition: Particle.h:118
CHertzMindlinViscoInteraction::m_Ffric
Vec3 m_Ffric
current frictional force
Definition: HertzMindlinViscoInteraction.h:90
CHertzMindlinViscoInteraction::m_COR
double m_COR
coefficient of restitution
Definition: HertzMindlinViscoInteraction.h:88
CHertzMindlinViscoInteraction::getAbsFN
std::pair< bool, double > getAbsFN() const
Definition: HertzMindlinViscoInteraction.cpp:347
CHertzMindlinViscoInteraction::getMuEffXY
std::pair< bool, double > getMuEffXY() const
Definition: HertzMindlinViscoInteraction.h:135
CHertzMindlinViscoInteraction::getMaxFricStress
std::pair< bool, double > getMaxFricStress() const
Definition: HertzMindlinViscoInteraction.cpp:305
CHertzMindlinViscoInteraction::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzMindlinViscoInteraction.cpp:105
CHertzMindlinViscoInteraction::m_E_diss
double m_E_diss
dissipated energy
Definition: HertzMindlinViscoInteraction.h:97
console.h
Vec3::unit
VEC3_INLINE Vec3 unit() const
Definition: vec3.hpp:225
TML_PackedMessageInterface::pop_vec3
virtual Vec3 pop_vec3()=0
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
CHertzMindlinViscoInteraction::getAbsForceDeficit
double getAbsForceDeficit() const
Definition: HertzMindlinViscoInteraction.cpp:201
CHertzMindlinViscoIGP::m_nu
double m_nu
Definition: HertzMindlinViscoInteraction.h:49
APairInteraction::m_p1
CParticle * m_p1
Definition: Interaction.h:71
Interaction.h
CHertzMindlinViscoInteraction::getAbsFrictionalForce
std::pair< bool, double > getAbsFrictionalForce() const
Definition: HertzMindlinViscoInteraction.cpp:210
CHertzMindlinViscoIGP::CHertzMindlinViscoIGP
CHertzMindlinViscoIGP()
Definition: HertzMindlinViscoInteraction.cpp:19
CHertzMindlinViscoInteraction::getPos
virtual Vec3 getPos() const
Definition: HertzMindlinViscoInteraction.h:132
HertzMindlinViscoInteraction.h
CHertzMindlinViscoInteraction::m_is_slipping
bool m_is_slipping
static/dynamic status of the interaction
Definition: HertzMindlinViscoInteraction.h:95
CHertzMindlinViscoInteraction::m_force_deficit
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: HertzMindlinViscoInteraction.h:91
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
CHertzMindlinViscoIGP
Interaction group parameters for Hertz-Mindlin interactions.
Definition: HertzMindlinViscoInteraction.h:28
CHertzMindlinViscoInteraction::getSlipVelocity
std::pair< bool, double > getSlipVelocity() const
Definition: HertzMindlinViscoInteraction.cpp:380
CParticle::applyForce
void applyForce(const Vec3 &, const Vec3 &)
Definition: Particle.cpp:384
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CHertzMindlinViscoInteraction::m_normal_force
Vec3 m_normal_force
current normal force
Definition: HertzMindlinViscoInteraction.h:93
operator<<
ostream & operator<<(ostream &ost, const CHertzMindlinViscoInteraction &BI)
Definition: HertzMindlinViscoInteraction.cpp:715
NULL
#define NULL
Definition: t_list.h:17
CHertzMindlinViscoInteraction::getAbsMuFN
std::pair< bool, double > getAbsMuFN() const
Definition: HertzMindlinViscoInteraction.cpp:262
CHertzMindlinViscoInteraction::getNormalStress
std::pair< bool, double > getNormalStress() const
Definition: HertzMindlinViscoInteraction.cpp:356
CHertzMindlinViscoIGP::setTimeStepSize
void setTimeStepSize(double dt)
Definition: HertzMindlinViscoInteraction.cpp:56
CHertzMindlinViscoInteraction::ParameterType
CHertzMindlinViscoIGP ParameterType
Definition: HertzMindlinViscoInteraction.h:64
CHertzMindlinViscoInteraction::m_r0
double m_r0
equilibrium distance
Definition: HertzMindlinViscoInteraction.h:86
CHertzMindlinViscoInteraction::getForce
Vec3 getForce() const
Definition: HertzMindlinViscoInteraction.cpp:443
packed_message_interface.h
CHertzMindlinViscoInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: HertzMindlinViscoInteraction.cpp:404
CHertzMindlinViscoInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: HertzMindlinViscoInteraction.cpp:453
TML_PackedMessageInterface::append
virtual void append(int)=0
CHertzMindlinViscoInteraction::getMuEffXZ
std::pair< bool, double > getMuEffXZ() const
Definition: HertzMindlinViscoInteraction.h:139
CHertzMindlinViscoInteraction::operator<<
friend std::ostream & operator<<(std::ostream &, const CHertzMindlinViscoInteraction &)
CHertzMindlinViscoInteraction::m_E
double m_E
Young's modulus.
Definition: HertzMindlinViscoInteraction.h:84
CHertzMindlinViscoInteraction::ScalarFieldFunction
double(CHertzMindlinViscoInteraction::* ScalarFieldFunction)() const
Definition: HertzMindlinViscoInteraction.h:67
Vec3
Definition: vec3.h:47
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
CHertzMindlinViscoInteraction::isPersistent
virtual bool isPersistent()
Definition: HertzMindlinViscoInteraction.cpp:190
vec3.h
CHertzMindlinViscoInteraction::getAbsFrictionalStress
std::pair< bool, double > getAbsFrictionalStress() const
Definition: HertzMindlinViscoInteraction.cpp:236
CHertzMindlinViscoInteraction::getType
static string getType()
Definition: HertzMindlinViscoInteraction.h:109
CHertzMindlinViscoInteraction::Count
double Count() const
Definition: HertzMindlinViscoInteraction.cpp:462
CHertzMindlinViscoInteraction::calcForces
virtual void calcForces()
Definition: HertzMindlinViscoInteraction.cpp:113
CHertzMindlinViscoInteraction::m_cpos
Vec3 m_cpos
contact position
Definition: HertzMindlinViscoInteraction.h:92
CHertzMindlinViscoIGP::mu
double mu
Definition: HertzMindlinViscoInteraction.h:50
CHertzMindlinViscoInteraction::m_nu
double m_nu
Poisson ratio.
Definition: HertzMindlinViscoInteraction.h:85
CHertzMindlinViscoInteraction::~CHertzMindlinViscoInteraction
virtual ~CHertzMindlinViscoInteraction()
Definition: HertzMindlinViscoInteraction.cpp:101
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
CHertzMindlinViscoInteraction::VectorFieldFunction
Vec3(CHertzMindlinViscoInteraction::* VectorFieldFunction)() const
Definition: HertzMindlinViscoInteraction.h:74
CHertzMindlinViscoIGP::m_COR
double m_COR
Definition: HertzMindlinViscoInteraction.h:51
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
CHertzMindlinViscoInteraction::getSticking
double getSticking() const
Definition: HertzMindlinViscoInteraction.cpp:425
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
CHertzMindlinViscoInteraction::m_is_touching
bool m_is_touching
contact status of the interaction
Definition: HertzMindlinViscoInteraction.h:96
CHertzMindlinViscoIGP::getTypeString
virtual std::string getTypeString() const
Definition: HertzMindlinViscoInteraction.h:41
CHertzMindlinViscoInteraction::getDissipatedEnergy
double getDissipatedEnergy() const
Definition: HertzMindlinViscoInteraction.cpp:434
CHertzMindlinViscoInteraction
Frictional+ViscoElastic interaction between particles.
Definition: HertzMindlinViscoInteraction.h:62
CHertzMindlinViscoIGP::dt
double dt
Definition: HertzMindlinViscoInteraction.h:52
Particle.h