ESyS-Particle  2.3
RotFricInteraction.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 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.opensource.org/licenses/osl-3.0.php //
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
Class for a rotational particle.
Definition: RotParticle.h:53
Abstract base class interactions between 2 rotational particles.
Definition: RotPairInteraction.h:28
pair< bool, double >(CRotFrictionInteraction::* CheckedScalarFieldFunction)() const
Definition: RotFricInteraction.h:95
Vec3 getNormalForce() const
Definition: RotFricInteraction.cpp:430
Definition: vec3.h:46
friend ostream & operator<<(ostream &, const CRotFrictionInteraction &)
Definition: RotFricInteraction.cpp:639
double getAbsSlip() const
Definition: RotFricInteraction.cpp:456
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:28
Vec3 getForce() const
Definition: RotFricInteraction.cpp:421
double getSlipping() const
Definition: RotFricInteraction.cpp:394
double m_dt
time step
Definition: RotFricInteraction.h:110
Vec3 m_force_deficit
difference between fric. force & force necessary for slip
Definition: RotFricInteraction.h:112
double m_mu_s
coefficient of static friction
Definition: RotFricInteraction.h:108
double k_s
Definition: RotFricInteraction.h:75
double m_r0
equilibrium distance
Definition: RotFricInteraction.h:106
virtual bool isPersistent()
Definition: RotFricInteraction.cpp:343
Frictional+Elastic interaction between particles between rotational particles.
Definition: RotFricInteraction.h:89
Vec3 m_Ffric
current frictional force
Definition: RotFricInteraction.h:111
Interaction parameters for frictional interaction between rotational particles.
Definition: RotFricInteraction.h:37
double(CRotFrictionInteraction::* ScalarFieldFunction)() const
Definition: RotFricInteraction.h:94
void setTimeStepSize(double dt)
Definition: RotFricInteraction.cpp:81
bool m_is_touching
contact status of the interaction
Definition: RotFricInteraction.h:116
double m_k
spring constant
Definition: RotFricInteraction.h:105
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: RotFricInteraction.cpp:522
virtual void calcForces()
Definition: RotFricInteraction.cpp:158
Vec3 getTangentialForce() const
Definition: RotFricInteraction.cpp:436
double m_ks
shear stiffness (Cundall)
Definition: RotFricInteraction.h:109
double mu_s
Definition: RotFricInteraction.h:74
virtual std::string getTypeString() const
Definition: RotFricInteraction.h:65
double getAbsForceDeficit() const
Definition: RotFricInteraction.cpp:354
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: RotFricInteraction.cpp:510
bool meanR_scaling
Definition: RotFricInteraction.h:79
bool m_meanR_scaling
toggles whether to use the mean particle radius or minimum particle radius to define bond radius ...
Definition: RotFricInteraction.h:120
bool m_is_slipping
static/dynamic status of the interaction
Definition: RotFricInteraction.h:115
bool scaling
Definition: RotFricInteraction.h:77
double k
Definition: RotFricInteraction.h:72
double m_mu_d
coefficient of dynamic friction
Definition: RotFricInteraction.h:107
virtual ~CRotFrictionInteraction()
Definition: RotFricInteraction.cpp:153
double getDissipatedEnergy() const
Definition: RotFricInteraction.cpp:413
Vec3 m_normal_force
current normal force
Definition: RotFricInteraction.h:114
virtual double Count() const
Definition: RotFricInteraction.cpp:445
bool rigid
Definition: RotFricInteraction.h:78
static string getType()
Definition: RotFricInteraction.h:130
Vec3(CRotFrictionInteraction::* VectorFieldFunction)() const
Definition: RotFricInteraction.h:96
virtual void calcRigidBodyForces()
Definition: RotFricInteraction.cpp:235
Vec3 m_cpos
contact position
Definition: RotFricInteraction.h:113
double m_E_diss
dissipated energy
Definition: RotFricInteraction.h:117
virtual Vec3 getPos() const
Definition: RotFricInteraction.h:147
double mu_d
Definition: RotFricInteraction.h:73
bool m_rigid
toggles whether to use rigid body friction interactions
Definition: RotFricInteraction.h:119
CRotFrictionIGP ParameterType
Definition: RotFricInteraction.h:92
CRotFrictionIGP()
Definition: RotFricInteraction.cpp:21
void calcNormalForce()
Definition: RotFricInteraction.cpp:362
CRotFrictionInteraction()
Definition: RotFricInteraction.cpp:86
bool m_scaling
toggles scaling of elastic properties by particle size
Definition: RotFricInteraction.h:118
virtual void loadRestartData(std::istream &iStream)
Definition: RotFricInteraction.cpp:620
virtual void saveRestartData(std::ostream &oStream)
Definition: RotFricInteraction.cpp:595
double getSticking() const
Definition: RotFricInteraction.cpp:404
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: RotFricInteraction.cpp:484
virtual void calcSimpleForces()
Definition: RotFricInteraction.cpp:171
double dt
Definition: RotFricInteraction.h:76
void setTimeStepSize(double dt)
Definition: RotFricInteraction.cpp:148
double getPotentialEnergy() const
Definition: RotFricInteraction.cpp:382
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:28