ESyS-Particle  2.3.4
RotBondedInteraction.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 __ROTBONDEDINTERACTION_H
14 #define __ROTBONDEDINTERACTION_H
15 
16 // -- project includes --
18 #include "Model/RotParticle.h"
20 #include "Model/IGParam.h"
21 #include "Foundation/vec3.h"
22 
23 // -- I/O includes --
24 #include <iostream>
25 using std::ostream;
26 
35  double calc_angle( double , double ) ;
36 
37 class CRotBondedIGP : public AIGParam
38 {
39 public:
40  CRotBondedIGP();
42  const std::string &name,
43  double kr,
44  double ks,
45  double kt,
46  double kb,
47  double max_nForce,
48  double max_shForce,
49  double max_tMoment,
50  double max_bMoment,
51  int tag,
52  bool scaling,
53  bool AmeanR_scaling,
54  double truncated,
55  double beta1,
56  double beta2
57  );
58 
60  const std::string &name,
61  double youngsModulus,
62  double poissonsRatio,
63  double cohesion,
64  double tanAngle,
65  int tag,
66  bool AmeanR_scaling,
67  double truncated,
68  double beta1,
69  double beta2
70  );
71 
72  virtual std::string getTypeString() const
73  {
74  return "RotBonded";
75  }
76 
77  double kr,ks,kt,kb ;
79  int tag;
80  bool scaling;
82  double truncated;
83  double beta1;
84  double beta2;
85 };
86 
95 {
96  public: // types
98 
103 
104  typedef double (CRotBondedInteraction::* ScalarFieldFunction)() const;
105  typedef pair<bool,double> (CRotBondedInteraction::* CheckedScalarFieldFunction)() const;
107 
108  private:
109 
110  // protected:
111  double m_dist;
112  double m_r0;
113 
114  double m_kr ;
115  double m_ks ;
116  double m_kb ;
117  double m_kt ;
118 
119  double m_max_nForce; // always >0
120  double m_max_shForce ;
121  double m_max_tMoment ;
122  double m_max_bMoment ;
123 
124  double m_nForce; // >0, pulling; <0 , compressing
125  double m_shForce ; // always >0
126  double m_tMoment ;
127  double m_bMoment ;
128 
131 
132  Vec3 m_cpos; // ?
134  int m_tag;
135  bool m_scaling;
137  double m_truncated;
138  double m_beta1;
139  double m_beta2;
140 
141  public:
142 
145  virtual ~CRotBondedInteraction();
146 
147  static ScalarFieldFunction getScalarFieldFunction(const string&);
149  static VectorFieldFunction getVectorFieldFunction(const string&);
150 
151  static string getType(){return "RotBonded";};
152 
153  int getTag() const;
154  void setTag(int tag);
155 
156  void calcForces();
157  //void setBreak(double);
158  bool broken();
159 
160  double getPotentialEnergy() const;
161  double getNormalPotentialEnergy() const;
162  double getShearPotentialEnergy() const;
163  double getTwistPotentialEnergy() const;
164  double getBendPotentialEnergy() const;
165  double getCriterion() const;
166  Vec3 getForce() const;
167  Vec3 getNormalForce() const;
168  Vec3 getTangentialForce() const;
169  virtual Vec3 getPos() const {return m_cpos;};
170 
171  Vec3 getCentrePtDiff() const;
173  Vec3 getInitialMidPoint() const;
174 
175  Vec3 getP2ShearForcePt() const;
176  Vec3 getP1ShearForcePt() const;
177  Vec3 getContactPoint() const;
178 
179  Vec3 getShearDiff() const;
180 
181  friend ostream& operator<<(ostream&,const CRotBondedInteraction&);
183 
184  virtual void saveCheckPointData(std::ostream &oStream);
185 
186  virtual void loadCheckPointData(std::istream &iStream);
187 
188  // save/load of restart parameters
189  virtual void saveRestartData(std::ostream &oStream);
190  virtual void loadRestartData(std::istream &iStream);
191 };
192 
193 #endif //__BONDEDINTERACTION_H
RotPairInteraction.h
CRotBondedInteraction::ParameterType
CRotBondedIGP ParameterType
Definition: RotBondedInteraction.h:97
CRotBondedInteraction::m_max_bMoment
double m_max_bMoment
Definition: RotBondedInteraction.h:122
calc_angle
double calc_angle(double, double)
Definition: RotBondedInteraction.cpp:22
HALF_SQRT_2
const double HALF_SQRT_2
Definition: RotBondedInteraction.cpp:371
CRotBondedIGP::CRotBondedIGP
CRotBondedIGP()
Definition: RotBondedInteraction.cpp:53
TML_PackedMessageInterface
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:29
CRotBondedInteraction::setTag
void setTag(int tag)
Definition: RotBondedInteraction.cpp:226
CRotBondedInteraction::loadRestartData
virtual void loadRestartData(std::istream &iStream)
Definition: RotBondedInteraction.cpp:741
Quaternion::return_sca
QUATERNION_INLINE double return_sca() const
Definition: Quaternion.h:81
CRotBondedInteraction::getP1ShearForcePt
Vec3 getP1ShearForcePt() const
Definition: RotBondedInteraction.cpp:316
CRotBondedInteraction::getShearPotentialEnergy
double getShearPotentialEnergy() const
Definition: RotBondedInteraction.cpp:533
CRotBondedInteraction::m_kt
double m_kt
Definition: RotBondedInteraction.h:117
CRotBondedInteraction::m_ks
double m_ks
Definition: RotBondedInteraction.h:115
CRotBondedInteraction::saveRestartData
virtual void saveRestartData(std::ostream &oStream)
Definition: RotBondedInteraction.cpp:714
RotParticle.h
CRotBondedInteraction::m_meanR_scaling
bool m_meanR_scaling
Definition: RotBondedInteraction.h:136
CRotBondedInteraction::getTag
int getTag() const
Definition: RotBondedInteraction.cpp:221
CRotBondedInteraction::CRotBondedInteraction
CRotBondedInteraction()
Definition: RotBondedInteraction.cpp:140
CRotBondedInteraction::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:570
CRotBondedIGP::max_bMoment
double max_bMoment
Definition: RotBondedInteraction.h:78
CParticle::getInitPos
const Vec3 & getInitPos() const
Definition: Particle.h:109
AInteraction::Count
double Count() const
Definition: Interaction.h:56
CRotBondedInteraction::getBendPotentialEnergy
double getBendPotentialEnergy() const
Definition: RotBondedInteraction.cpp:543
dot
VEC3_INLINE double dot(const Vec3 &v1, const Vec3 &v2)
Definition: vec3.hpp:196
CRotBondedInteraction::m_truncated
double m_truncated
Definition: RotBondedInteraction.h:137
CRotBondedInteraction::m_beta2
double m_beta2
Definition: RotBondedInteraction.h:139
CRotBondedInteraction::getCheckedScalarFieldFunction
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:624
console.h
CRotBondedInteraction::m_kr
double m_kr
spring constant
Definition: RotBondedInteraction.h:114
RotBondedInteraction.h
CRotBondedInteraction
Elastic interaction between bonded particles between rotational particles.
Definition: RotBondedInteraction.h:95
TML_PackedMessageInterface::pop_vec3
virtual Vec3 pop_vec3()=0
CRotBondedInteraction::m_scaling
bool m_scaling
Definition: RotBondedInteraction.h:135
CRotParticle::getQuat
Quaternion getQuat() const
Definition: RotParticle.h:176
CRotBondedInteraction::getForce
Vec3 getForce() const
Definition: RotBondedInteraction.cpp:548
CRotBondedInteraction::m_dist
double m_dist
current distance, cached from last calcForces()
Definition: RotBondedInteraction.h:111
AInteraction::m_init
bool m_init
Definition: Interaction.h:41
CRotBondedInteraction::VectorFieldFunction
Vec3(CRotBondedInteraction::* VectorFieldFunction)() const
Definition: RotBondedInteraction.h:106
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
Matrix3::trans
MATRIX3_INLINE Matrix3 trans() const
return transposed
Definition: Matrix3.hpp:108
CRotBondedIGP::max_shForce
double max_shForce
Definition: RotBondedInteraction.h:78
CRotBondedIGP
Interaction parameters for bonded interaction between rotational particles.
Definition: RotBondedInteraction.h:38
CRotBondedInteraction::getNormalPotentialEnergy
double getNormalPotentialEnergy() const
Definition: RotBondedInteraction.cpp:528
CRotBondedIGP::max_nForce
double max_nForce
Definition: RotBondedInteraction.h:78
cross
VEC3_INLINE Vec3 cross(const Vec3 &lhs, const Vec3 &rhs)
Definition: vec3.hpp:187
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
operator<<
ostream & operator<<(ostream &ost, const CRotBondedInteraction &BI)
Definition: RotBondedInteraction.cpp:765
CRotBondedInteraction::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:601
CParticle::applyForce
void applyForce(const Vec3 &, const Vec3 &)
Definition: Particle.cpp:384
CParticle::setFlag
void setFlag(bool b=true)
Definition: Particle.h:140
Vec3::X
VEC3_INLINE double & X()
Definition: vec3.h:119
ARotPairInteraction::m_p2
CRotParticle * m_p2
Definition: RotPairInteraction.h:31
CRotBondedIGP::truncated
double truncated
Definition: RotBondedInteraction.h:82
CRotBondedIGP::kt
double kt
Definition: RotBondedInteraction.h:77
CRotBondedInteraction::broken
bool broken()
Definition: RotBondedInteraction.cpp:240
TML_PackedMessageInterface::pop_double
virtual double pop_double()=0
CRotBondedInteraction::~CRotBondedInteraction
virtual ~CRotBondedInteraction()
Definition: RotBondedInteraction.cpp:231
BondedInteractionCpData.h
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
calc_angle
double calc_angle(double s_in, double c_os)
Definition: RotBondedInteraction.cpp:22
NULL
#define NULL
Definition: t_list.h:17
CRotBondedInteraction::getNormalForce
Vec3 getNormalForce() const
Definition: RotBondedInteraction.cpp:553
CRotBondedIGP::getTypeString
virtual std::string getTypeString() const
Definition: RotBondedInteraction.h:72
ARotPairInteraction
Abstract base class interactions between 2 rotational particles.
Definition: RotPairInteraction.h:29
CRotBondedInteraction::getType
static string getType()
Definition: RotBondedInteraction.h:151
CRotBondedInteraction::getTwistPotentialEnergy
double getTwistPotentialEnergy() const
Definition: RotBondedInteraction.cpp:538
BondedInteractionCpData
Definition: BondedInteractionCpData.h:26
CRotBondedInteraction::m_D
Vec3 m_D
initial positions of the particles
Definition: RotBondedInteraction.h:133
CRotBondedInteraction::m_beta1
double m_beta1
Definition: RotBondedInteraction.h:138
CRotBondedInteraction::getP2ShearForcePt
Vec3 getP2ShearForcePt() const
Definition: RotBondedInteraction.cpp:311
Quaternion::to_matrix
QUATERNION_INLINE Matrix3 to_matrix() const
Definition: Quaternion.hpp:273
ARotPairInteraction::m_p1
CRotParticle * m_p1
Definition: RotPairInteraction.h:31
CRotBondedInteraction::getShearDiff
Vec3 getShearDiff() const
Definition: RotBondedInteraction.cpp:321
packed_message_interface.h
Quaternion::inverse
QUATERNION_INLINE Quaternion inverse() const
Definition: Quaternion.hpp:197
TML_PackedMessageInterface::append
virtual void append(int)=0
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CRotBondedIGP::meanR_scaling
bool meanR_scaling
Definition: RotBondedInteraction.h:81
CRotBondedInteraction::m_max_nForce
double m_max_nForce
Definition: RotBondedInteraction.h:119
CRotBondedInteraction::ScalarFieldFunction
double(CRotBondedInteraction::* ScalarFieldFunction)() const
Definition: RotBondedInteraction.h:104
CRotBondedInteraction::m_force
Vec3 m_force
current force, cached for E_pot calculation
Definition: RotBondedInteraction.h:129
CRotBondedInteraction::getPos
virtual Vec3 getPos() const
Definition: RotBondedInteraction.h:169
CRotBondedInteraction::m_cpos
Vec3 m_cpos
Definition: RotBondedInteraction.h:132
CRotBondedInteraction::getInitialMidPoint
Vec3 getInitialMidPoint() const
Definition: RotBondedInteraction.cpp:304
Quaternion
Definition: Quaternion.h:30
Vec3
Definition: vec3.h:47
CParticle::getDo2dCalculations
static bool getDo2dCalculations()
Definition: Particle.h:181
CRotBondedInteraction::calcForces
void calcForces()
Definition: RotBondedInteraction.cpp:372
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
CRotBondedInteraction::getTangentialForce
Vec3 getTangentialForce() const
Definition: RotBondedInteraction.cpp:560
CRotBondedIGP::ks
double ks
Definition: RotBondedInteraction.h:77
CRotBondedInteraction::getInitialCentrePtDiff
Vec3 getInitialCentrePtDiff() const
Definition: RotBondedInteraction.cpp:294
CRotBondedInteraction::m_tag
int m_tag
Definition: RotBondedInteraction.h:134
CRotBondedInteraction::m_shForce
double m_shForce
Definition: RotBondedInteraction.h:125
CRotBondedInteraction::m_r0
double m_r0
equilibrium separation
Definition: RotBondedInteraction.h:112
CRotBondedIGP::tag
int tag
Definition: RotBondedInteraction.h:79
CRotBondedInteraction::m_tMoment
double m_tMoment
Definition: RotBondedInteraction.h:126
CRotBondedInteraction::CheckPointable
BondedInteractionCpData CheckPointable
Definition: RotBondedInteraction.h:102
CRotBondedInteraction::loadCheckPointData
virtual void loadCheckPointData(std::istream &iStream)
Definition: RotBondedInteraction.cpp:639
CRotBondedInteraction::m_max_tMoment
double m_max_tMoment
Definition: RotBondedInteraction.h:121
CRotBondedIGP::kr
double kr
Definition: RotBondedInteraction.h:77
vec3.h
BondedInteractionCpData::saveCheckPointData
virtual void saveCheckPointData(std::ostream &oStream)
Definition: BondedInteractionCpData.cpp:85
Vec3::ZERO
static const Vec3 ZERO
Definition: vec3.h:52
Matrix3
3x3 Matrix
Definition: Matrix3.h:48
CRotBondedInteraction::getCriterion
double getCriterion() const
Definition: RotBondedInteraction.cpp:286
Vec3::norm2
VEC3_INLINE double norm2() const
Definition: vec3.hpp:218
CRotBondedInteraction::saveCheckPointData
virtual void saveCheckPointData(std::ostream &oStream)
Definition: RotBondedInteraction.cpp:634
CRotBondedInteraction::CheckedScalarFieldFunction
pair< bool, double >(CRotBondedInteraction::* CheckedScalarFieldFunction)() const
Definition: RotBondedInteraction.h:105
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CRotBondedInteraction::getPotentialEnergy
double getPotentialEnergy() const
Definition: RotBondedInteraction.cpp:517
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
Quaternion::return_vec
QUATERNION_INLINE Vec3 return_vec() const
Definition: Quaternion.h:80
CRotBondedInteraction::operator<<
friend ostream & operator<<(ostream &, const CRotBondedInteraction &)
Definition: RotBondedInteraction.cpp:765
CRotBondedInteraction::getContactPoint
Vec3 getContactPoint() const
Definition: RotBondedInteraction.cpp:330
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
CRotBondedIGP::scaling
bool scaling
Definition: RotBondedInteraction.h:80
CRotBondedIGP::max_tMoment
double max_tMoment
Definition: RotBondedInteraction.h:78
CRotBondedIGP::beta1
double beta1
Definition: RotBondedInteraction.h:83
AInteraction::m_id
vector< int > m_id
id's of the particles involved
Definition: Interaction.h:39
IGParam.h
CRotBondedIGP::kb
double kb
Definition: RotBondedInteraction.h:77
CRotParticle::applyMoment
void applyMoment(const Vec3 &)
Definition: RotParticle.cpp:327
CRotBondedIGP::beta2
double beta2
Definition: RotBondedInteraction.h:84
CRotBondedInteraction::m_kb
double m_kb
Definition: RotBondedInteraction.h:116
CRotBondedInteraction::m_max_shForce
double m_max_shForce
Definition: RotBondedInteraction.h:120
CRotBondedInteraction::m_moment
Vec3 m_moment
Definition: RotBondedInteraction.h:130
CRotBondedInteraction::m_bMoment
double m_bMoment
Definition: RotBondedInteraction.h:127
CRotParticle
Class for a rotational particle.
Definition: RotParticle.h:54
CRotBondedInteraction::getCentrePtDiff
Vec3 getCentrePtDiff() const
Definition: RotBondedInteraction.cpp:299
CRotBondedInteraction::m_nForce
double m_nForce
Definition: RotBondedInteraction.h:124