ESyS-Particle  2.3.4
Particle.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 __PARTICLE_H
14 #define __PARTICLE_H
15 
16 // -- project includes --
17 #include "Foundation/Quaternion.h"
18 #include "Foundation/vec3.h"
19 #include "Foundation/Matrix3.h"
20 #include "Model/BasicParticle.h"
22 
23 //--- STL includes ---
24 #include <map>
25 #include <vector>
26 #include <utility>
27 #include <string>
28 #include <iostream>
29 
30 using std::map;
31 using std::vector;
32 using std::pair;
33 using std::string;
34 
35 template <class T> class ParallelParticleArray;
36 class AMPISGBufferRoot;
37 class AMPIBuffer;
38 
39 namespace esys
40 {
41  namespace lsm
42  {
43  class SimpleParticleData;
44  }
45 }
46 
51 {
52  public: // types
54  {
55  public:
57  : m_pos(),
58  m_initPos(),
59  m_oldPos(),
60  m_vel()
61  {
62  m_is_dynamic=true;
63  }
64 
65  exchangeType(const Vec3 &pos, const Vec3 &initPos, const Vec3 &oldPos, const Vec3 &vel,bool is_dyn)
66  : m_pos(pos),
67  m_initPos(initPos),
68  m_oldPos(oldPos),
69  m_vel(vel)
70  {
71  m_is_dynamic=is_dyn;
72  }
73 
79  };
80 
81  typedef double (CParticle::* ScalarFieldFunction)() const;
82  typedef Vec3 (CParticle::* VectorFieldFunction)() const;
83 
84  protected:
92 
93  bool flag;
94  bool m_is_dynamic;
95 
96  void setForce(const Vec3 &force) {m_force = force;}
97 
98  public:
99  CParticle();
100  CParticle(double,double,const Vec3&,const Vec3&,const Vec3&,int,bool);
101  CParticle(double,double,const Vec3&,const Vec3&,const Vec3&,const Vec3&,const Vec3&,int,bool); // including oldpos
102  CParticle(const esys::lsm::SimpleParticleData &particleData);
103  virtual ~CParticle(){};
104 
105 
106  static ScalarFieldFunction getScalarFieldFunction(const string&);
107  static VectorFieldFunction getVectorFieldFunction(const string&);
108 
109  inline const Vec3 &getInitPos() const {return m_initpos;}
110  inline void setInitPos(const Vec3 &initPos) {m_initpos = initPos;}
111  inline Vec3 getDisplacement() const {return (m_pos-m_oldpos);} ;
112  inline Vec3 getTotalDisplacement() const {return (m_pos-m_initpos);} ;
113  inline const Vec3 &getOldPos() const {return m_oldpos;};
114  inline Vec3 getVel() const {return m_vel;};
115  inline double getAbsVel() const {return m_vel.norm();};
116  inline void setVel(const Vec3 &V){m_vel=V;};
117  inline void setMass(double mass) {m_mass = mass; m_div_mass = 1.0/m_mass;}
118  inline double getMass() const {return m_mass;};
119  inline double getInvMass() const {return m_div_mass;};
120  inline Vec3 getForce() const {return m_force;};
121  virtual void setDensity(double); // needs to be virtual , different for rot. particle (mom. inert)
122 
124  double getIDField() const {return double(m_global_id);};
125  double getTagField() const {return double(getTag());};
126  void applyForce(const Vec3&,const Vec3&);
127  virtual void integrate(double);
128  virtual void integrateTherm(double){}
129  virtual void zeroForce();
130  virtual void zeroHeat() {}
131  virtual void thermExpansion() {}
132  inline void moveToRel(const Vec3 &v){m_pos=m_initpos+v;};
133  inline double getKineticEnergy() const {return 0.5*m_mass*m_vel*m_vel;};
134 
135  // switching on/off dynamic behaviour
136  virtual void setNonDynamic() {m_is_dynamic=false;};
137  virtual void setNonDynamicLinear() {m_is_dynamic=false;};
138  virtual void setNonDynamicRot(){}; // do nothing
139 
140  void setFlag(bool b=true){flag=b;};
141  bool isFlagged() const {return flag;};
142  void writeAsDXLine(ostream&,int slid=0);
143 
144  friend ostream& operator<<(ostream&, const CParticle&);
145  void print(){cout << *this << endl << flush;};
146 
147  void rescale() {};
148  exchangeType getExchangeValues();
149  void setExchangeValues(const exchangeType&);
150 
151  // circular
152  void setCircular(const Vec3&);
153 
154  // stress
155  double sigma_xx_2D() const {return m_sigma(0,0)/(M_PI*m_rad*m_rad);};
156  double sigma_xy_2D() const {return m_sigma(0,1)/(M_PI*m_rad*m_rad);};
157  double sigma_yy_2D() const {return m_sigma(1,1)/(M_PI*m_rad*m_rad);};
158  double sigma_d() const;
159 
161 
162  virtual void saveCheckPointData(std::ostream& oStream);
163  virtual void saveSnapShotData(std::ostream& oStream);
164 
165  //virtual Quaternion getQuat(){return Quaternion(1.0,Vec3(0.0,0.0,0.0));};
166  virtual void applyMoment(const Vec3&){};
167 
168  static void get_type() {cout <<" CParticle" ;};
169 
170  virtual void loadCheckPointData(std::istream &iStream);
171 
172  template <typename TmplVisitor>
173  void visit(TmplVisitor &visitor)
174  {
175  visitor.visitParticle(*this);
176  }
177 
178 public:
179  // Ensure that particles only move in the x-y plane 2D computations
180  inline static void setDo2dCalculations(bool do2dCalculations) {s_do2Calculations = do2dCalculations;}
181  inline static bool getDo2dCalculations() {return s_do2Calculations;}
182 
183 private:
184  static bool s_do2Calculations;
185 
186 
187 };
188 
189 /* CParticle extractCParticleFrom(AMPIBuffer*); */
190 /* CParticle extractCParticleFrom(AMPISGBufferRoot*,int); */
191 
192 #endif //__PARTICLE_H
193 
CParticle::sigma_yy_2D
double sigma_yy_2D() const
Definition: Particle.h:157
CParticle::setNonDynamicRot
virtual void setNonDynamicRot()
Definition: Particle.h:138
CParticle::setDo2dCalculations
static void setDo2dCalculations(bool do2dCalculations)
Definition: Particle.h:180
CBasicParticle::m_pos
Vec3 m_pos
position
Definition: BasicParticle.h:47
TML_PackedMessageInterface
Abstract base/interface class for packed messages to be used in TML_Pack.
Definition: packed_message_interface.h:29
CParticle::exchangeType
Definition: Particle.h:54
CParticle::getTotalDisplacement
Vec3 getTotalDisplacement() const
Definition: Particle.h:112
CParticle::sigma_xy_2D
double sigma_xy_2D() const
Definition: Particle.h:156
CParticle::get_type
static void get_type()
Definition: Particle.h:168
CParticle::applyMoment
virtual void applyMoment(const Vec3 &)
Definition: Particle.h:166
CParticle::getKineticEnergy
double getKineticEnergy() const
move relative to initial position
Definition: Particle.h:133
CParticle::getMass
double getMass() const
Definition: Particle.h:118
operator<<
ostream & operator<<(ostream &ost, const CParticle &CP)
Definition: Particle.cpp:407
CParticle::setCircular
void setCircular(const Vec3 &)
Definition: Particle.cpp:329
CBasicParticle::m_rad
double m_rad
radius
Definition: BasicParticle.h:48
CParticle::thermExpansion
virtual void thermExpansion()
Definition: Particle.h:131
CParticle::getInitPos
const Vec3 & getInitPos() const
Definition: Particle.h:109
CBasicParticle::m_global_id
int m_global_id
Definition: BasicParticle.h:49
CParticle::moveToRel
void moveToRel(const Vec3 &v)
Definition: Particle.h:132
CParticle::s_do2Calculations
static bool s_do2Calculations
Definition: Particle.h:184
CParticle::VectorFieldFunction
Vec3(CParticle::* VectorFieldFunction)() const
Definition: Particle.h:82
console.h
CParticle::setNonDynamic
virtual void setNonDynamic()
Definition: Particle.h:136
Matrix3.h
CParticle::exchangeType::m_pos
Vec3 m_pos
Definition: Particle.h:74
AMPIBuffer
Abstract base class for MPI send/recv buffer.
Definition: mpibuf.h:34
TML_PackedMessageInterface::pop_int
virtual int pop_int()=0
CParticle::exchangeType::m_oldPos
Vec3 m_oldPos
Definition: Particle.h:76
CParticle::getIDField
double getIDField() const
Definition: Particle.h:124
CParticle::setInitPos
void setInitPos(const Vec3 &initPos)
Definition: Particle.h:110
CParticle::exchangeType::m_vel
Vec3 m_vel
Definition: Particle.h:77
CParticle::setMass
void setMass(double mass)
Definition: Particle.h:117
CParticle::resetDisplacement
void resetDisplacement()
Definition: Particle.h:123
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
CParticle::zeroHeat
virtual void zeroHeat()
Definition: Particle.h:130
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
esys::lsm::SimpleParticleData
Definition: SimpleParticleData.h:28
CParticle::setDensity
virtual void setDensity(double)
Definition: Particle.cpp:105
esys
Definition: CheckPointable.cpp:17
CParticle::exchangeType::exchangeType
exchangeType(const Vec3 &pos, const Vec3 &initPos, const Vec3 &oldPos, const Vec3 &vel, bool is_dyn)
Definition: Particle.h:65
CParticle::m_div_mass
double m_div_mass
Definition: Particle.h:91
ParallelParticleArray
parrallel particle storage array with neighborsearch and variable exchange
Definition: pp_array.h:75
CParticle::rescale
void rescale()
Definition: Particle.h:147
Matrix3::trace
MATRIX3_INLINE double trace() const
Definition: Matrix3.hpp:261
CBasicParticle::setTag
void setTag(int t)
particle tag handling
Definition: BasicParticle.h:73
BasicParticle.h
CParticle::CParticle
CParticle()
Definition: Particle.cpp:26
Matrix3::Unit
static MATRIX3_INLINE Matrix3 Unit()
eigenvectors, eigenvalues
Definition: Matrix3.hpp:297
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
CParticle::writeAsDXLine
void writeAsDXLine(ostream &, int slid=0)
Definition: Particle.cpp:284
CBasicParticle::getTag
int getTag() const
Definition: BasicParticle.h:74
CParticle::ScalarFieldFunction
double(CParticle::* ScalarFieldFunction)() const
Definition: Particle.h:81
NULL
#define NULL
Definition: t_list.h:17
CParticle::getDisplacement
Vec3 getDisplacement() const
Definition: Particle.h:111
mpibuf.h
CParticle::integrateTherm
virtual void integrateTherm(double)
Definition: Particle.h:128
CParticle::isFlagged
bool isFlagged() const
Definition: Particle.h:141
Quaternion.h
CParticle::loadCheckPointData
virtual void loadCheckPointData(std::istream &iStream)
Definition: Particle.cpp:457
CParticle::setExchangeValues
void setExchangeValues(const exchangeType &)
Definition: Particle.cpp:315
CParticle::flag
bool flag
Definition: Particle.h:93
CParticle::m_force
Vec3 m_force
Definition: Particle.h:87
packed_message_interface.h
TML_PackedMessageInterface::pop_doubles
virtual void pop_doubles(double *, int)=0
CParticle::m_vel
Vec3 m_vel
Definition: Particle.h:87
TML_PackedMessageInterface::append
virtual void append(int)=0
CBasicParticle::m_tag
int m_tag
Definition: BasicParticle.h:50
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CParticle::~CParticle
virtual ~CParticle()
Definition: Particle.h:103
CParticle::zeroForce
virtual void zeroForce()
Definition: Particle.cpp:272
CParticle::getInvMass
double getInvMass() const
Definition: Particle.h:119
CParticle::getScalarFieldFunction
static ScalarFieldFunction getScalarFieldFunction(const string &)
Definition: Particle.cpp:126
CParticle::getExchangeValues
exchangeType getExchangeValues()
Definition: Particle.cpp:298
CParticle::exchangeType::m_initPos
Vec3 m_initPos
Definition: Particle.h:75
CParticle::setForce
void setForce(const Vec3 &force)
Definition: Particle.h:96
Vec3
Definition: vec3.h:47
CParticle::getDo2dCalculations
static bool getDo2dCalculations()
Definition: Particle.h:181
CParticle::m_mass
double m_mass
Definition: Particle.h:91
TML_PackedMessageInterface::pop_bool
virtual bool pop_bool()=0
CParticle::operator<<
friend ostream & operator<<(ostream &, const CParticle &)
Definition: Particle.cpp:407
CParticle::getVel
Vec3 getVel() const
Definition: Particle.h:114
zeroVec3
const Vec3 zeroVec3(0.0, 0.0, 0.0)
CParticle::getOldPos
const Vec3 & getOldPos() const
Definition: Particle.h:113
CParticle::saveCheckPointData
virtual void saveCheckPointData(std::ostream &oStream)
Definition: Particle.cpp:438
CParticle::getForce
Vec3 getForce() const
Definition: Particle.h:120
vec3.h
mpisgbuf.h
Matrix3
3x3 Matrix
Definition: Matrix3.h:48
CParticle::exchangeType::exchangeType
exchangeType()
Definition: Particle.h:56
CParticle::getTagField
double getTagField() const
Definition: Particle.h:125
CParticle::m_sigma
Matrix3 m_sigma
stress tensor.
Definition: Particle.h:86
CParticle::getAbsVel
double getAbsVel() const
Definition: Particle.h:115
CParticle::sigma_d
double sigma_d() const
Definition: Particle.cpp:398
CheckPointable.h
CParticle::sigma_xx_2D
double sigma_xx_2D() const
Definition: Particle.h:155
CParticle::getVectorFieldFunction
static VectorFieldFunction getVectorFieldFunction(const string &)
Definition: Particle.cpp:161
CParticle::saveSnapShotData
virtual void saveSnapShotData(std::ostream &oStream)
Definition: Particle.cpp:420
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CParticle::m_is_dynamic
bool m_is_dynamic
Definition: Particle.h:94
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
esys::lsm::CheckPointable
Definition: CheckPointable.h:27
CParticle::m_initpos
Vec3 m_initpos
position at time of construction
Definition: Particle.h:89
CParticle::m_oldpos
Vec3 m_oldpos
position at the time of last neighbor search
Definition: Particle.h:88
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
SimpleParticleData.h
CParticle::visit
void visit(TmplVisitor &visitor)
Definition: Particle.h:173
CParticle::print
void print()
Definition: Particle.h:145
CParticle
Class for a basic particle.
Definition: Particle.h:51
CBasicParticle
Basic Particle class. Contains only the "geometric part" of the particle, i.e. position and radius,...
Definition: BasicParticle.h:45
CParticle::setVel
void setVel(const Vec3 &V)
Definition: Particle.h:116
CParticle::setNonDynamicLinear
virtual void setNonDynamicLinear()
Definition: Particle.h:137
CParticle::integrate
virtual void integrate(double)
Definition: Particle.cpp:250
CParticle::exchangeType::m_is_dynamic
bool m_is_dynamic
Definition: Particle.h:78
Particle.h
CParticle::m_circular_shift
Vec3 m_circular_shift
shift vector if particle is circular image
Definition: Particle.h:90
AMPISGBufferRoot
Abstract base class for scatter/gather buffer, root component.
Definition: mpisgbuf.h:29