ESyS-Particle  2.3.4
SimpleParticle.hpp
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 
14 SimpleParticle::SimpleParticle(const Vec3& pos,double rad,int id, int tag)
15  : SimpleParticleData(pos, rad, id, tag)
16 {
17 }
18 
20  : SimpleParticleData(p)
21 {
22 }
23 
25 {
26  SimpleParticleData::operator=(p);
27  return *this;
28 }
29 
31 {
32  return getPosition();
33 }
34 
35 void SimpleParticle::setPos(const Vec3 &pos)
36 {
37  setPosition(pos);
38 }
39 
41 {
42  setPosition(v);
43 }
44 
46 {
48 }
49 
51 {
52  translateBy(v);
53 }
54 
55 void SimpleParticle::rotate(const Vec3 &rotation, const Vec3 &posn)
56 {
57  // From http://mathworld.wolfram.com/RotationFormula.html
58  const double phi = rotation.norm();
59  if (phi > 0.0)
60  {
61  const Vec3 r = getPosition() - posn;
62  const Vec3 n = rotation/phi;
63  const double cosPhi = cos(phi);
64  const Vec3 rotatedR =
65  r*cosPhi + n*((dot(n, r))*(1-cosPhi)) + cross(r, n)*sin(phi);
66  setPosition(rotatedR + posn);
67  }
68 }
69 
70 double SimpleParticle::getRad() const
71 {
72  return getRadius();
73 }
74 
75 void SimpleParticle::setRad(double r)
76 {
77  setRadius(r);
78 }
79 
81 {
82  return (getID() >= 0);
83 }
84 
85 template <typename TmplVisitor>
86 void SimpleParticle::visit(const TmplVisitor &visitor) const
87 {
88  visitor.visitSimpleParticle(*this);
89 }
90 
91 template <typename TmplVisitor>
92 void SimpleParticle::visit(TmplVisitor &visitor)
93 {
94  visitor.visitSimpleParticle(*this);
95 }
96 
97 ostream& operator<<(ostream& ost,const SimpleParticle& p)
98 {
99  ost
100  << "Particle- id " << p.getId()
101  << " pos: " << p.getPosition()
102  << " rad: " << p.getRadius()
103  << " tag : " << p.getTag() << std::endl;
104  return ost;
105 }
106 
107 ParticleComparer::ParticleComparer(const SimpleParticle &particle) : m_pParticle(&particle)
108 {
109 }
110 
116 {
117  return (((p1.getPos() - m_pParticle->getPos()).norm() - p1.getRad())<
118  ((p2.getPos() - m_pParticle->getPos()).norm() - p2.getRad()));
119 }
120 
126 {
127  return (*this)(*p1, *p2);
128 }
SimpleParticle::getRad
double getRad() const
Definition: SimpleParticle.hpp:70
SimpleParticle::translateBy
void translateBy(const Vec3 &v)
Definition: SimpleParticle.hpp:45
ParticleComparer::m_pParticle
const SimpleParticle * m_pParticle
Definition: SimpleParticle.h:65
esys::lsm::SimpleParticleData::getID
Id getID() const
Definition: SimpleParticleData.hpp:109
SimpleParticle::operator=
SimpleParticle & operator=(const SimpleParticle &p)
Definition: SimpleParticle.hpp:24
dot
VEC3_INLINE double dot(const Vec3 &v1, const Vec3 &v2)
Definition: vec3.hpp:196
SimpleParticle::getPos
const Vec3 & getPos() const
Definition: SimpleParticle.hpp:30
SimpleParticle::isValid
bool isValid() const
Definition: SimpleParticle.hpp:80
SimpleParticle::setPos
void setPos(const Vec3 &pos)
Definition: SimpleParticle.hpp:35
esys::lsm::SimpleParticleData::getId
Id getId() const
Definition: SimpleParticleData.hpp:94
SimpleParticle
Definition: SimpleParticle.h:25
operator<<
ostream & operator<<(ostream &ost, const SimpleParticle &p)
Definition: SimpleParticle.hpp:97
cross
VEC3_INLINE Vec3 cross(const Vec3 &lhs, const Vec3 &rhs)
Definition: vec3.hpp:187
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
esys::lsm::SimpleParticleData::setRadius
void setRadius(const double &r)
Definition: SimpleParticleData.hpp:139
ParticleComparer::operator()
bool operator()(const SimpleParticle &, const SimpleParticle &) const
Definition: SimpleParticle.hpp:115
ParticleComparer::ParticleComparer
ParticleComparer(const SimpleParticle &)
Definition: SimpleParticle.hpp:107
esys::lsm::SimpleParticleData::getPosition
const Vec3 & getPosition() const
Definition: SimpleParticleData.hpp:114
esys::lsm::SimpleParticleData::getRadius
double getRadius() const
Definition: SimpleParticleData.hpp:134
SimpleParticle::moveBy
void moveBy(const Vec3 &v)
Definition: SimpleParticle.hpp:50
SimpleParticle::rotate
void rotate(const Vec3 &rotation, const Vec3 &posn)
Definition: SimpleParticle.hpp:55
SimpleParticle::SimpleParticle
SimpleParticle(const Vec3 &posn, double radius, int id=0, int tag=0)
Definition: SimpleParticle.hpp:14
Vec3
Definition: vec3.h:47
SimpleParticle::moveTo
void moveTo(const Vec3 &v)
Definition: SimpleParticle.hpp:40
esys::lsm::SimpleParticleData::setPosition
void setPosition(const Vec3 &pos)
Definition: SimpleParticleData.hpp:119
SimpleParticle::visit
void visit(const TmplVisitor &visitor) const
Definition: SimpleParticle.hpp:86
esys::lsm::SimpleParticleData::getTag
Tag getTag() const
Definition: SimpleParticleData.hpp:124
SimpleParticle::setRad
void setRad(double r)
Definition: SimpleParticle.hpp:75