ESyS-Particle  2.3.4
FrictionInteraction.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 __FRICTIONINTERACTION_H
14 #define __FRICTIONINTERACTION_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 CFrictionIGP : public AIGParam
28 {
29 public:
30  CFrictionIGP();
31 
32  CFrictionIGP(const std::string &name, double normalK, double fricCoef, double shearK, double dT,bool scaling=true);
33 
34  virtual std::string getTypeString() const {return "Friction";}
35 
36  void setTimeStepSize(double dt);
37 
38  double k;
39  double mu;
40  double k_s;
41  double dt;
42  bool m_scaling;
43 };
44 
53 {
54  public: // types
56 
57  typedef double (CFrictionInteraction::* ScalarFieldFunction)() const;
58  typedef std::pair<bool,double> (CFrictionInteraction::* CheckedScalarFieldFunction)() const;
60 
61  static ScalarFieldFunction getScalarFieldFunction(const string&);
63  static VectorFieldFunction getVectorFieldFunction(const string&);
64 
65  protected:
66  double m_k;
67  double m_r0;
68  double m_mu;
69  double m_ks;
70  double m_dt;
77  double m_E_diss;
78  bool m_scaling;
79 
80  public:
84  virtual ~CFrictionInteraction();
85 
86  static string getType() {return "Friction";};
87 
88  virtual void calcForces();
89  virtual bool isPersistent();
90 
91  void setTimeStepSize(double dt);
92 
93  std::pair<bool,double> getAbsFrictionalForce() const;
94  std::pair<bool,double> getAbsFN() const;
95  std::pair<bool,double> getAbsMuFN() const;
96  std::pair<bool,double> getSlipVelocity() const;
97  std::pair<bool,double> getNormalStress() const;
98  std::pair<bool,double> getMaxFricStress() const;
99  std::pair<bool,double> getAbsFrictionalStress() const;
100 
101  double getAbsForceDeficit() const;
102  double getPotentialEnergy() const;
103  double getSlipping()const;
104  double getSticking()const;
105  double getDissipatedEnergy() const;
106  virtual double Count() const;
107  Vec3 getForce() const;
108  Vec3 getNormalForce() const;
109  virtual Vec3 getPos() const {return m_cpos;};
110 
111  std::pair<bool,double> getMuEff(const Vec3&,const Vec3&) const;
112  std::pair<bool,double> getMuEffXY() const {return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,1.0,0.0));};
113  std::pair<bool,double> getMuEffXZ() const {return getMuEff(Vec3(1.0,0.0,0.0),Vec3(0.0,0.0,1.0));};
114 
115  friend std::ostream& operator<<(std::ostream&,const CFrictionInteraction&);
117 
118  // save/load of restart parameters
119  virtual void saveRestartData(std::ostream &oStream);
120  virtual void loadRestartData(std::istream &iStream);
121 };
122 
123 #endif //__FRICTIONINTERACTION_H
CFrictionIGP::CFrictionIGP
CFrictionIGP()
Definition: FrictionInteraction.cpp:17
CFrictionInteraction::m_mu
double m_mu
coefficient of friction
Definition: FrictionInteraction.h:68
CFrictionInteraction::m_force_deficit
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: FrictionInteraction.h:72
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
CFrictionInteraction::m_k
double m_k
spring constant
Definition: FrictionInteraction.h:66
CFrictionInteraction::~CFrictionInteraction
virtual ~CFrictionInteraction()
Definition: FrictionInteraction.cpp:81
CFrictionInteraction::CheckedScalarFieldFunction
std::pair< bool, double >(CFrictionInteraction::* CheckedScalarFieldFunction)() const
Definition: FrictionInteraction.h:58
CFrictionInteraction
Frictional+Elastic interaction between particles.
Definition: FrictionInteraction.h:53
CFrictionInteraction::m_is_slipping
bool m_is_slipping
static/dynamic status of the interaction
Definition: FrictionInteraction.h:75
operator<<
ostream & operator<<(ostream &ost, const CFrictionInteraction &BI)
Definition: FrictionInteraction.cpp:668
CFrictionInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: FrictionInteraction.cpp:511
CFrictionInteraction::getMaxFricStress
std::pair< bool, double > getMaxFricStress() const
Definition: FrictionInteraction.cpp:251
CFrictionIGP
Interaction parameters for frictional interaction.
Definition: FrictionInteraction.h:28
CFrictionInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: FrictionInteraction.cpp:566
CFrictionInteraction::m_is_touching
bool m_is_touching
contact status of the interaction
Definition: FrictionInteraction.h:76
CFrictionInteraction::getDissipatedEnergy
double getDissipatedEnergy() const
Definition: FrictionInteraction.cpp:368
FrictionInteraction.h
CFrictionInteraction::getSticking
double getSticking() const
Definition: FrictionInteraction.cpp:359
console.h
CFrictionIGP::dt
double dt
Definition: FrictionInteraction.h:41
Vec3::unit
VEC3_INLINE Vec3 unit() const
Definition: vec3.hpp:225
TML_PackedMessageInterface::pop_vec3
virtual Vec3 pop_vec3()=0
CFrictionInteraction::getMuEff
std::pair< bool, double > getMuEff(const Vec3 &, const Vec3 &) const
Definition: FrictionInteraction.cpp:410
CFrictionInteraction::saveRestartData
virtual void saveRestartData(std::ostream &oStream)
Definition: FrictionInteraction.cpp:628
CFrictionInteraction::m_r0
double m_r0
equilibrium distance
Definition: FrictionInteraction.h:67
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
APairInteraction::m_p1
CParticle * m_p1
Definition: Interaction.h:71
CFrictionInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: FrictionInteraction.cpp:336
Interaction.h
CFrictionInteraction::getPos
virtual Vec3 getPos() const
Definition: FrictionInteraction.h:109
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
CFrictionInteraction::loadRestartData
virtual void loadRestartData(std::istream &iStream)
Definition: FrictionInteraction.cpp:651
CFrictionIGP::mu
double mu
Definition: FrictionInteraction.h:39
CFrictionInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: FrictionInteraction.cpp:469
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CFrictionInteraction::getAbsFN
std::pair< bool, double > getAbsFN() const
Definition: FrictionInteraction.cpp:279
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
CFrictionIGP::k
double k
Definition: FrictionInteraction.h:38
NULL
#define NULL
Definition: t_list.h:17
CFrictionInteraction::getNormalStress
std::pair< bool, double > getNormalStress() const
Definition: FrictionInteraction.cpp:287
CFrictionIGP::k_s
double k_s
Definition: FrictionInteraction.h:40
CFrictionInteraction::VectorFieldFunction
Vec3(CFrictionInteraction::* VectorFieldFunction)() const
Definition: FrictionInteraction.h:59
CFrictionInteraction::getForce
Vec3 getForce() const
Definition: FrictionInteraction.cpp:377
CFrictionInteraction::getAbsFrictionalForce
std::pair< bool, double > getAbsFrictionalForce() const
Definition: FrictionInteraction.cpp:173
packed_message_interface.h
TML_PackedMessageInterface::append
virtual void append(int)=0
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CFrictionIGP::setTimeStepSize
void setTimeStepSize(double dt)
Definition: FrictionInteraction.cpp:43
CFrictionInteraction::ScalarFieldFunction
double(CFrictionInteraction::* ScalarFieldFunction)() const
Definition: FrictionInteraction.h:57
Vec3
Definition: vec3.h:47
CParticle::getDo2dCalculations
static bool getDo2dCalculations()
Definition: Particle.h:181
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CFrictionInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: FrictionInteraction.cpp:386
CFrictionInteraction::getSlipVelocity
std::pair< bool, double > getSlipVelocity() const
Definition: FrictionInteraction.cpp:310
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
vec3.h
CFrictionInteraction::operator<<
friend std::ostream & operator<<(std::ostream &, const CFrictionInteraction &)
CFrictionInteraction::getMuEffXY
std::pair< bool, double > getMuEffXY() const
Definition: FrictionInteraction.h:112
CFrictionIGP::m_scaling
bool m_scaling
Definition: FrictionInteraction.h:42
CFrictionInteraction::Count
virtual double Count() const
Definition: FrictionInteraction.cpp:395
CFrictionInteraction::m_ks
double m_ks
shear stiffness (Cundall)
Definition: FrictionInteraction.h:69
CFrictionInteraction::getType
static string getType()
Definition: FrictionInteraction.h:86
CFrictionInteraction::m_dt
double m_dt
time step
Definition: FrictionInteraction.h:70
CFrictionInteraction::m_scaling
bool m_scaling
scaling k with particle radius
Definition: FrictionInteraction.h:78
CFrictionInteraction::getMuEffXZ
std::pair< bool, double > getMuEffXZ() const
Definition: FrictionInteraction.h:113
CFrictionInteraction::getAbsForceDeficit
double getAbsForceDeficit() const
Definition: FrictionInteraction.cpp:165
CFrictionInteraction::calcForces
virtual void calcForces()
Definition: FrictionInteraction.cpp:93
CFrictionIGP::getTypeString
virtual std::string getTypeString() const
Definition: FrictionInteraction.h:34
CFrictionInteraction::getSlipping
double getSlipping() const
Definition: FrictionInteraction.cpp:348
CFrictionInteraction::isPersistent
virtual bool isPersistent()
Definition: FrictionInteraction.cpp:154
CFrictionInteraction::ParameterType
CFrictionIGP ParameterType
Definition: FrictionInteraction.h:55
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
CFrictionInteraction::setTimeStepSize
void setTimeStepSize(double dt)
Definition: FrictionInteraction.cpp:85
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
CFrictionInteraction::m_cpos
Vec3 m_cpos
contact position
Definition: FrictionInteraction.h:73
CParticle
Class for a basic particle.
Definition: Particle.h:51
CFrictionInteraction::getAbsFrictionalStress
std::pair< bool, double > getAbsFrictionalStress() const
Definition: FrictionInteraction.cpp:198
IGParam.h
CFrictionInteraction::m_normal_force
Vec3 m_normal_force
current normal force
Definition: FrictionInteraction.h:74
CFrictionInteraction::m_Ffric
Vec3 m_Ffric
current frictional force
Definition: FrictionInteraction.h:71
CFrictionInteraction::getAbsMuFN
std::pair< bool, double > getAbsMuFN() const
Definition: FrictionInteraction.cpp:224
CFrictionInteraction::CFrictionInteraction
CFrictionInteraction()
Definition: FrictionInteraction.cpp:31
Particle.h
CFrictionInteraction::m_E_diss
double m_E_diss
dissipated energy
Definition: FrictionInteraction.h:77