ESyS-Particle  2.3.4
ntable.hpp
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 #include "nt_block.h"
14 
18 template<typename T>
20  : m_list(),
21  m_array(),
22  m_idParticleMap(),
23  m_p0_global(),
24  m_dim(0),
25  m_alpha(0),
26  m_global_idx(0),
27  m_global_idy(0),
28  m_global_idz(0),
29  m_xsize(0),
30  m_ysize(0),
31  m_zsize(0),
32  m_valid(false)
33 {
34 }
35 
49 template<typename T>
51  int x,
52  int y,
53  int z,
54  double range,
55  double alpha,
56  const Vec3& p0_global,
57  int ix,
58  int iy,
59  int iz
60 )
61  : m_p0_global(p0_global),
62  m_dim(range),
63  m_alpha(alpha),
64  m_xsize(x),
65  m_ysize(y),
66  m_zsize(z),
67  m_valid(true)
68 {
69  m_global_idx=ix;
70  m_global_idy=iy;
71  m_global_idz=iz;
73  m_p0_global.Y()+m_dim*double(m_global_idy),
74  m_p0_global.Z()+m_dim*double(m_global_idz));
78  console.Debug() << "Ntable corners : " << m_min_corner << " - " << m_max_corner << "\n";
80 }
81 
85 template<typename T>
87 {
88 }
89 
93 template<typename T>
95 {
96  for(unsigned int iter=0;iter<m_array.size();iter++){
97  m_array[iter].erase(m_array[iter].begin(),m_array[iter].end());
98  }
99 }
100 
108 template<typename T>
110 {
111  int idx=-1;
112  int ix=int(floor((pos.X()-m_p0_global.X())/m_dim))-m_global_idx;
113  int iy=int(floor((pos.Y()-m_p0_global.Y())/m_dim))-m_global_idy;
114  int iz=int(floor((pos.Z()-m_p0_global.Z())/m_dim))-m_global_idz;
115  if((ix>=0)&&(ix<m_xsize)&&
116  (iy>=0)&&(iy<m_ysize)&&
117  (iz>=0)&&(iz<m_zsize)){
118  idx=m_ysize*m_zsize*ix+m_zsize*iy+iz;
119  }
120  return idx;
121 }
122 
132 template<typename T>
133 int NeighborTable<T>::index(int x,int y,int z) const
134 {
135  return m_ysize*m_zsize*x+m_zsize*y+z;
136 }
137 
143 template<typename T>
145 {
146  bool res;
147 
148  int ix=int(floor((pos.X()-m_p0_global.X())/m_dim))-m_global_idx;
149  int iy=int(floor((pos.Y()-m_p0_global.Y())/m_dim))-m_global_idy;
150  int iz=int(floor((pos.Z()-m_p0_global.Z())/m_dim))-m_global_idz;
151 
152  if(m_zsize<3) { // 2D-> ignore Z
153  res=((ix>0) && (ix<m_xsize-1) && (iy>0) && (iy<m_ysize-1));
154  } else {
155  res=((ix>0) && (ix<m_xsize-1) && (iy>0) && (iy<m_ysize-1)&& (iz>0) && (iz<m_zsize-1));
156  }
157 
158  return res;
159 }
160 
161 
167 template<typename T>
168 void NeighborTable<T>::insert(const T& t)
169 {
170  // put into list
171  typename list<T>::iterator iter=m_list.insert(m_list.end(),t);
172  // put into array
173  int idx=index(iter->getPos());
174  if(idx!=-1){
175 // m_idParticleMap.insert(IdParticleMap::value_type(iter->getID(),&(*iter)));
176  m_idParticleMap.insert(make_pair(iter->getID(),&(*iter)));
177  m_array[idx].push_back(iter);
178  } else { // outside -> delete
179  typename list<T>::iterator h=iter;
180  iter--;
181  m_list.erase(h);
182  }
183 }
184 
189 template<typename T>
191 {
192  clear_search_array();
193  // clean out id map
194  m_idParticleMap.clear();
195  for(typename list<T>::iterator iter=m_list.begin();
196  iter!=m_list.end();
197  iter++){
198  int idx=index(iter->getPos());
199  int id=iter->getID();
200  if(idx!=-1){
201  m_array[idx].push_back(iter);
202  m_idParticleMap[id]=&(*iter);
203  } else { // outside -> delete
204  typename list<T>::iterator h=iter;
205  iter--;
206  // delete from list
207  m_list.erase(h);
208  }
209  }
210 }
211 
215 template<typename T>
217 {
218  return &(*(m_array[idx.first][idx.second]));
219 }
220 
224 template<typename T>
226 {
227  return *(m_array[idx.first][idx.second]);
228 }
229 
236 template<typename T>
238 {
239  T* pParticle = NULL;
240  typename IdParticleMap::iterator it = m_idParticleMap.find(id);
241 
242  if (it != m_idParticleMap.end()) {
243  pParticle = it->second;
244  }
245  // debug output
246  if(pParticle!=NULL){
247  if(id!=pParticle->getID()){
248  console.Debug() << "inconsistent idParticleMap: " << id << " vs. " << pParticle->getID() << "\n";
249  }
250  }
251  return pParticle;
252 }
253 
260 template<typename T>
262 {
263  T* res=NULL;
264 
265  // get grid index for pos
266  int idx=index(pos);
267 
268  double dist=3.0*(m_dim*m_dim); // squared max. dist (grid diagonal)
269  if(idx!=-1){
270  for(typename pointtype::iterator iter=m_array[idx].begin();
271  iter!=m_array[idx].end();
272  iter++){
273  double ndist=(pos-(*iter)->getPos()).norm2();
274  res=(ndist<dist) ? &(**iter) : res;
275  dist=(ndist<dist) ? ndist : dist;
276  }
277  }
278 
279  return res;
280 }
281 
285 template<typename T>
287 {
288  m_idParticleMap.erase(m_array[idx.first][idx.second]->getID());
289  m_list.erase(m_array[idx.first][idx.second]);
290  m_array[idx.first].erase(m_array[idx.first].begin()+idx.second);
291 }
292 
298 template<typename T>
300 {
301  return NTSlab<T>(this,DSlice(z,m_ysize,m_zsize,m_xsize,m_ysize*m_zsize));
302 }
303 
309 template<typename T>
311 {
312  return NTSlab<T>(this,DSlice(y*m_zsize,m_zsize,1,m_xsize,m_ysize*m_zsize));
313 }
314 
320 template<typename T>
322 {
323  return NTSlab<T>(this,DSlice(x*m_ysize*m_zsize,m_zsize,1,m_ysize,m_zsize));
324 }
325 
326 /*
327  Return block of the search array
328 
329  \param xmin minimum index in x-dimension
330  \param xmax maximum index in x-dimension
331  \param ymin minimum index in y-dimension
332  \param ymax maximum index in y-dimension
333  \param zmin minimum index in z-dimension
334  \param zmax maximum index in z-dimension
335 */
336 template<typename T>
337 NTBlock<T> NeighborTable<T>::block(int xmin,int xmax,int ymin,int ymax,int zmin,int zmax)
338 {
339  return NTBlock<T>(this,xmin,xmax,ymin,ymax,zmin,zmax);
340 }
341 
342 /*
343  Return block of the search array.
344 
345  \param vmin minimum position
346  \param vmax maximum position
347 */
348 template<typename T>
349 NTBlock<T> NeighborTable<T>::block(const Vec3& vmin,const Vec3& vmax)
350 {
351  // minimum corner index
352  int xmin=int(floor((vmin.X()-m_p0_global.X())/m_dim))-m_global_idx;
353  int ymin=int(floor((vmin.Y()-m_p0_global.Y())/m_dim))-m_global_idy;
354  int zmin=int(floor((vmin.Z()-m_p0_global.Z())/m_dim))-m_global_idz;
355  // check for minimum outside
356  xmin=(xmin < 0) ? 0 : xmin;
357  ymin=(ymin < 0) ? 0 : ymin;
358  zmin=(zmin < 0) ? 0 : zmin;
359 
360  // maximum corner index
361  int xmax=int(floor((vmax.X()-m_p0_global.X())/m_dim))-m_global_idx;
362  int ymax=int(floor((vmax.Y()-m_p0_global.Y())/m_dim))-m_global_idy;
363  int zmax=int(floor((vmax.Z()-m_p0_global.Z())/m_dim))-m_global_idz;
364  // check for maximum outside
365  xmax=(xmax < m_xsize) ? xmax : m_xsize-1;
366  ymax=(ymax < m_ysize) ? ymax : m_ysize-1;
367  zmax=(zmax < m_zsize) ? zmax : m_zsize-1;
368 
369  return NTBlock<T>(this,xmin,xmax,ymin,ymax,zmin,zmax);
370 }
371 
372 
373 
377 template<typename T>
379 {
380  return NTBlock<T>(this,1,m_xsize-2,1,m_ysize-2,1,m_zsize-2);
381 }
382 
383 
384 
392 template<typename T>
394 {
395 
396  for(typename pointtype::iterator iter=m_array[idx1].begin();
397  iter!=m_array[idx1].end();
398  iter++){
399  for(typename pointtype::iterator iter2=m_array[idx2].begin();
400  iter2!=m_array[idx2].end();
401  iter2++){
402  double dist2=((*iter)->getPos()-(*iter2)->getPos()).norm2();
403  double dmax=(*iter)->getRad()+(*iter2)->getRad()+m_alpha;
404  if(dist2<=(dmax*dmax)){
405  if((*iter)->getID()<(*iter2)->getID()){
406  list->push_back(make_pair(&(**iter),&(**iter2)));
407  } else {
408  list->push_back(make_pair(&(**iter2),&(**iter)));
409  }
410  }
411  }
412  }
413 }
414 
421 template<typename T>
423 {
424  if(m_array[idx].size()>=2){ // at least 2 particles here, or no pairs
425  for(typename pointtype::iterator iter=m_array[idx].begin();
426  iter!=m_array[idx].end()-1;
427  iter++){
428  for(typename pointtype::iterator iter2=iter+1;
429  iter2!=m_array[idx].end();
430  iter2++){
431  double dist2=((*iter)->getPos()-(*iter2)->getPos()).norm2();
432  double dmax=(*iter)->getRad()+(*iter2)->getRad()+m_alpha;
433  if(dist2<=(dmax*dmax)){
434  if((*iter)->getID()<(*iter2)->getID()){
435  list->push_back(make_pair(&(**iter),&(**iter2)));
436  } else {
437  list->push_back(make_pair(&(**iter2),&(**iter)));
438  }
439  }
440  }
441  }
442  }
443 }
444 
453 template<typename T>
455 {
456 
457  for(typename pointtype::iterator iter=m_array[idx1].begin();
458  iter!=m_array[idx1].end();
459  iter++){
460  if((*iter)->isFlagged()){
461  for(typename pointtype::iterator iter2=m_array[idx2].begin();
462  iter2!=m_array[idx2].end();
463  iter2++){
464  if((*iter2)->isFlagged()){
465  if((*iter)->getID()<(*iter2)->getID()){
466  list->push_back(make_pair(&(**iter),&(**iter2)));
467  } else {
468  list->push_back(make_pair(&(**iter2),&(**iter)));
469  }
470  }
471  }
472  }
473  }
474 }
475 
483 template<typename T>
485 {
486  if(m_array[idx].size()>=2){ // at least 2 particles here, or no pairs
487  for(typename pointtype::iterator iter=m_array[idx].begin();
488  iter!=m_array[idx].end()-1;
489  iter++){
490  if((*iter)->isFlagged()){
491  for(typename pointtype::iterator iter2=iter+1;
492  iter2!=m_array[idx].end();
493  iter2++){
494  if((*iter2)->isFlagged()){
495  if((*iter)->getID()<(*iter2)->getID()){
496  list->push_back(make_pair(&(**iter),&(**iter2)));
497  } else {
498  list->push_back(make_pair(&(**iter2),&(**iter)));
499  }
500  }
501  }
502  }
503  }
504  }
505 }
506 
507 
511 template<typename T>
513 {
515 
516  for(int ix=0;ix<m_xsize;ix++){
517  for(int iy=0;iy<m_ysize;iy++){
518  for(int iz=0;iz<m_zsize;iz++){
519  // add pairs within the gridpoint
520  addPairsToListLocal(list,index(ix,iy,iz));
521  // get search range, considering boundaries
522  int xmax=(ix<m_xsize-1) ? ix+1 : ix;
523  int ymax=(iy<m_ysize-1) ? iy+1 : iy;
524  int zmax=(iz<m_zsize-1) ? iz+1 : iz;
525  int xmin=(ix>0) ? ix-1 : ix;
526  int ymin=(iy>0) ? iy-1 : iy;
527  int zmin=(iz>0) ? iz-1 : iz;
528  for(int i=xmin;i<=xmax;i++){
529  for(int j=ymin;j<=ymax;j++){
530  for(int k=zmin;k<=zmax;k++){
531  int idx1=index(ix,iy,iz);
532  int idx2=index(i,j,k);
533  if(idx2>idx1){
534  addPairsToList(list,idx1,idx2);
535  }
536  }
537  }
538  }
539  }
540  }
541  }
542  return list;
543 }
544 
549 template<typename T>
551 {
553 
554  for(int ix=0;ix<m_xsize;ix++){
555  for(int iy=0;iy<m_ysize;iy++){
556  for(int iz=0;iz<m_zsize;iz++){
557  // add pairs within the gridpoint
558  addPairsToListLocalFlagged(nlist,index(ix,iy,iz));
559  // get search range, considering boundaries
560  int xmax=(ix<m_xsize-1) ? ix+1 : ix;
561  int ymax=(iy<m_ysize-1) ? iy+1 : iy;
562  int zmax=(iz<m_zsize-1) ? iz+1 : iz;
563  int xmin=(ix>0) ? ix-1 : ix;
564  int ymin=(iy>0) ? iy-1 : iy;
565  int zmin=(iz>0) ? iz-1 : iz;
566  for(int i=xmin;i<=xmax;i++){
567  for(int j=ymin;j<=ymax;j++){
568  for(int k=zmin;k<=zmax;k++){
569  int idx1=index(ix,iy,iz);
570  int idx2=index(i,j,k);
571  if(idx2>idx1){
572  addPairsToListFlagged(nlist,idx1,idx2);
573  }
574  }
575  }
576  }
577  }
578  }
579  }
580  for(typename list<T>::iterator iter=m_list.begin();
581  iter!=m_list.end();
582  iter++){
583  iter->setFlag(false);
584  }
585  return nlist;
586 }
587 
595 template<typename T>
597 {
599 
600  console.Debug() << "NeighborTable<T>::getParticlesAtPlane: m_dim = " << m_dim << "\n";
601  for(typename list<T>::iterator iter=m_list.begin();
602  iter!=m_list.end();
603  iter++){
604  double dist=(iter->getPos()-orig)*normal;
605  if(fabs(dist)<m_dim){
606  nlist->push_back(&(*iter));
607  }
608  }
609  console.Debug() << "NeighborTable<T>::getParticlesAtPlane: found = " << nlist->size() << "particles\n";
610 
611  return nlist;
612 }
613 
621 template<typename T>
623 {
625 
626  console.Debug() << "NeighborTable<T>::getParticlesNearSphere: m_dim = " << m_dim << "\n";
627  for(typename list<T>::iterator iter=m_list.begin();
628  iter!=m_list.end();
629  iter++){
630  double dist=(iter->getPos()-centre).norm() - radius;
631  if(fabs(dist)<m_dim){
632  nlist->push_back(&(*iter));
633  }
634  }
635  console.Debug() << "NeighborTable<T>::getParticlesNearSphere: found = " << nlist->size() << "particles\n";
636 
637  return nlist;
638 }
639 
646 template<typename T>
648 {
650 
651  // work out search area from bounding box of the triangle
652  Vec3 v_min=Tr.getBoundingBoxMin()-Vec3(m_dim,m_dim,m_dim);
653  Vec3 v_max=Tr.getBoundingBoxMax()+Vec3(m_dim,m_dim,m_dim);
654  // check if completely outside
655  if((v_min.X()<m_max_corner.X())&&(v_min.Y()<m_max_corner.Y())&&(v_min.Z()<m_max_corner.Z())&&
656  (v_max.X()>m_min_corner.X())&&(v_max.Y()>m_min_corner.Y())&&(v_max.Z()>m_min_corner.Z())){
657 
658  NTBlock<T> TriangleBlock=block(v_min,v_max);
659  for(typename NTBlock<T>::iterator iter=TriangleBlock.begin();
660  iter!=TriangleBlock.end();
661  iter++){
662  if(Tr.sep(iter->getPos()) < iter->getRad()+m_alpha){
663  nlist->push_back(&(*iter));
664  }
665  }
666  }
667 
668  return nlist;
669 }
670 
677 template<typename T>
679 {
681 
682  // get search area via bounding box
683  Vec3 v_min=E->getBoundingBoxMin()-Vec3(m_dim,m_dim,m_dim);
684  Vec3 v_max=E->getBoundingBoxMax()+Vec3(m_dim,m_dim,m_dim);
685  // check if completely outside
686  if((v_min.X()<m_max_corner.X())&&(v_min.Y()<m_max_corner.Y())&&(v_min.Z()<m_max_corner.Z())&&
687  (v_max.X()>m_min_corner.X())&&(v_max.Y()>m_min_corner.Y())&&(v_max.Z()>m_min_corner.Z())){
688 
689  NTBlock<T> SearchBlock=block(v_min,v_max);
690 
691  for(typename NTBlock<T>::iterator iter=SearchBlock.begin();
692  iter!=SearchBlock.end();
693  iter++){
694  if(E->sep(iter->getPos()) < iter->getRad()+m_alpha){
695  nlist->push_back(&(*iter));
696  }
697  }
698  }
699 
700  return nlist;
701 }
702 
708 template<typename T>
710 {
712 
713  // get search area via bounding box
714  Vec3 v_min=p-Vec3(m_dim,m_dim,m_dim);
715  Vec3 v_max=p+Vec3(m_dim,m_dim,m_dim);
716  // check if completely outside
717  if((v_min.X()<m_max_corner.X())&&(v_min.Y()<m_max_corner.Y())&&(v_min.Z()<m_max_corner.Z())&&
718  (v_max.X()>m_min_corner.X())&&(v_max.Y()>m_min_corner.Y())&&(v_max.Z()>m_min_corner.Z())){
719 
720  NTBlock<T> SearchBlock=block(v_min,v_max);
721 
722  for(typename NTBlock<T>::iterator iter=SearchBlock.begin();
723  iter!=SearchBlock.end();
724  iter++){
725  if((p-iter->getPos()).norm() < iter->getRad()+m_alpha){
726  nlist->push_back(&(*iter));
727  }
728  }
729  }
730 
731  return nlist;
732 }
733 
737 template<typename T>
739 {
741 
742  for(typename list<T>::iterator iter=m_list.begin();
743  iter!=m_list.end();
744  iter++){
745  nlist->push_back(&(*iter));
746  }
747 
748  return nlist;
749 }
750 
757 template<typename T>
758 std::ostream& operator<<(std::ostream& ost, const NeighborTable<T>& NT)
759 {
760  ost << "---NeighborTable---" << endl;
761  ost << "3d array dimensions (x,y,z),size : (" << NT.m_xsize << "," << NT.m_ysize<< "," << NT.m_zsize << "), " << NT.m_array.size() << endl;
762  ost << "search range : " << NT.m_dim << endl;
763  ost << "--list--" << endl;
764  ost << (NT.m_list).size() << " elements" << endl;
765  for(typename list<T>::const_iterator iter=(NT.m_list).begin();
766  iter!=(NT.m_list).end();
767  iter++){
768  ost << iter->getID() << " " << iter->getPos() << endl;
769  }
770  ost << "---search array---" << endl;
771  for(int ix=0;ix<NT.m_xsize;ix++){
772  for(int iy=0;iy<NT.m_ysize;iy++){
773  for(int iz=0;iz<NT.m_zsize;iz++){
774  unsigned int np=NT.nparts_at_gridpoint(NT.index(ix,iy,iz));
775  int idx=NT.index(ix,iy,iz);
776  //ost << "---" << endl;
777  ost << "(" << ix << "," << iy << "," << iz << ") , [" << idx << "], " << np << " : ";
778  for(unsigned int i=0;i<np;i++){
779  ost << (NT.m_array[idx])[i]->getID() << " ";
780  }
781  ost << endl;
782  }
783  }
784  }
785  return ost;
786 }
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::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
Console::Debug
Console & Debug()
set verbose level of next message to "dbg"
operator<<
std::ostream & operator<<(std::ostream &ost, const NeighborTable< T > &NT)
Definition: ntable.hpp:758
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
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::m_p0_global
Vec3 m_p0_global
minimum corner of global search space
Definition: ntable.h:87
AEdge::sep
double sep(const Vec3 &) const
Definition: AEdge.cpp:51
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
Triangle::getBoundingBoxMin
Vec3 getBoundingBoxMin() const
Definition: Triangle.cpp:159
NeighborTable::xz_slab
NTSlab< T > xz_slab(int)
Definition: ntable.hpp:310
NeighborTable::isInInner
bool isInInner(const Vec3 &)
dimensions
Definition: ntable.hpp:144
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
Triangle::getBoundingBoxMax
Vec3 getBoundingBoxMax() const
Definition: Triangle.cpp:170
NeighborTable::getNewList
T_Handle< pairlist > getNewList()
Definition: ntable.hpp:550
Vec3::X
VEC3_INLINE double & X()
Definition: vec3.h:119
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::addPairsToList
void addPairsToList(T_Handle< pairlist >, int, int)
Definition: ntable.hpp:393
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
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
NeighborTable::m_zsize
int m_zsize
number of grid point, z direction
Definition: ntable.h:95
NULL
#define NULL
Definition: t_list.h:17
NTBlock_iter
iterator for a NTBlock
Definition: ntb_iter.h:39
NTBlock::begin
iterator begin()
Definition: nt_block.hpp:73
NeighborTable::m_dim
double m_dim
grid spacing of search array
Definition: ntable.h:88
NeighborTable::m_global_idz
int m_global_idz
minimum corner index (z component)
Definition: ntable.h:92
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
NeighborTable::yz_slab
NTSlab< T > yz_slab(int)
Definition: ntable.hpp:321
nt_block.h
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
Triangle::sep
double sep(const Vec3 &) const
Definition: Triangle.cpp:83
NeighborTable::particlelist
list< T * > particlelist
Definition: ntable.h:74
Vec3
Definition: vec3.h:47
esys::lsm::bpu::iter
boost::python::object iter(const boost::python::object &pyOb)
Definition: Util.h:25
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
NeighborTable::ptr_by_id
T * ptr_by_id(int)
Definition: ntable.hpp:237
NeighborTable::erase
void erase(NeighborTable< T >::indextype)
Definition: ntable.hpp:286
NeighborTable::getParticlesNearEdge
T_Handle< particlelist > getParticlesNearEdge(const AEdge *)
Definition: ntable.hpp:678
NeighborTable::build
void build()
STL compat. insert.
Definition: ntable.hpp:190
AEdge::getBoundingBoxMin
Vec3 getBoundingBoxMin() const
Definition: AEdge.cpp:33
DSlice
Definition: dslice.h:22
NeighborTable::~NeighborTable
~NeighborTable()
Definition: ntable.hpp:86
console
Console console
Definition: console.cpp:25
NeighborTable::m_global_idy
int m_global_idy
minimum corner index (y component)
Definition: ntable.h:91
AEdge::getBoundingBoxMax
Vec3 getBoundingBoxMax() const
Definition: AEdge.cpp:41
NTBlock::end
iterator end()
Definition: nt_block.hpp:107
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::getParticlesNearPoint
T_Handle< particlelist > getParticlesNearPoint(const Vec3 &)
Definition: ntable.hpp:709