ESyS-Particle  2.3
ntable.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 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.opensource.org/licenses/osl-3.0.php //
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>
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;
85  arraytype m_array;
86  IdParticleMap m_idParticleMap;
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 ??
171 
173  template <typename TT>
174  friend std::ostream& operator<<(std::ostream &, const NeighborTable<TT> &);
175 };
176 
177 #include "ntable/src/ntable.hpp"
178 
179 #endif // __NTABLE_H
void addPairsToListFlagged(T_Handle< pairlist >, int, int)
Definition: ntable.hpp:454
T * ptr_by_id(int)
Definition: ntable.hpp:237
list< pair< T *, T * > > pairlist
Definition: ntable.h:73
T_Handle< particlelist > getParticlesNearEdge(const AEdge *)
Definition: ntable.hpp:652
void addPairsToListLocal(T_Handle< pairlist >, int)
Definition: ntable.hpp:422
Definition: vec3.h:46
iterator for a NTSlab
Definition: ntable.h:60
T_Handle< particlelist > getParticlesNearTriangle(const Triangle &)
Definition: ntable.hpp:621
T_Handle< particlelist > getParticlesNearPoint(const Vec3 &)
Definition: ntable.hpp:683
int m_xsize
number of grid point, x direction
Definition: ntable.h:93
void addPairsToList(T_Handle< pairlist >, int, int)
Definition: ntable.hpp:393
T * getNearestPtr(const Vec3 &)
Definition: ntable.hpp:261
T_Handle< pairlist > getFullList()
Definition: ntable.hpp:512
pair< int, int > indextype
Definition: ntable.h:72
void insert(iterator i, const T &data)
Definition: ntable.h:119
int xsize()
Definition: ntable.h:137
arraytype m_array
search array
Definition: ntable.h:85
int m_global_idx
minimum corner index (x component)
Definition: ntable.h:90
list< T > m_list
list of particles
Definition: ntable.h:84
Vec3 m_min_corner
minimum corner of the search array
Definition: ntable.h:97
bool m_valid
Definition: ntable.h:96
iterator end()
Definition: ntable.h:125
representation of a slab of the search array of a NeigborTable
Definition: nt_block.h:22
unsigned int nparts_at_gridpoint(unsigned int idx) const
number of particles at a given gridpoint
Definition: ntable.h:128
~NeighborTable()
Definition: ntable.hpp:86
int index(const Vec3 &)
Definition: ntable.hpp:109
std::map< int, T * > IdParticleMap
Definition: ntable.h:78
T * ptr(NeighborTable< T >::indextype)
Definition: ntable.hpp:216
int ysize()
Definition: ntable.h:138
arraytype * array()
Definition: ntable.h:110
Vec3 m_p0_global
minimum corner of global search space
Definition: ntable.h:87
void insert(const T &)
particle insertion
Definition: ntable.hpp:168
T_Handle< pairlist > getNewList()
Definition: ntable.hpp:550
bool isInInner(const Vec3 &)
dimensions
Definition: ntable.hpp:144
void build()
STL compat. insert.
Definition: ntable.hpp:190
NTSlab< T > xy_slab(int)
partial access functions
Definition: ntable.hpp:299
int m_global_idz
minimum corner index (z component)
Definition: ntable.h:92
T_Handle< particlelist > getParticlesAtPlane(const Vec3 &, const Vec3 &)
Definition: ntable.hpp:596
list< T >::iterator iterator
Definition: ntable.h:80
void erase(NeighborTable< T >::indextype)
Definition: ntable.hpp:286
iterator begin()
< iterators
Definition: ntable.h:124
class for neighbor search
Definition: ntable.h:67
NTSlab< T > xz_slab(int)
Definition: ntable.hpp:310
Class representing a Triangle.
Definition: Triangle.h:47
list< T * > particlelist
Definition: ntable.h:74
representation of a slab of the search array of a NeigborTable
Definition: nt_slab.h:23
NeighborTable()
Constructors.
Definition: ntable.hpp:19
int m_global_idy
minimum corner index (y component)
Definition: ntable.h:91
NTSlab< T > yz_slab(int)
Definition: ntable.hpp:321
int base_idx_y() const
Definition: ntable.h:143
int base_idx_z() const
Definition: ntable.h:144
void clear_search_array()
Definition: ntable.hpp:94
double m_alpha
padding factor (dim=2*rmax+alpha)
Definition: ntable.h:89
vector< typename list< T >::iterator > pointtype
Definition: ntable.h:71
int m_zsize
number of grid point, z direction
Definition: ntable.h:95
NTBlock< T > block(int, int, int, int, int, int)
Definition: ntable.hpp:337
NTBlock< T > inner()
Definition: ntable.hpp:378
T_Handle< particlelist > getAllParticles()
Definition: ntable.hpp:712
int zsize()
Definition: ntable.h:139
IdParticleMap m_idParticleMap
mapping between particle-id and particle-pointer
Definition: ntable.h:86
double m_dim
grid spacing of search array
Definition: ntable.h:88
valarray< vector< typename list< T >::iterator > > arraytype
Definition: ntable.h:70
Template class for a handle/ref. counted pointer.
Definition: handle.h:26
abstract base class for edges in mesh (2D or 3D)
Definition: AEdge.h:27
T & ref(NeighborTable< T >::indextype)
Definition: ntable.hpp:225
void addPairsToListLocalFlagged(T_Handle< pairlist >, int)
Definition: ntable.hpp:484
int m_ysize
number of grid point, y direction
Definition: ntable.h:94
int size()
Definition: ntable.h:140
Vec3 base_point() const
Definition: ntable.h:141
int base_idx_x() const
Definition: ntable.h:142
Vec3 m_max_corner
maximum corner of the search array
Definition: ntable.h:98