File: RotBondedInteraction.h

package info (click to toggle)
esys-particle 2.3.4%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 13,036 kB
  • ctags: 10,805
  • sloc: cpp: 80,009; python: 5,872; makefile: 1,243; sh: 313; perl: 225
file content (193 lines) | stat: -rw-r--r-- 5,207 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/////////////////////////////////////////////////////////////
//                                                         //
// Copyright (c) 2003-2014 by The University of Queensland //
// Centre for Geoscience Computing                         //
// http://earth.uq.edu.au/centre-geoscience-computing      //
//                                                         //
// Primary Business: Brisbane, Queensland, Australia       //
// Licensed under the Open Software License version 3.0    //
// http://www.apache.org/licenses/LICENSE-2.0          //
//                                                         //
/////////////////////////////////////////////////////////////

#ifndef __ROTBONDEDINTERACTION_H
#define __ROTBONDEDINTERACTION_H

// -- project includes --
#include "Model/RotPairInteraction.h"
#include "Model/RotParticle.h"
#include "Model/BondedInteractionCpData.h"
#include "Model/IGParam.h"
#include "Foundation/vec3.h"

// -- I/O includes --
#include <iostream>
using std::ostream;

/*!
  \struct CRotBondedIGP
  \brief Interaction parameters for bonded interaction between rotational particles
  \author Shane Latham, Steffen Abe
  $Revision$
  $Date$
*/

 double calc_angle( double , double ) ;

class CRotBondedIGP : public AIGParam
{
public:
  CRotBondedIGP();
  CRotBondedIGP(
    const  std::string &name,
    double kr,
    double ks,
    double kt,
    double kb,
    double max_nForce,
    double max_shForce,
    double max_tMoment,
    double max_bMoment,
    int    tag,
    bool   scaling,
    bool   AmeanR_scaling,
    double truncated,
    double beta1,
    double beta2
  );

  CRotBondedIGP(
    const  std::string &name,
    double youngsModulus,
    double poissonsRatio,
    double cohesion,
    double tanAngle,
    int    tag,
    bool   AmeanR_scaling,
    double truncated,
    double beta1,
    double beta2
  );

  virtual std::string getTypeString() const
  {
    return "RotBonded";
  }
  
  double kr,ks,kt,kb ;
  double max_nForce, max_shForce,max_tMoment, max_bMoment;
  int    tag;
  bool   scaling;
  bool   meanR_scaling;
  double truncated;
  double beta1;
  double beta2;
};

/*!
   \class CRotBondedInteraction
   \brief Elastic interaction between bonded particles between rotational particles
   \author Shane Latham, Steffen Abe
   $Revision$
   $Date$
*/
class CRotBondedInteraction : public ARotPairInteraction
{
 public: // types
  typedef CRotBondedIGP ParameterType;

  /**
   * Used by PIS to save/load check-point data for objects of this type.
   */
  typedef BondedInteractionCpData CheckPointable;

  typedef double (CRotBondedInteraction::* ScalarFieldFunction)() const; 
  typedef pair<bool,double> (CRotBondedInteraction::* CheckedScalarFieldFunction)() const;
  typedef Vec3 (CRotBondedInteraction::* VectorFieldFunction)() const; 

 private:

  //   protected:
  double m_dist;  //!< current distance, cached from last calcForces()
  double m_r0;  //!< equilibrium separation

  double m_kr ;     //!< spring constant
  double m_ks ;
  double m_kb ;
  double m_kt ;

  double m_max_nForce;   // always >0
  double m_max_shForce ;
  double m_max_tMoment ;
  double m_max_bMoment ;

  double m_nForce;  //  >0, pulling; <0 , compressing
  double m_shForce ; // always >0
  double m_tMoment ;
  double m_bMoment ;

  Vec3 m_force;   //!< current force, cached for E_pot calculation
  Vec3 m_moment ;

  Vec3 m_cpos; // ?
  Vec3 m_D; //!< initial positions of the particles
  int  m_tag;
  bool m_scaling;
  bool m_meanR_scaling;
  double m_truncated;
  double m_beta1;
  double m_beta2;

 public:

  CRotBondedInteraction();
  CRotBondedInteraction(CRotParticle*,CRotParticle*,const CRotBondedIGP&);
  virtual ~CRotBondedInteraction();
                                                                                
  static ScalarFieldFunction getScalarFieldFunction(const string&);
  static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string&);
  static VectorFieldFunction getVectorFieldFunction(const string&);

  static string getType(){return "RotBonded";};

  int getTag() const;
  void setTag(int tag);

  void calcForces();
  //void setBreak(double);
  bool broken();

  double getPotentialEnergy() const;
  double getNormalPotentialEnergy() const;
  double getShearPotentialEnergy() const;
  double getTwistPotentialEnergy() const;
  double getBendPotentialEnergy() const;
  double getCriterion() const;
  Vec3   getForce() const;
  Vec3   getNormalForce() const;
  Vec3   getTangentialForce() const;
  virtual Vec3 getPos() const {return m_cpos;};

  Vec3 getCentrePtDiff() const;
  Vec3 getInitialCentrePtDiff() const;
  Vec3 getInitialMidPoint() const;

  Vec3 getP2ShearForcePt() const;
  Vec3 getP1ShearForcePt() const;
  Vec3 getContactPoint() const;

  Vec3 getShearDiff() const;

  friend ostream& operator<<(ostream&,const CRotBondedInteraction&);
  friend class TML_PackedMessageInterface;
  
  virtual void saveCheckPointData(std::ostream &oStream);

  virtual void loadCheckPointData(std::istream &iStream);

  // save/load of restart parameters
  virtual void saveRestartData(std::ostream &oStream);
  virtual void loadRestartData(std::istream &iStream);
};

#endif //__BONDEDINTERACTION_H