ESyS-Particle
4.0.1
|
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 }