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 #ifndef __ARANDOMASSEMBLY2D_H 00014 #define __ARANDOMASSEMBLY2D_H 00015 00016 //-- project includes -- 00017 #include "Geometry/SimpleParticle.h" 00018 #include "Geometry/BasicInteraction.h" 00019 #include "Geometry/SimpleNTable.h" 00020 #include "Geometry/Sphere2d.h" 00021 #include "Geometry/Line.h" 00022 00023 //-- STL includes -- 00024 #include <vector> 00025 #include <set> 00026 00027 using std::set; 00028 using std::vector; 00029 00030 //--- IO includes --- 00031 #include <iostream> 00032 00041 class ARandomAssembly 00042 { 00043 protected: 00044 ASimpleNTable *m_snt; 00045 static double m_small_value; 00046 set<BasicInteraction,BILess> m_iset; 00047 vector<SimpleParticle> m_bpart; 00048 00049 double m_random(double,double); 00050 vector<SimpleParticle> getNeighborList(const SimpleParticle&); 00051 vector<SimpleParticle> get3ClosestNeighbors(const SimpleParticle&, const vector<SimpleParticle>&); 00052 vector<SimpleParticle> getClosestNeighbors(const SimpleParticle&, int); 00053 SimpleParticle getClosestParticle(const SimpleParticle&, const vector<SimpleParticle>&); 00054 00055 public: 00056 virtual ~ARandomAssembly() 00057 { 00058 } 00059 00060 virtual void generate(int,unsigned int)=0; 00061 virtual void insertParticle(const SimpleParticle)=0; 00062 virtual void tagParticleClosestTo(const Vec3&,int)=0; 00063 virtual void tagEdgeY(int,int,double)=0; 00064 virtual void tagEdgeZ(int,int,double)=0; 00065 virtual void tagSplit(int,int,double){std::cout <<"ARA::tagSplit" << std::endl;}; 00066 00067 virtual void writeToGeoFile(const string&)=0; 00068 virtual void writeToVtkFile(const string&); //{std::cerr << "writeToVtkFile not implemented" << std::endl;}; // empty default implementation 00069 virtual double calcPorosity()=0; 00070 virtual vector<pair<double,double> > getSizeDistribution(int)=0; 00071 }; 00072 00073 #endif // __ARANDOMASSEMBLY2D_H