ESyS-Particle  2.3
RotBondedInteraction.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 __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  );
56 
58  const std::string &name,
59  double youngsModulus,
60  double poissonsRatio,
61  double cohesion,
62  double tanAngle,
63  int tag,
64  bool AmeanR_scaling,
65  double truncated
66  );
67 
68  virtual std::string getTypeString() const
69  {
70  return "RotBonded";
71  }
72 
73  double kr,ks,kt,kb ;
75  int tag;
76  bool scaling;
78  double truncated;
79 };
80 
89 {
90  public: // types
92 
97 
98  typedef double (CRotBondedInteraction::* ScalarFieldFunction)() const;
99  typedef pair<bool,double> (CRotBondedInteraction::* CheckedScalarFieldFunction)() const;
101 
102  private:
103 
104  // protected:
105  double m_dist;
106  double m_r0;
107 
108  double m_kr ;
109  double m_ks ;
110  double m_kb ;
111  double m_kt ;
112 
113  double m_max_nForce; // always >0
114  double m_max_shForce ;
115  double m_max_tMoment ;
116  double m_max_bMoment ;
117 
118  double m_nForce; // >0, pulling; <0 , compressing
119  double m_shForce ; // always >0
120  double m_tMoment ;
121  double m_bMoment ;
122 
125 
126  Vec3 m_cpos; // ?
128  int m_tag;
129  bool m_scaling;
131  double m_truncated;
132 
133  public:
134 
137  virtual ~CRotBondedInteraction();
138 
139  static ScalarFieldFunction getScalarFieldFunction(const string&);
141  static VectorFieldFunction getVectorFieldFunction(const string&);
142 
143  static string getType(){return "RotBonded";};
144 
145  int getTag() const;
146  void setTag(int tag);
147 
148  void calcForces();
149  //void setBreak(double);
150  bool broken();
151 
152  double getPotentialEnergy() const;
153  double getNormalPotentialEnergy() const;
154  double getShearPotentialEnergy() const;
155  double getTwistPotentialEnergy() const;
156  double getBendPotentialEnergy() const;
157  double getCriterion() const;
158  Vec3 getForce() const;
159  Vec3 getNormalForce() const;
160  Vec3 getTangentialForce() const;
161  virtual Vec3 getPos() const {return m_cpos;};
162 
163  Vec3 getCentrePtDiff() const;
165  Vec3 getInitialMidPoint() const;
166 
167  Vec3 getP2ShearForcePt() const;
168  Vec3 getP1ShearForcePt() const;
169  Vec3 getContactPoint() const;
170 
171  Vec3 getShearDiff() const;
172 
173  friend ostream& operator<<(ostream&,const CRotBondedInteraction&);
175 
176  virtual void saveCheckPointData(std::ostream &oStream);
177 
178  virtual void loadCheckPointData(std::istream &iStream);
179 
180  // save/load of restart parameters
181  virtual void saveRestartData(std::ostream &oStream);
182  virtual void loadRestartData(std::istream &iStream);
183 };
184 
185 #endif //__BONDEDINTERACTION_H
Class for a rotational particle.
Definition: RotParticle.h:53
Vec3(CRotBondedInteraction::* VectorFieldFunction)() const
Definition: RotBondedInteraction.h:100
bool broken()
Definition: RotBondedInteraction.cpp:226
Abstract base class interactions between 2 rotational particles.
Definition: RotPairInteraction.h:28
Definition: BondedInteractionCpData.h:25
int m_tag
Definition: RotBondedInteraction.h:128
double(CRotBondedInteraction::* ScalarFieldFunction)() const
Definition: RotBondedInteraction.h:98
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:587
virtual void loadRestartData(std::istream &iStream)
Definition: RotBondedInteraction.cpp:721
void calcForces()
Definition: RotBondedInteraction.cpp:358
Definition: vec3.h:46
double max_nForce
Definition: RotBondedInteraction.h:74
double m_kr
spring constant
Definition: RotBondedInteraction.h:108
double ks
Definition: RotBondedInteraction.h:73
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:28
Vec3 getTangentialForce() const
Definition: RotBondedInteraction.cpp:546
int getTag() const
Definition: RotBondedInteraction.cpp:207
Vec3 m_D
initial positions of the particles
Definition: RotBondedInteraction.h:127
double kt
Definition: RotBondedInteraction.h:73
double getNormalPotentialEnergy() const
Definition: RotBondedInteraction.cpp:514
double m_max_tMoment
Definition: RotBondedInteraction.h:115
bool meanR_scaling
Definition: RotBondedInteraction.h:77
Vec3 getP2ShearForcePt() const
Definition: RotBondedInteraction.cpp:297
double m_kb
Definition: RotBondedInteraction.h:110
CRotBondedInteraction()
Definition: RotBondedInteraction.cpp:130
double m_bMoment
Definition: RotBondedInteraction.h:121
virtual std::string getTypeString() const
Definition: RotBondedInteraction.h:68
double m_kt
Definition: RotBondedInteraction.h:111
double m_ks
Definition: RotBondedInteraction.h:109
double max_bMoment
Definition: RotBondedInteraction.h:74
double max_tMoment
Definition: RotBondedInteraction.h:74
void setTag(int tag)
Definition: RotBondedInteraction.cpp:212
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:556
Elastic interaction between bonded particles between rotational particles.
Definition: RotBondedInteraction.h:88
double getCriterion() const
Definition: RotBondedInteraction.cpp:272
double kr
Definition: RotBondedInteraction.h:73
virtual void saveCheckPointData(std::ostream &oStream)
Definition: RotBondedInteraction.cpp:620
BondedInteractionCpData CheckPointable
Definition: RotBondedInteraction.h:96
double getShearPotentialEnergy() const
Definition: RotBondedInteraction.cpp:519
double m_max_nForce
Definition: RotBondedInteraction.h:113
CRotBondedIGP()
Definition: RotBondedInteraction.cpp:53
Vec3 m_force
current force, cached for E_pot calculation
Definition: RotBondedInteraction.h:123
Vec3 getContactPoint() const
Definition: RotBondedInteraction.cpp:316
double m_nForce
Definition: RotBondedInteraction.h:118
double m_r0
equilibrium separation
Definition: RotBondedInteraction.h:106
virtual void loadCheckPointData(std::istream &iStream)
Definition: RotBondedInteraction.cpp:625
Vec3 m_moment
Definition: RotBondedInteraction.h:124
bool scaling
Definition: RotBondedInteraction.h:76
double max_shForce
Definition: RotBondedInteraction.h:74
bool m_scaling
Definition: RotBondedInteraction.h:129
friend ostream & operator<<(ostream &, const CRotBondedInteraction &)
Definition: RotBondedInteraction.cpp:743
Interaction parameters for bonded interaction between rotational particles.
Definition: RotBondedInteraction.h:37
double m_shForce
Definition: RotBondedInteraction.h:119
double m_tMoment
Definition: RotBondedInteraction.h:120
Vec3 getNormalForce() const
Definition: RotBondedInteraction.cpp:539
Vec3 getShearDiff() const
Definition: RotBondedInteraction.cpp:307
virtual void saveRestartData(std::ostream &oStream)
Definition: RotBondedInteraction.cpp:696
bool m_meanR_scaling
Definition: RotBondedInteraction.h:130
double getBendPotentialEnergy() const
Definition: RotBondedInteraction.cpp:529
Vec3 m_cpos
Definition: RotBondedInteraction.h:126
int tag
Definition: RotBondedInteraction.h:75
virtual Vec3 getPos() const
Definition: RotBondedInteraction.h:161
Vec3 getInitialMidPoint() const
Definition: RotBondedInteraction.cpp:290
Vec3 getCentrePtDiff() const
Definition: RotBondedInteraction.cpp:285
double m_max_bMoment
Definition: RotBondedInteraction.h:116
Vec3 getP1ShearForcePt() const
Definition: RotBondedInteraction.cpp:302
virtual ~CRotBondedInteraction()
Definition: RotBondedInteraction.cpp:217
static string getType()
Definition: RotBondedInteraction.h:143
double getPotentialEnergy() const
Definition: RotBondedInteraction.cpp:503
double getTwistPotentialEnergy() const
Definition: RotBondedInteraction.cpp:524
double kb
Definition: RotBondedInteraction.h:73
Vec3 getForce() const
Definition: RotBondedInteraction.cpp:534
pair< bool, double >(CRotBondedInteraction::* CheckedScalarFieldFunction)() const
Definition: RotBondedInteraction.h:99
double calc_angle(double, double)
Definition: RotBondedInteraction.cpp:22
double m_truncated
Definition: RotBondedInteraction.h:131
CRotBondedIGP ParameterType
Definition: RotBondedInteraction.h:91
double truncated
Definition: RotBondedInteraction.h:78
static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string &)
Definition: RotBondedInteraction.cpp:610
double m_max_shForce
Definition: RotBondedInteraction.h:114
Vec3 getInitialCentrePtDiff() const
Definition: RotBondedInteraction.cpp:280
double m_dist
current distance, cached from last calcForces()
Definition: RotBondedInteraction.h:105
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:28