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 __SIMPLENTABLE3D_H 00014 #define __SIMPLENTABLE3D_H 00015 00016 //-- project includes -- 00017 #include "Geometry/SimpleParticle.h" 00018 #include "Geometry/BasicInteraction.h" 00019 #include "Geometry/SimpleNTable.h" 00020 00021 typedef std::set<BasicInteraction,BILess> InteractionSet; 00022 typedef std::vector<SimpleParticle> ParticleVector; 00023 00032 class CSimple3DNTable : public ASimpleNTable 00033 { 00034 private: 00035 Vec3 m_xshift,m_yshift,m_zshift; 00036 int m_xsize,m_ysize,m_zsize; 00037 bool m_xcirc,m_ycirc,m_zcirc; 00038 00039 protected: 00040 virtual int index(const Vec3&) const; 00041 virtual vector<int> allidx(const Vec3&) const; 00042 virtual void insertParticleCircular(SimpleParticle); 00043 00044 public: 00045 CSimple3DNTable(const Vec3&,const Vec3&,double,bool xcirc=false,bool ycirc=false,bool zcirc=false); 00046 virtual void getInteractions(set<BasicInteraction,BILess>&,double); 00047 void print(); 00048 00049 template <class TmplInteractionValidator> 00050 InteractionSet getInteractions(const TmplInteractionValidator &validator) const 00051 { 00052 InteractionSet iset; 00053 for(int i=0;i<m_xsize;i++){ 00054 for(int j=0;j<m_ysize;j++){ 00055 for(int k=0;k<m_zsize;k++){ 00056 int idx=i+m_xsize*j+k*m_xsize*m_zsize; 00057 if(m_data[idx].size() >= 2){ 00058 for(ParticleVector::const_iterator iter = m_data[idx].begin(); 00059 iter != m_data[idx].end()-1; 00060 iter++) 00061 { 00062 for ( 00063 ParticleVector::const_iterator iter2 = iter+1; 00064 iter2 != m_data[idx].end(); 00065 iter2++) 00066 { 00067 if (validator.isValid(*iter, *iter2)) 00068 { 00069 iset.insert(BasicInteraction(iter->getID(),iter2->getID())); 00070 } 00071 } 00072 } 00073 } 00074 } 00075 } 00076 } 00077 return iset; 00078 } 00079 }; 00080 00081 #endif //__SIMPLENTABLE3D_H