ESyS-Particle  4.0.1
BodyForceGroup.hpp
00001 
00002 //                                                         //
00003 // Copyright (c) 2003-2011 by The University of Queensland //
00004 // Earth Systems Science Computational Centre (ESSCC)      //
00005 // http://www.uq.edu.au/esscc                              //
00006 //                                                         //
00007 // Primary Business: Brisbane, Queensland, Australia       //
00008 // Licensed under the Open Software License version 3.0    //
00009 // http://www.opensource.org/licenses/osl-3.0.php          //
00010 //                                                         //
00012 
00013 
00014 #include "ppa/src/pp_array.h"
00015 
00016 namespace esys
00017 {
00018   namespace lsm
00019   {
00020     template <class TmplParticle>
00021     BodyForceGroup<TmplParticle>::BodyForceGroup(
00022       const BodyForceIGP &prms,
00023       ParticleArray &particleArray
00024     )
00025       : m_acceleration(prms.getAcceleration()),
00026         m_pParticleArray(&particleArray)
00027     {
00028     }
00029 
00030     template <class TmplParticle>
00031     BodyForceGroup<TmplParticle>::~BodyForceGroup()
00032     {
00033     }
00034 
00035     template <class TmplParticle>
00036     void BodyForceGroup<TmplParticle>::Update(ParallelParticleArray<TmplParticle> *particleArray)
00037     {
00038     }
00039 
00040     template <class TmplParticle>
00041     Vec3 BodyForceGroup<TmplParticle>::getForce(double mass) const
00042     {
00043       return m_acceleration*mass;
00044     }
00045 
00046     template <class TmplParticle>
00047     void BodyForceGroup<TmplParticle>::applyForce(TmplParticle &particle) const
00048     {
00049       particle.applyForce(getForce(particle.getMass()), particle.getPos());
00050     }
00051 
00052     template <class TmplParticle>
00053     void BodyForceGroup<TmplParticle>::calcForces()
00054     {
00055       typename ParticleArray::ParticleListHandle plh = m_pParticleArray->getAllParticles();
00056       for (
00057         ParticleIterator it = plh->begin();
00058         it != plh->end();
00059         it++
00060       )
00061       {
00062         applyForce(*(*it));
00063       }
00064     }
00065   }
00066 }