ESyS-Particle  2.3.4
DistConnections.h
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 #ifndef ESYS_LSMDISTCONNECTIONS_H
15 #define ESYS_LSMDISTCONNECTIONS_H
16 
19 
20 #include <boost/shared_ptr.hpp>
21 #include <boost/pool/object_pool.hpp>
22 
23 #include <set>
24 #include <vector>
25 #include <float.h>
26 
27 namespace esys
28 {
29  namespace lsm
30  {
34  template <typename TmplParticle, typename TmplConnection>
36  {
37  public:
38  typedef TmplParticle Particle;
39  typedef TmplConnection Connection;
40  typedef int Tag;
41 
42  class Cmp
43  {
44  public:
45  bool operator()(const Connection &c1, const Connection &c2) const
46  {
47  return
48  (
49  (c1.first() < c2.first())
50  ||
51  (
52  (c1.first() == c2.first())
53  &&
54  (
55  (c1.second() < c2.second())
56  ||
57  (
58  (c1.second() == c2.second())
59  &&
60  (c1.getTag() < c2.getTag())
61  )
62  )
63  )
64  );
65  }
66  bool operator()(const Connection *c1, const Connection *c2) const
67  {
68  return (*this)(*c1, *c2);
69  }
70  };
71  public:
72  typedef std::set<Connection *,Cmp> ConnectionSet;
73  typedef std::vector<Particle *> ParticleVector;
77 
78  public:
79  typedef typename NTable::BoolVector BoolVector;
80 
82  double maxDist,
83  Tag defaultTag = 0,
84  const BoundingBox &bBox = BoundingBox(Vec3(-10,-10,-10), Vec3(10,10,10)),
85  const BoolVector &circDimensions = BoolVector(3, false)
86  );
87 
89 
90  int getNumParticles() const;
91 
92  int getNumConnections() const;
93 
94  double getMinRadius() const;
95 
96  double getMaxRadius() const;
97 
99 
101 
102  template<typename TmplParticleIterator>
103  void create(TmplParticleIterator it);
104 
105  template<typename TmplParticleIterator>
106  void create(TmplParticleIterator it, Tag tag);
107 
108  Tag getDefaultTag() const;
109  void setDefaultTag(Tag defaultTag);
110 
112 
114  {
115  public:
116  typedef const Connection& value_type;
117  typedef const Connection& reference;
120  {
121  }
122 
124  {
125  return *(ConnectionConstIterator::next());
126  }
127 
129  {
131  }
132  };
133  typedef ConstIterator Iterator;
134 
136  {
137  return Iterator(m_connectionSet);
138  }
139 
140  protected:
141  void insert(Particle &p);
142 
143  void createConnection(const Particle &p1, const Particle &p2, Tag tag);
144 
145  private:
146  typedef boost::shared_ptr<NTable> NTablePtr;
147  typedef boost::object_pool<Connection> ConnectionPool;
148  typedef boost::shared_ptr<ConnectionPool> ConnectionPoolPtr;
149 
153  double m_minRadius;
154  double m_maxRadius;
155  double m_maxDist;
159  };
160  }
161 }
162 
164 
165 #endif
esys::lsm::DistConnections::ParticleIterator
NTable::ParticleIterator ParticleIterator
Definition: DistConnections.h:75
BasicInteraction.h
esys::lsm::DistConnections::NTable
CircularNeighbourTable< Particle > NTable
Definition: DistConnections.h:74
esys::lsm::ForwardConstIterator::next
reference next()
Definition: StlIterator.h:112
esys::lsm::DistConnections::insert
void insert(Particle &p)
Definition: DistConnections.hpp:224
esys::lsm::DistConnections::m_minPt
Vec3 m_minPt
Definition: DistConnections.h:156
esys::lsm::DistConnections::ConstIterator::next
value_type next()
Definition: DistConnections.h:123
esys::lsm::DistConnections::m_connectionSet
ConnectionSet m_connectionSet
Definition: DistConnections.h:151
esys::lsm::DistConnections::ParticleConstIterator
NTable::ParticleConstIterator ParticleConstIterator
Definition: DistConnections.h:76
esys::lsm::DistConnections::getNumParticles
int getNumParticles() const
Definition: DistConnections.hpp:65
esys::lsm::DistConnections::Cmp::operator()
bool operator()(const Connection &c1, const Connection &c2) const
Definition: DistConnections.h:45
esys::lsm::DistConnections::m_minRadius
double m_minRadius
Definition: DistConnections.h:153
esys::lsm::DistConnections::m_maxDist
double m_maxDist
Definition: DistConnections.h:155
esys::lsm::DistConnections::ConstIterator::ConstIterator
ConstIterator(const ConnectionSet &set)
Definition: DistConnections.h:118
esys::lsm::DistConnections::Iterator
ConstIterator Iterator
Definition: DistConnections.h:133
esys::lsm::DistConnections::BoolVector
NTable::BoolVector BoolVector
Definition: DistConnections.h:79
esys::lsm::ForwardConstIterator::value_type
TmplIteratable::value_type value_type
Definition: StlIterator.h:78
esys::lsm::DistConnections::ConstIterator::current
value_type current() const
Definition: DistConnections.h:128
esys::lsm::BoundingBox
3D bounding box
Definition: BoundingBox.h:28
esys
Definition: CheckPointable.cpp:17
esys::lsm::DistConnections::Tag
int Tag
Definition: DistConnections.h:40
esys::lsm::DistConnections::Particle
TmplParticle Particle
Definition: DistConnections.h:38
esys::lsm::DistConnections::DistConnections
DistConnections(double maxDist, Tag defaultTag=0, const BoundingBox &bBox=BoundingBox(Vec3(-10,-10,-10), Vec3(10, 10, 10)), const BoolVector &circDimensions=BoolVector(3, false))
Definition: DistConnections.hpp:22
esys::lsm::DistConnections::getParticleBBox
BoundingBox getParticleBBox() const
Definition: DistConnections.hpp:269
CircularNeighbourTable.h
esys::lsm::DistConnections::createConnection
void createConnection(const Particle &p1, const Particle &p2, Tag tag)
Definition: DistConnections.hpp:97
esys::lsm::DistConnections
Definition: DistConnections.h:36
esys::lsm::DistConnections::ParticleVector
std::vector< Particle * > ParticleVector
Definition: DistConnections.h:73
esys::lsm::DistConnections::Connection
TmplConnection Connection
Definition: DistConnections.h:39
esys::lsm::DistConnections::ConnectionPool
boost::object_pool< Connection > ConnectionPool
Definition: DistConnections.h:147
esys::lsm::DistConnections::ConstIterator::reference
const Connection & reference
Definition: DistConnections.h:117
esys::lsm::DistConnections::setDefaultTag
void setDefaultTag(Tag defaultTag)
Definition: DistConnections.hpp:262
esys::lsm::DistConnections::getIterator
Iterator getIterator() const
Definition: DistConnections.h:135
esys::lsm::DistConnections::getDefaultTag
Tag getDefaultTag() const
Definition: DistConnections.hpp:255
esys::lsm::DistConnections::NTablePtr
boost::shared_ptr< NTable > NTablePtr
Definition: DistConnections.h:146
Vec3
Definition: vec3.h:47
esys::lsm::ForwardIterator
Definition: StlIterator.h:30
esys::lsm::DistConnections::getMinRadius
double getMinRadius() const
Definition: DistConnections.hpp:77
esys::lsm::ForwardConstIterator
Definition: StlIterator.h:76
esys::lsm::CircularNeighbourTable::BoolVector
std::vector< bool > BoolVector
Definition: CircularNeighbourTable.h:42
esys::lsm::DistConnections::m_maxPt
Vec3 m_maxPt
Definition: DistConnections.h:157
DistConnections.h
esys::lsm::DistConnections::ConstIterator::value_type
const Connection & value_type
Definition: DistConnections.h:116
esys::lsm::ForwardConstIterator::current
reference current() const
Definition: StlIterator.h:105
esys::lsm::DistConnections::getNumConnections
int getNumConnections() const
Definition: DistConnections.hpp:71
esys::lsm::DistConnections::ConnectionSet
std::set< Connection *, Cmp > ConnectionSet
Definition: DistConnections.h:72
esys::lsm::DistConnections::Cmp
Definition: DistConnections.h:43
esys::lsm::DistConnections::m_maxRadius
double m_maxRadius
Definition: DistConnections.h:154
DistConnections.hpp
esys::lsm::DistConnections::create
void create(TmplParticleIterator it)
Definition: DistConnections.hpp:215
esys::lsm::DistConnections::ConnectionPoolPtr
boost::shared_ptr< ConnectionPool > ConnectionPoolPtr
Definition: DistConnections.h:148
esys::lsm::DistConnections::ConstIterator
Definition: DistConnections.h:114
esys::lsm::DistConnections::~DistConnections
~DistConnections()
Definition: DistConnections.hpp:60
esys::lsm::DistConnections::m_nTablePtr
NTablePtr m_nTablePtr
Definition: DistConnections.h:152
esys::lsm::DistConnections::m_connectionPoolPtr
ConnectionPoolPtr m_connectionPoolPtr
Definition: DistConnections.h:150
esys::lsm::DistConnections::ConnectionConstIterator
ForwardConstIterator< ConnectionSet > ConnectionConstIterator
Definition: DistConnections.h:111
esys::lsm::DistConnections::Cmp::operator()
bool operator()(const Connection *c1, const Connection *c2) const
Definition: DistConnections.h:66
esys::lsm::DistConnections::getParticleIterator
ParticleConstIterator getParticleIterator() const
Definition: DistConnections.hpp:90
esys::lsm::DistConnections::getMaxRadius
double getMaxRadius() const
Definition: DistConnections.hpp:83
esys::lsm::CircularNeighbourTable
Definition: CircularNeighbourTable.h:34
esys::lsm::DistConnections::m_defaultTag
Tag m_defaultTag
Definition: DistConnections.h:158