ESyS-Particle  4.0.1
GrainRandomBoxPacker.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 
14 #ifndef ESYS_LSMGRAINRANDOMBOXPACKER_H
15 #define ESYS_LSMGRAINRANDOMBOXPACKER_H
16 
17 #include "Geometry/RandomBoxPacker.h"
18 #include "Geometry/GrainCollection.h"
19 
20 #include <vector>
21 #include <boost/shared_ptr.hpp>
22 
23 namespace esys
24 {
25  namespace lsm
26  {
30  template <typename TmplParticleGrainGen, typename TmplGrainCollection, template <typename TPartGrainGen> class TmplRndBoxPackerWrap>
31  class GrainRandomBoxPacker : public TmplRndBoxPackerWrap<TmplParticleGrainGen>::RandomBoxPackerBase
32  {
33  public:
34  typedef TmplGrainCollection GrainCollection;
35  typedef boost::shared_ptr<GrainCollection> GrainCollectionPtr;
38  typedef typename GrainCollection::Grain Grain;
39  typedef typename Grain::Id GrainId;
40  typedef typename GrainCollection::GrainPool GrainPool;
41  typedef typename GrainCollection::GrainPoolPtr GrainPoolPtr;
42  typedef
43  typename TmplRndBoxPackerWrap<TmplParticleGrainGen>::RandomBoxPackerBase
44  Inherited;
45  typedef Inherited RandomBoxPackerBase;
46  typedef typename Inherited::ParticleGenerator ParticleGrainGen;
47  typedef typename Inherited::ParticleGeneratorPtr ParticleGrainGenPtr;
48  typedef typename Inherited::Particle Particle;
49  typedef typename Inherited::NTable NTable;
50  typedef typename Inherited::NTablePtr NTablePtr;
51  typedef typename Inherited::ParticleVector ParticleVector;
52  typedef typename Inherited::ParticlePool ParticlePool;
53  typedef typename Inherited::ParticlePoolPtr ParticlePoolPtr;
54  typedef typename Inherited::PlaneVector PlaneVector;
55  typedef typename Inherited::StuffedParticleIterator StuffedParticleIterator;
56 
58  ParticleGrainGenPtr particleGrainGenPtr,
59  ParticlePoolPtr particlePoolPtr,
60  NTablePtr nTablePtr,
61  const BoundingBox &bBox,
62  const BoolVector &periodicDimensions,
63  double tolerance,
64  double cubicPackRadius,
65  int maxInsertionFailures
66  );
67 
69  ParticleGrainGenPtr particleGrainGenPtr,
70  ParticlePoolPtr particlePoolPtr,
71  NTablePtr nTablePtr,
72  const BoundingBox &bBox,
73  const BoolVector &periodicDimensions,
74  double tolerance,
75  double cubicPackRadius,
76  int maxInsertionFailures,
77  const PlaneVector &fitPlaneVector,
78  GrainPoolPtr grainPoolPtr
79  );
80 
81  virtual ~GrainRandomBoxPacker();
82 
83  ParticleGrainGen &getParticleGrainGen();
84 
85  const ParticleGrainGen &getParticleGrainGen() const;
86 
87  void setParticleGrainGen(ParticleGrainGen &particleGrainGen);
88 
89  void setParticleGrainGen(ParticleGrainGenPtr particleGrainGenPtr);
90 
91  GrainId getNextGrainId() const;
92 
93  Grain &constructGrain();
94 
95  Grain &createAndInsertGrain(const Grain &grain);
96 
97  void generateRandomFillGrains();
98 
99  void generateCubicPackingGrains();
100 
101  int getNumGrains() const;
102 
103  GrainConstIterator getGrainIterator() const;
104 
105  GrainIterator getGrainIterator();
106 
107  const GrainCollection &getGrainCollection() const;
108 
109  GrainCollection &getGrainCollection();
110 
111  virtual void generate();
112 
113  private:
114  GrainCollectionPtr m_grainCollectionPtr;
115  };
116  };
117 };
118 
119 #include "Geometry/GrainRandomBoxPacker.hpp"
120 
121 #endif