ESyS-Particle  4.0.1
BodyForceGroup.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
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 
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  void packInto(CVarMPIBuffer *pBuffer) const;
41 
42  static BodyForceIGP extract(CVarMPIBuffer *pBuffer);
43 
44  virtual std::string getTypeString() const {return "BodyForce";}
45 
46  private:
47  Vec3 m_acceleration;
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 
71  template <class TmplParticle>
72  class BodyForceGroup : public AInteractionGroup<TmplParticle>
73  {
74  public:
76  typedef typename ParticleArray::ParticleListIterator ParticleIterator;
77 
78  BodyForceGroup(const BodyForceIGP &prms, ParticleArray &particleArray);
79 
80  ~BodyForceGroup();
81 
89  Vec3 getForce(double mass) const;
90 
97  void applyForce(TmplParticle &particle) const;
98 
99  virtual void Update(ParallelParticleArray<TmplParticle> *particleArray);
100 
104  virtual void setTimeStepSize(double dt)
105  {
106  }
107 
108  virtual void calcForces();
109 
110  private:
111  Vec3 m_acceleration;
112  ParticleArray *m_pParticleArray;
113  };
114  };
115 };
116 
117 #include "Model/BodyForceGroup.hpp"
118 
119 #endif