ESyS-Particle  2.3.4
BodyForceGroup.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 
14 #ifndef ESYS_LSMBODYFORCEGROUP_H
15 #define ESYS_LSMBODYFORCEGROUP_H
16 
17 #include "Model/InteractionGroup.h"
18 #include "Foundation/vec3.h"
19 
20 template <class TmplParticle> class ParallelParticleArray;
21 
22 namespace esys
23 {
24  namespace lsm
25  {
26  class BodyForceIGP : public AIGParam
27  {
28  public:
29 
30  BodyForceIGP();
31 
32  BodyForceIGP(const std::string &name, const Vec3 &acceleration);
33 
34  virtual ~BodyForceIGP();
35 
36  const Vec3 &getAcceleration() const;
37 
38  const std::string &getName() const;
39 
40  virtual void packInto(CVarMPIBuffer *pBuffer) const;
41 
42  static BodyForceIGP extract(CVarMPIBuffer *pBuffer);
43 
44  virtual std::string getTypeString() const {return "BodyForce";}
45 
46  protected:
48  };
49 
50  class GravityIGP : public BodyForceIGP
51  {
52  public:
53 
55  {
56  }
57 
58  GravityIGP(const std::string &name, const Vec3 &acceleration) : BodyForceIGP(name, acceleration)
59  {
60  }
61 
62  virtual std::string getTypeString() const {return "Gravity";}
63 
64  private:
65  };
66 
67  class BuoyancyIGP : public AIGParam
68  {
69  public:
70 
72  {
73  }
74 
75  BuoyancyIGP(const std::string &name, const Vec3 &acceleration, const double &fluidDensity, const double &fluidHeight);
76 
77  virtual std::string getTypeString() const {return "Buoyancy";}
78 
79  virtual void packInto(CVarMPIBuffer *pBuffer) const;
80 
81  static BuoyancyIGP extract(CVarMPIBuffer *pBuffer);
82 
83  const double &getFluidDensity () const;
84 
85  const double &getFluidHeight () const;
86 
87  const Vec3 &getAcceleration() const;
88 
89  private:
92  };
93 
98  template <class TmplParticle>
99  class BodyForceGroup : public AInteractionGroup<TmplParticle>
100  {
101  public:
104 
105  BodyForceGroup(const BodyForceIGP &prms, ParticleArray &particleArray);
106 
107  ~BodyForceGroup();
108 
116  Vec3 getForce(double mass) const;
117 
124  void applyForce(TmplParticle &particle) const;
125 
126  virtual void Update(ParallelParticleArray<TmplParticle> *particleArray);
127 
131  virtual void setTimeStepSize(double dt)
132  {
133  }
134 
135  virtual void calcForces();
136 
137  private:
140  };
141 
142  template <class TmplParticle>
143  class BuoyancyForceGroup : public AInteractionGroup<TmplParticle>
144  {
145  public:
148 
149  BuoyancyForceGroup(const BuoyancyIGP &prms, ParticleArray &particleArray);
150 
152 
160  Vec3 getForce(double volume) const;
161 
168  void applyForce(TmplParticle &particle) const;
169 
170  virtual void Update(ParallelParticleArray<TmplParticle> *particleArray);
171 
175  virtual void setTimeStepSize(double dt)
176  {
177  }
178 
179  virtual void calcForces();
180 
181  private:
185  };
186  }
187 }
188 
189 #include "Model/BodyForceGroup.hpp"
190 
191 #endif
esys::lsm::BuoyancyForceGroup::BuoyancyForceGroup
BuoyancyForceGroup(const BuoyancyIGP &prms, ParticleArray &particleArray)
Definition: BodyForceGroup.hpp:68
esys::lsm::BodyForceIGP::getName
const std::string & getName() const
Definition: BodyForceGroup.cpp:39
esys::lsm::BuoyancyForceGroup::m_fluidHeight
double m_fluidHeight
Definition: BodyForceGroup.h:184
esys::lsm::BodyForceIGP::BodyForceIGP
BodyForceIGP()
Definition: BodyForceGroup.cpp:20
esys::lsm::BuoyancyIGP
Definition: BodyForceGroup.h:68
esys::lsm::BodyForceGroup::~BodyForceGroup
~BodyForceGroup()
Definition: BodyForceGroup.hpp:32
esys::lsm::GravityIGP::GravityIGP
GravityIGP(const std::string &name, const Vec3 &acceleration)
Definition: BodyForceGroup.h:58
CVarMPIBuffer
MPI send/recv buffer with automagically adjusted size.
Definition: mpivbuf.h:35
esys::lsm::BodyForceGroup::applyForce
void applyForce(TmplParticle &particle) const
Definition: BodyForceGroup.hpp:48
esys::lsm::BodyForceIGP
Definition: BodyForceGroup.h:27
esys::lsm::BodyForceGroup::m_acceleration
Vec3 m_acceleration
Definition: BodyForceGroup.h:138
esys::lsm::BodyForceIGP::m_acceleration
Vec3 m_acceleration
Definition: BodyForceGroup.h:47
esys::lsm::BodyForceIGP::extract
static BodyForceIGP extract(CVarMPIBuffer *pBuffer)
Definition: BodyForceGroup.cpp:52
esys::lsm::BuoyancyIGP::m_fluidDensity
double m_fluidDensity
Definition: BodyForceGroup.h:91
esys::lsm::BuoyancyIGP::packInto
virtual void packInto(CVarMPIBuffer *pBuffer) const
Definition: BodyForceGroup.cpp:82
esys::lsm::GravityIGP
Definition: BodyForceGroup.h:51
esys::lsm::BodyForceGroup::Update
virtual void Update(ParallelParticleArray< TmplParticle > *particleArray)
Definition: BodyForceGroup.hpp:37
esys::lsm::BuoyancyIGP::getFluidHeight
const double & getFluidHeight() const
Definition: BodyForceGroup.cpp:77
esys::lsm::BuoyancyForceGroup::m_fluidDensity
double m_fluidDensity
Definition: BodyForceGroup.h:184
esys::lsm::BuoyancyIGP::getTypeString
virtual std::string getTypeString() const
Definition: BodyForceGroup.h:77
esys::lsm::BuoyancyForceGroup::~BuoyancyForceGroup
~BuoyancyForceGroup()
Definition: BodyForceGroup.hpp:80
CVarMPIBuffer::append
virtual void append(int)
Definition: mpivbuf.cpp:152
esys::lsm::BuoyancyForceGroup::ParticleIterator
ParticleArray::ParticleListIterator ParticleIterator
Definition: BodyForceGroup.h:147
esys::lsm::BuoyancyIGP::BuoyancyIGP
BuoyancyIGP()
Definition: BodyForceGroup.h:71
esys::lsm::BodyForceGroup::ParticleArray
ParallelParticleArray< TmplParticle > ParticleArray
Definition: BodyForceGroup.h:102
esys::lsm::BodyForceGroup::getForce
Vec3 getForce(double mass) const
Definition: BodyForceGroup.hpp:42
esys::lsm::BodyForceIGP::packInto
virtual void packInto(CVarMPIBuffer *pBuffer) const
Definition: BodyForceGroup.cpp:44
AInteractionGroup
Abstract base class for a group of interactions.
Definition: InteractionGroup.h:35
Vec3::X
VEC3_INLINE double & X()
Definition: vec3.h:119
esys::lsm::BuoyancyForceGroup::applyForce
void applyForce(TmplParticle &particle) const
Definition: BodyForceGroup.hpp:95
ParallelParticleArray::ParticleListIterator
NeighborTable< T >::particlelist::iterator ParticleListIterator
Definition: pp_array.h:80
esys
Definition: CheckPointable.cpp:17
esys::lsm::GravityIGP::GravityIGP
GravityIGP()
Definition: BodyForceGroup.h:54
ParallelParticleArray
parrallel particle storage array with neighborsearch and variable exchange
Definition: pp_array.h:75
esys::lsm::BodyForceGroup::m_pParticleArray
ParticleArray * m_pParticleArray
Definition: BodyForceGroup.h:139
CVarMPIBuffer::pop_double
virtual double pop_double()
Definition: mpivbuf.cpp:210
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
esys::lsm::BodyForceIGP::~BodyForceIGP
virtual ~BodyForceIGP()
Definition: BodyForceGroup.cpp:30
esys::lsm::BodyForceGroup
Definition: BodyForceGroup.h:100
esys::lsm::BuoyancyForceGroup::m_pParticleArray
ParticleArray * m_pParticleArray
Definition: BodyForceGroup.h:183
esys::lsm::BodyForceGroup::setTimeStepSize
virtual void setTimeStepSize(double dt)
Definition: BodyForceGroup.h:131
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
esys::lsm::BuoyancyForceGroup::ParticleArray
ParallelParticleArray< TmplParticle > ParticleArray
Definition: BodyForceGroup.h:146
esys::lsm::BodyForceIGP::getTypeString
virtual std::string getTypeString() const
Definition: BodyForceGroup.h:44
esys::lsm::BuoyancyIGP::m_acceleration
Vec3 m_acceleration
Definition: BodyForceGroup.h:90
Vec3
Definition: vec3.h:47
esys::lsm::BuoyancyIGP::extract
static BuoyancyIGP extract(CVarMPIBuffer *pBuffer)
Definition: BodyForceGroup.cpp:92
AIGParam
Abstract base class for InteractionGroup parameters.
Definition: IGParam.h:29
esys::lsm::BuoyancyForceGroup::Update
virtual void Update(ParallelParticleArray< TmplParticle > *particleArray)
Definition: BodyForceGroup.hpp:164
esys::lsm::GravityIGP::getTypeString
virtual std::string getTypeString() const
Definition: BodyForceGroup.h:62
vec3.h
BodyForceGroup.hpp
esys::lsm::BuoyancyForceGroup::getForce
Vec3 getForce(double volume) const
Definition: BodyForceGroup.hpp:85
esys::lsm::BuoyancyForceGroup::calcForces
virtual void calcForces()
Definition: BodyForceGroup.hpp:150
esys::lsm::BuoyancyForceGroup::setTimeStepSize
virtual void setTimeStepSize(double dt)
Definition: BodyForceGroup.h:175
BodyForceGroup.h
esys::lsm::BuoyancyIGP::m_fluidHeight
double m_fluidHeight
Definition: BodyForceGroup.h:91
InteractionGroup.h
esys::lsm::BuoyancyForceGroup::m_acceleration
Vec3 m_acceleration
Definition: BodyForceGroup.h:182
esys::lsm::BuoyancyForceGroup
Definition: BodyForceGroup.h:144
esys::lsm::BodyForceGroup::BodyForceGroup
BodyForceGroup(const BodyForceIGP &prms, ParticleArray &particleArray)
Definition: BodyForceGroup.hpp:22
esys::lsm::BuoyancyIGP::getFluidDensity
const double & getFluidDensity() const
Definition: BodyForceGroup.cpp:72
AIGParam::getName
const std::string & getName() const
Definition: IGParam.h:42
esys::lsm::BodyForceIGP::getAcceleration
const Vec3 & getAcceleration() const
Definition: BodyForceGroup.cpp:34
esys::lsm::BuoyancyIGP::getAcceleration
const Vec3 & getAcceleration() const
Definition: BodyForceGroup.cpp:67
CVarMPIBuffer::pop_string
virtual std::string pop_string()
Definition: mpivbuf.cpp:233
esys::lsm::BodyForceGroup::calcForces
virtual void calcForces()
Definition: BodyForceGroup.hpp:54
esys::lsm::BodyForceGroup::ParticleIterator
ParticleArray::ParticleListIterator ParticleIterator
Definition: BodyForceGroup.h:103
AIGParam::Name
const std::string & Name() const
Definition: IGParam.h:44