ESyS-Particle
4.0.1
|
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