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>