ESyS-Particle  4.0.1
ARandomAssembly.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 #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