21 template <
class TmplParticle>
26 : m_acceleration(prms.getAcceleration()),
27 m_pParticleArray(&particleArray)
31 template <
class TmplParticle>
36 template <
class TmplParticle>
41 template <
class TmplParticle>
44 return m_acceleration*mass;
47 template <
class TmplParticle>
50 particle.applyForce(getForce(particle.getMass()), particle.getPos());
53 template <
class TmplParticle>
67 template <
class TmplParticle>
72 : m_acceleration(prms.getAcceleration()),
73 m_pParticleArray(&particleArray) ,
74 m_fluidDensity(prms.getFluidDensity()),
75 m_fluidHeight(prms.getFluidHeight())
79 template <
class TmplParticle>
84 template <
class TmplParticle>
89 force = -1.0*m_acceleration*m_fluidDensity*volume;
94 template <
class TmplParticle>
97 double volume, radius, height;
100 radius = particle.getRad();
101 height = -1.0*particle.getPos() * m_acceleration.unit();
102 if(particle.getDo2dCalculations()){
103 if (m_fluidHeight >= height + radius) {
105 volume = M_PI*radius*radius;
107 else if (m_fluidHeight >= height - radius) {
109 if (m_fluidHeight < height) {
110 d = height - m_fluidHeight;
111 theta = 2.0 * acos (d / radius);
112 volume = 0.5*radius*radius*(theta - sin (theta));
115 d = m_fluidHeight - height;
116 theta = 2.0 * acos (d / radius);
117 volume = M_PI*radius*radius*(M_PI - 0.5*(theta - sin (theta)));
126 if (m_fluidHeight >= height + radius) {
128 volume = 4.0*M_PI*radius*radius*radius/3.0;
130 else if (m_fluidHeight >= height - radius) {
132 if (m_fluidHeight < height) {
133 d = radius - (height - m_fluidHeight);
134 volume = M_PI*d*d*(3.0*radius - d)/3.0;
137 d = radius - (m_fluidHeight - height);
138 volume = M_PI*(4.0*radius*radius*radius - d*d*(3.0*radius - d))/3.0;
146 particle.applyForce(getForce(volume), particle.getPos());
149 template <
class TmplParticle>
163 template <
class TmplParticle>
Vec3 getForce(double volume) const
Definition: BodyForceGroup.hpp:85
Definition: BodyForceGroup.h:26
BodyForceGroup(const BodyForceIGP &prms, ParticleArray &particleArray)
Definition: BodyForceGroup.hpp:22
Definition: BodyForceGroup.h:67
~BodyForceGroup()
Definition: BodyForceGroup.hpp:32
virtual void Update(ParallelParticleArray< TmplParticle > *particleArray)
Definition: BodyForceGroup.hpp:37
Definition: CheckPointable.cpp:16
void applyForce(TmplParticle &particle) const
Definition: BodyForceGroup.hpp:48
parrallel particle storage array with neighborsearch and variable exchange
Definition: SubLattice.h:61
BuoyancyForceGroup(const BuoyancyIGP &prms, ParticleArray &particleArray)
Definition: BodyForceGroup.hpp:68
virtual void Update(ParallelParticleArray< TmplParticle > *particleArray)
Definition: BodyForceGroup.hpp:164
virtual void calcForces()
Definition: BodyForceGroup.hpp:54
virtual void calcForces()
Definition: BodyForceGroup.hpp:150
void applyForce(TmplParticle &particle) const
Definition: BodyForceGroup.hpp:95
Vec3 getForce(double mass) const
Definition: BodyForceGroup.hpp:42
ParticleArray::ParticleListIterator ParticleIterator
Definition: BodyForceGroup.h:103
Template class for a handle/ref. counted pointer.
Definition: handle.h:26
~BuoyancyForceGroup()
Definition: BodyForceGroup.hpp:80
ParticleArray::ParticleListIterator ParticleIterator
Definition: BodyForceGroup.h:147