ESyS-Particle  4.0.1
GrainRandomBoxPacker.h
00001 
00002 //                                                         //
00003 // Copyright (c) 2003-2011 by The University of Queensland //
00004 // Earth Systems Science Computational Centre (ESSCC)      //
00005 // http://www.uq.edu.au/esscc                              //
00006 //                                                         //
00007 // Primary Business: Brisbane, Queensland, Australia       //
00008 // Licensed under the Open Software License version 3.0    //
00009 // http://www.opensource.org/licenses/osl-3.0.php          //
00010 //                                                         //
00012 
00013 
00014 #ifndef ESYS_LSMGRAINRANDOMBOXPACKER_H
00015 #define ESYS_LSMGRAINRANDOMBOXPACKER_H
00016 
00017 #include "Geometry/RandomBoxPacker.h"
00018 #include "Geometry/GrainCollection.h"
00019 
00020 #include <vector>
00021 #include <boost/shared_ptr.hpp>
00022 
00023 namespace esys
00024 {
00025   namespace lsm
00026   {
00030     template <typename TmplParticleGrainGen, typename TmplGrainCollection, template <typename TPartGrainGen>  class TmplRndBoxPackerWrap>
00031     class GrainRandomBoxPacker : public TmplRndBoxPackerWrap<TmplParticleGrainGen>::RandomBoxPackerBase
00032     {
00033     public:
00034       typedef TmplGrainCollection                          GrainCollection;
00035       typedef boost::shared_ptr<GrainCollection>           GrainCollectionPtr;
00036       typedef typename GrainCollection::GrainIterator      GrainIterator;
00037       typedef typename GrainCollection::GrainConstIterator GrainConstIterator;
00038       typedef typename GrainCollection::Grain              Grain;
00039       typedef typename Grain::Id                           GrainId;
00040       typedef typename GrainCollection::GrainPool          GrainPool;
00041       typedef typename GrainCollection::GrainPoolPtr       GrainPoolPtr;
00042       typedef
00043         typename TmplRndBoxPackerWrap<TmplParticleGrainGen>::RandomBoxPackerBase
00044         Inherited;
00045       typedef Inherited                                    RandomBoxPackerBase;
00046       typedef typename Inherited::ParticleGenerator        ParticleGrainGen;
00047       typedef typename Inherited::ParticleGeneratorPtr     ParticleGrainGenPtr;
00048       typedef typename Inherited::Particle                 Particle;
00049       typedef typename Inherited::NTable                   NTable;
00050       typedef typename Inherited::NTablePtr                NTablePtr;
00051       typedef typename Inherited::ParticleVector           ParticleVector;
00052       typedef typename Inherited::ParticlePool             ParticlePool;
00053       typedef typename Inherited::ParticlePoolPtr          ParticlePoolPtr;
00054       typedef typename Inherited::PlaneVector              PlaneVector;
00055       typedef typename Inherited::StuffedParticleIterator  StuffedParticleIterator;
00056 
00057       GrainRandomBoxPacker(
00058         ParticleGrainGenPtr particleGrainGenPtr,
00059         ParticlePoolPtr     particlePoolPtr,
00060         NTablePtr           nTablePtr,
00061         const BoundingBox   &bBox,
00062         const BoolVector    &periodicDimensions,
00063         double              tolerance,
00064         double              cubicPackRadius,
00065         int                 maxInsertionFailures
00066       );
00067 
00068       GrainRandomBoxPacker(
00069         ParticleGrainGenPtr particleGrainGenPtr,
00070         ParticlePoolPtr     particlePoolPtr,
00071         NTablePtr           nTablePtr,
00072         const BoundingBox   &bBox,
00073         const BoolVector    &periodicDimensions,
00074         double              tolerance,
00075         double              cubicPackRadius,
00076         int                 maxInsertionFailures,
00077         const PlaneVector   &fitPlaneVector,
00078         GrainPoolPtr        grainPoolPtr
00079       );
00080 
00081       virtual ~GrainRandomBoxPacker();
00082 
00083       ParticleGrainGen &getParticleGrainGen();
00084 
00085       const ParticleGrainGen &getParticleGrainGen() const;
00086 
00087       void setParticleGrainGen(ParticleGrainGen &particleGrainGen);
00088 
00089       void setParticleGrainGen(ParticleGrainGenPtr particleGrainGenPtr);
00090 
00091       GrainId getNextGrainId() const;
00092       
00093       Grain &constructGrain();
00094 
00095       Grain &createAndInsertGrain(const Grain &grain);
00096 
00097       void generateRandomFillGrains();
00098 
00099       void generateCubicPackingGrains();
00100 
00101       int getNumGrains() const;
00102 
00103       GrainConstIterator getGrainIterator() const;
00104 
00105       GrainIterator getGrainIterator();
00106 
00107       const GrainCollection &getGrainCollection() const;
00108 
00109       GrainCollection &getGrainCollection();
00110 
00111       virtual void generate();
00112 
00113     private:
00114       GrainCollectionPtr m_grainCollectionPtr;
00115     };
00116   };
00117 };
00118 
00119 #include "Geometry/GrainRandomBoxPacker.hpp"
00120 
00121 #endif