ESyS-Particle  2.3.4
GrainCollection.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 
14 #include <stdexcept>
15 #include <fstream>
16 #include <sstream>
17 #include <iomanip>
18 
19 #include <boost/limits.hpp>
20 
21 namespace esys
22 {
23  namespace lsm
24  {
25  template <typename TmplGrain>
27  : m_particlePoolPtr(new ParticlePool(4096)),
28  m_grainPoolPtr(new GrainPool(4096)),
29  m_grainVector()
30  {
31  }
32 
33  template <typename TmplGrain>
35  ParticlePoolPtr particlePoolPtr
36  )
37  : m_particlePoolPtr(particlePoolPtr),
38  m_grainPoolPtr(new GrainPool(4096)),
39  m_grainVector()
40  {
41  }
42 
43  template <typename TmplGrain>
45  ParticlePoolPtr particlePoolPtr,
46  GrainPoolPtr grainPoolPtr
47  )
48  : m_particlePoolPtr(particlePoolPtr),
49  m_grainPoolPtr(grainPoolPtr),
50  m_grainVector()
51  {
52  }
53 
54  template <typename TmplGrain>
57  {
58  return m_particlePoolPtr;
59  }
60 
61  template <typename TmplGrain>
64  {
65  return m_grainPoolPtr;
66  }
67 
68  template <typename TmplGrain>
70  {
71  }
72 
73  template <typename TmplGrain>
75  {
76  return m_grainVector.size();
77  }
78 
79  template <typename TmplGrain>
81  {
82  int i = 0;
83  for (
84  GrainConstIterator it = getGrainIterator();
85  it.hasNext();
86  i += it.next().getNumParticles()
87  )
88  {
89  }
90  return i;
91  }
92 
93  template <typename TmplGrain>
94  void
96  {
97  if (m_grainPoolPtr->is_from(&g))
98  {
99  m_grainVector.push_back(&g);
100  }
101  else
102  {
103  throw
104  std::runtime_error(
105  "GrainCollection<TmplGrain>::insertRef: Tried to insert"
106  " reference to non-created grain."
107  );
108  }
109  }
110 
111  template <typename TmplGrain>
114  {
115  Grain *pGrain = m_grainPoolPtr->construct(getParticlePoolPtr());
116  insertRef(*pGrain);
117  return *pGrain;
118  }
119 
120  template <typename TmplGrain>
123  {
124  Grain *pGrain = m_grainPoolPtr->construct(id, getParticlePoolPtr());
125  insertRef(*pGrain);
126  return *pGrain;
127  }
128 
129  template <typename TmplGrain>
132  {
133  Grain *pGrain = m_grainPoolPtr->construct(g);
134  insertRef(*pGrain);
135  return *pGrain;
136  }
137 
138  template <typename TmplGrain>
141  {
142  return GrainIterator(VectorIterator(m_grainVector));
143  }
144 
145  template <typename TmplGrain>
148  {
149  return GrainConstIterator(VectorConstIterator(m_grainVector));
150  }
151 
152  }
153 }
esys::lsm::GrainCollection::GrainConstIterator
Definition: GrainCollection.h:71
esys::lsm::ForwardConstIterator::hasNext
bool hasNext() const
Definition: StlIterator.h:100
esys::lsm::GrainCollection::GrainCollection
GrainCollection()
Definition: GrainCollection.hpp:26
esys::lsm::GrainCollection::Grain
TmplGrain Grain
Definition: GrainCollection.h:33
GrainCollection.h
esys::lsm::GrainCollection::~GrainCollection
virtual ~GrainCollection()
Definition: GrainCollection.hpp:69
esys
Definition: CheckPointable.cpp:17
esys::lsm::GrainCollection::ParticlePoolPtr
ParticleCollection::ParticlePoolPtr ParticlePoolPtr
Definition: GrainCollection.h:37
esys::lsm::Grain::Id
long Id
Definition: Grain.h:36
esys::lsm::GrainCollection::getNumGrains
int getNumGrains() const
Definition: GrainCollection.hpp:74
esys::lsm::GrainCollection::getGrainIterator
GrainIterator getGrainIterator()
Definition: GrainCollection.hpp:140
esys::lsm::GrainCollection::GrainIterator
Definition: GrainCollection.h:51
esys::lsm::GrainCollection::createGrain
Grain & createGrain()
Definition: GrainCollection.hpp:113
esys::lsm::GrainCollection::getParticlePoolPtr
ParticlePoolPtr getParticlePoolPtr()
Definition: GrainCollection.hpp:56
esys::lsm::ForwardIterator
Definition: StlIterator.h:30
esys::lsm::ForwardConstIterator
Definition: StlIterator.h:76
esys::lsm::GrainCollection::getNumParticles
int getNumParticles() const
Definition: GrainCollection.hpp:80
esys::lsm::GrainCollection::GrainPool
boost::object_pool< Grain > GrainPool
Definition: GrainCollection.h:40
esys::lsm::GrainCollection::GrainPoolPtr
boost::shared_ptr< GrainPool > GrainPoolPtr
Definition: GrainCollection.h:41
esys::lsm::GrainCollection::ParticlePool
ParticleCollection::ParticlePool ParticlePool
Definition: GrainCollection.h:36
esys::lsm::GrainCollection::insertRef
void insertRef(Grain &g)
Definition: GrainCollection.hpp:95
esys::lsm::GrainCollection::getGrainPoolPtr
GrainPoolPtr getGrainPoolPtr()
Definition: GrainCollection.hpp:63