ESyS-Particle  2.3.4
ntable.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __NTABLE_H
14 #define __NTABLE_H
15 
16 #include "Foundation/console.h"
17 
18 //--- project includes ---
19 #include "Foundation/vec3.h"
20 #include "ntable/src/dslice.h"
21 #include "ntable/src/handle.h"
22 #include "Geometry/Triangle.h"
23 #include "Geometry/AEdge.h"
24 
25 
26 
27 //--- STL includes ---
28 #include <utility>
29 #include <valarray>
30 #include <vector>
31 #include <list>
32 
33 #if HAVE_CONFIG_H
34 #include <config.h>
35 #endif
36 
37 /* #if HAVE_HASH_MAP */
38 /* #include <hash_map> */
39 /* #else */
40 #include <map>
41 /* #endif */
42 
43 using std::valarray;
44 using std::vector;
45 using std::list;
46 using std::pair;
47 using std::make_pair;
48 
49 //--- IO includes ---
50 #include <iostream>
51 
52 //--- forward declarations ---
53 template<typename T>
54 class NTSlab;
55 
56 template<typename T>
57 class NTBlock;
58 
59 template<typename T>
60 class NTSlab_iter;
61 
66 template <typename T>
68 {
69  public: // types
70  typedef valarray<vector<typename list<T>::iterator> > arraytype;
71  typedef vector<typename list<T>::iterator> pointtype;
72  typedef pair<int,int> indextype;
73  typedef list<pair<T*,T*> > pairlist;
74  typedef list<T*> particlelist;
75 /* #if HAVE_HASH_MAP */
76 /* typedef std::hash_map<int, T*> IdParticleMap; */
77 /* #else */
78  typedef std::map<int, T*> IdParticleMap;
79 /* #endif */
80  typedef typename list<T>::iterator iterator;
81 
82  private:
83  // member variables
84  list<T> m_list;
88  double m_dim;
89  double m_alpha;
93  int m_xsize;
94  int m_ysize;
95  int m_zsize;
96  bool m_valid;
99 
100 
101  // private member functions
102  void clear_search_array();
103  int index(const Vec3&); // index from position
104 
105  void addPairsToList(T_Handle<pairlist>,int,int);
109 
110  arraytype *array(){return &m_array;};
111 
112  public:
114  NeighborTable();
115  NeighborTable(int,int,int,double,double,const Vec3&,int,int,int);
116  ~NeighborTable();
117 
118  void insert(const T&);
119  void insert(iterator i,const T& data){insert(data);};
120  void build();
121  inline int index(int,int,int) const; // total index from x,y,z indices
122 
124  iterator begin(){return m_list.begin();};
125  iterator end(){return m_list.end();};
126 
128  unsigned int nparts_at_gridpoint(unsigned int idx) const
129  {
130  return (m_array[idx]).size();
131  }
132 
133  // check in posn. is in inner part
134  bool isInInner(const Vec3&);
135 
137  int xsize(){return m_xsize;};
138  int ysize(){return m_ysize;};
139  int zsize(){return m_zsize;};
140  int size(){return m_list.size();};
141  Vec3 base_point() const {return m_p0_global;};
142  int base_idx_x() const {return m_global_idx;};
143  int base_idx_y() const {return m_global_idy;};
144  int base_idx_z() const {return m_global_idz;};
145 
147  NTSlab<T> xy_slab(int);
148  NTSlab<T> xz_slab(int);
149  NTSlab<T> yz_slab(int);
150  NTBlock<T> block(int,int,int,int,int,int);
151  NTBlock<T> block(const Vec3&,const Vec3&);
152  NTBlock<T> inner();
153 
154  // access ops
157  T* ptr_by_id(int);
158  T *getNearestPtr(const Vec3&);
159 
160  // erase particle (not meant to be used directly)
162 
163  // neigbor list creation
166  T_Handle<particlelist> getParticlesAtPlane(const Vec3&,const Vec3&); // distance as parameter ??
167  T_Handle<particlelist> getParticlesNearSphere(const Vec3&,const double&);
172 
174  template <typename TT>
175  friend std::ostream& operator<<(std::ostream &, const NeighborTable<TT> &);
176 };
177 
178 #include "ntable/src/ntable.hpp"
179 
180 #endif // __NTABLE_H
NeighborTable::m_min_corner
Vec3 m_min_corner
minimum corner of the search array
Definition: ntable.h:97
NTBlock
representation of a slab of the search array of a NeigborTable
Definition: nt_block.h:33
Triangle
Class representing a Triangle.
Definition: Triangle.h:48
NeighborTable::m_global_idx
int m_global_idx
minimum corner index (x component)
Definition: ntable.h:90
NeighborTable::pairlist
list< pair< T *, T * > > pairlist
Definition: ntable.h:73
NeighborTable::operator<<
friend std::ostream & operator<<(std::ostream &, const NeighborTable< TT > &)
output
NeighborTable::getFullList
T_Handle< pairlist > getFullList()
Definition: ntable.hpp:512
NeighborTable::index
int index(const Vec3 &)
Definition: ntable.hpp:109
NeighborTable::ref
T & ref(NeighborTable< T >::indextype)
Definition: ntable.hpp:225
NeighborTable::m_max_corner
Vec3 m_max_corner
maximum corner of the search array
Definition: ntable.h:98
NeighborTable::NeighborTable
NeighborTable()
Constructors.
Definition: ntable.hpp:19
NeighborTable::ptr
T * ptr(NeighborTable< T >::indextype)
Definition: ntable.hpp:216
NeighborTable::m_xsize
int m_xsize
number of grid point, x direction
Definition: ntable.h:93
ntable.hpp
NeighborTable::nparts_at_gridpoint
unsigned int nparts_at_gridpoint(unsigned int idx) const
number of particles at a given gridpoint
Definition: ntable.h:128
NeighborTable::inner
NTBlock< T > inner()
Definition: ntable.hpp:378
NeighborTable::iterator
list< T >::iterator iterator
Definition: ntable.h:80
NeighborTable::base_idx_z
int base_idx_z() const
Definition: ntable.h:144
NeighborTable::ysize
int ysize()
Definition: ntable.h:138
console.h
NeighborTable::m_p0_global
Vec3 m_p0_global
minimum corner of global search space
Definition: ntable.h:87
NeighborTable::addPairsToListLocalFlagged
void addPairsToListLocalFlagged(T_Handle< pairlist >, int)
Definition: ntable.hpp:484
NeighborTable::block
NTBlock< T > block(int, int, int, int, int, int)
Definition: ntable.hpp:337
NeighborTable::clear_search_array
void clear_search_array()
Definition: ntable.hpp:94
NeighborTable::IdParticleMap
std::map< int, T * > IdParticleMap
Definition: ntable.h:78
NeighborTable::xz_slab
NTSlab< T > xz_slab(int)
Definition: ntable.hpp:310
NeighborTable::isInInner
bool isInInner(const Vec3 &)
dimensions
Definition: ntable.hpp:144
NeighborTable::insert
void insert(iterator i, const T &data)
Definition: ntable.h:119
AEdge
abstract base class for edges in mesh (2D or 3D)
Definition: AEdge.h:28
NeighborTable::m_list
list< T > m_list
list of particles
Definition: ntable.h:84
dslice.h
NeighborTable::size
int size()
Definition: ntable.h:140
NeighborTable::getNewList
T_Handle< pairlist > getNewList()
Definition: ntable.hpp:550
NeighborTable::m_valid
bool m_valid
Definition: ntable.h:96
NeighborTable::indextype
pair< int, int > indextype
Definition: ntable.h:72
NeighborTable::m_ysize
int m_ysize
number of grid point, y direction
Definition: ntable.h:94
NeighborTable::base_idx_x
int base_idx_x() const
Definition: ntable.h:142
NeighborTable::addPairsToList
void addPairsToList(T_Handle< pairlist >, int, int)
Definition: ntable.hpp:393
NeighborTable::zsize
int zsize()
Definition: ntable.h:139
handle.h
NeighborTable::getParticlesNearTriangle
T_Handle< particlelist > getParticlesNearTriangle(const Triangle &)
Definition: ntable.hpp:647
NTSlab
representation of a slab of the search array of a NeigborTable
Definition: nt_slab.h:35
NeighborTable::xy_slab
NTSlab< T > xy_slab(int)
partial access functions
Definition: ntable.hpp:299
NeighborTable::m_zsize
int m_zsize
number of grid point, z direction
Definition: ntable.h:95
Triangle.h
NeighborTable::m_dim
double m_dim
grid spacing of search array
Definition: ntable.h:88
NeighborTable::array
arraytype * array()
Definition: ntable.h:110
NeighborTable::m_idParticleMap
IdParticleMap m_idParticleMap
mapping between particle-id and particle-pointer
Definition: ntable.h:86
NeighborTable::m_global_idz
int m_global_idz
minimum corner index (z component)
Definition: ntable.h:92
NeighborTable::yz_slab
NTSlab< T > yz_slab(int)
Definition: ntable.hpp:321
T_Handle
Template class for a handle/ref. counted pointer.
Definition: handle.h:27
NeighborTable::addPairsToListLocal
void addPairsToListLocal(T_Handle< pairlist >, int)
Definition: ntable.hpp:422
NeighborTable::getParticlesAtPlane
T_Handle< particlelist > getParticlesAtPlane(const Vec3 &, const Vec3 &)
Definition: ntable.hpp:596
NeighborTable
class for neighbor search
Definition: ntable.h:68
NeighborTable::particlelist
list< T * > particlelist
Definition: ntable.h:74
Vec3
Definition: vec3.h:47
NeighborTable::m_array
arraytype m_array
search array
Definition: ntable.h:85
NeighborTable::getAllParticles
T_Handle< particlelist > getAllParticles()
Definition: ntable.hpp:738
NeighborTable::insert
void insert(const T &)
particle insertion
Definition: ntable.hpp:168
vec3.h
NeighborTable::ptr_by_id
T * ptr_by_id(int)
Definition: ntable.hpp:237
NeighborTable::m_alpha
double m_alpha
padding factor (dim=2*rmax+alpha)
Definition: ntable.h:89
NTSlab_iter
iterator for a NTSlab
Definition: nts_iter.h:39
NeighborTable::erase
void erase(NeighborTable< T >::indextype)
Definition: ntable.hpp:286
AEdge.h
NeighborTable::begin
iterator begin()
< iterators
Definition: ntable.h:124
NeighborTable::getParticlesNearEdge
T_Handle< particlelist > getParticlesNearEdge(const AEdge *)
Definition: ntable.hpp:678
NeighborTable::build
void build()
STL compat. insert.
Definition: ntable.hpp:190
NeighborTable::arraytype
valarray< vector< typename list< T >::iterator > > arraytype
Definition: ntable.h:70
NeighborTable::xsize
int xsize()
Definition: ntable.h:137
NeighborTable::end
iterator end()
Definition: ntable.h:125
NeighborTable::~NeighborTable
~NeighborTable()
Definition: ntable.hpp:86
NeighborTable::m_global_idy
int m_global_idy
minimum corner index (y component)
Definition: ntable.h:91
NeighborTable::base_idx_y
int base_idx_y() const
Definition: ntable.h:143
NeighborTable::pointtype
vector< typename list< T >::iterator > pointtype
Definition: ntable.h:71
NeighborTable::addPairsToListFlagged
void addPairsToListFlagged(T_Handle< pairlist >, int, int)
Definition: ntable.hpp:454
NeighborTable::getParticlesNearSphere
T_Handle< particlelist > getParticlesNearSphere(const Vec3 &, const double &)
Definition: ntable.hpp:622
NeighborTable::getNearestPtr
T * getNearestPtr(const Vec3 &)
Definition: ntable.hpp:261
NeighborTable::base_point
Vec3 base_point() const
Definition: ntable.h:141
NeighborTable::getParticlesNearPoint
T_Handle< particlelist > getParticlesNearPoint(const Vec3 &)
Definition: ntable.hpp:709