1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/////////////////////////////////////////////////////////////
// //
// Copyright (c) 2003-2014 by The University of Queensland //
// Centre for Geoscience Computing //
// http://earth.uq.edu.au/centre-geoscience-computing //
// //
// Primary Business: Brisbane, Queensland, Australia //
// Licensed under the Open Software License version 3.0 //
// http://www.apache.org/licenses/LICENSE-2.0 //
// //
/////////////////////////////////////////////////////////////
#ifndef __ASPHEREBODYINTERACTIONGROUP_H
#define __ASPHEREBODYINTERACTIONGROUP_H
//--- project includes ---
#include "Model/SphereBody.h"
#include "Model/InteractionGroup.h"
//--- IO includes ---
#include <iostream>
//--- TML includes ---
#include "tml/comm/comm.h"
/*!
\brief Abstract Base class for a group of interactions between particles and a sphere body
*/
template<class T>
class ASphereBodyInteractionGroup : public AInteractionGroup<T>
{
protected:
CSphereBody* m_sphere; //!< the sphere body
TML_Comm* m_comm; //!< MPI communicator
int m_inner_count;
public:
ASphereBodyInteractionGroup(TML_Comm* comm)
:m_sphere(NULL),
m_comm(comm),
m_inner_count(0)
{
}
virtual ~ASphereBodyInteractionGroup()
{
}
/**
* Null op, current sphere body interactions don't require time step size.
*/
virtual void setTimeStepSize(double dt)
{
// do nothing, time step size not required in sphere body interactions.
}
virtual void calcForces()=0;
virtual void applyForce(const Vec3&){
std::cerr
<< "calling unimplemented function ASphereBodyInteractionGroup::applyForce"
<< std::endl;
}
virtual void setVelocity(const Vec3&){
std::cerr
<< "calling unimplemented function ASphereBodyInteractionGroup::setVelocity"
<< std::endl;
}
inline double getDisplacement(){return m_sphere->getDisplacement();};
inline void resetDisplacement(){m_sphere->resetDisplacement();};
inline void moveSphereBodyBy(const Vec3& mv){m_sphere->moveBy(mv);};
inline void zeroForce(){m_sphere->zeroForce();};
};
#endif // __ASPHEREBODYINTERACTIONGROUP_H
|