~esys-p-dev/esys-particle/trunk

« back to all changes in this revision

Viewing changes to ntable/include/ntable/ntable.hpp

  • Committer: steffen
  • Date: 2004-01-20 05:44:15 UTC
  • Revision ID: svn-v4:1ddc92f8-1f06-0410-a909-b11019f1b28a:lsmtrunk:77
bugfix - rounding problems with particles on edge

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
  \param d grid spacing
16
16
  \param p0 minimal corner (origin) of the search space
17
17
*/
 
18
//template<typename T>
 
19
//NeighborTable<T>::NeighborTable(int x,int y,int z,double d,const Vec3& p0)
 
20
//  :m_p0(p0),m_dim(d),m_xsize(x),m_ysize(y),m_zsize(z),m_valid(true)
 
21
//{
 
22
//  m_array.resize(m_xsize*m_ysize*m_zsize);
 
23
//}
 
24
  
 
25
 
 
26
/*!
 
27
  construct neigbortable with known dimensions
 
28
 
 
29
  \param x nr. of grid points in x-direction
 
30
  \param y nr. of grid points in y-direction
 
31
  \param z nr. of grid points in z-direction
 
32
  \param d grid spacing
 
33
  \param p0_global minimal corner (origin) of the global search space
 
34
  \param ix x-index of the local origin 
 
35
  \param iy y-index of the local origin
 
36
  \param iz z-index of the local origin
 
37
*/
18
38
template<typename T>
19
 
NeighborTable<T>::NeighborTable(int x,int y,int z,double d,const Vec3& p0)
20
 
  :m_p0(p0),m_dim(d),m_xsize(x),m_ysize(y),m_zsize(z),m_valid(true)
 
39
NeighborTable<T>::NeighborTable(int x,int y,int z, double d, const Vec3& p0_global, int ix, int iy, int iz)
 
40
        :m_p0_global(p0_global),m_dim(d),m_xsize(x),m_ysize(y),m_zsize(z),m_valid(true)
21
41
{
22
 
  m_array.resize(m_xsize*m_ysize*m_zsize);
 
42
        m_global_idx=ix;
 
43
        m_global_idy=iy;
 
44
        m_global_idz=iz;        
 
45
        m_array.resize(m_xsize*m_ysize*m_zsize);
 
46
//  m_p0=m_p0_global+Vec3(m_dim*m_global_idx,m_dim*m_global_idy,m_dim*m_global_idz);
23
47
}
24
 
  
 
48
 
25
49
/*!
26
50
  destruct NeighborTable
27
51
*/
51
75
int NeighborTable<T>::index(const Vec3& pos)
52
76
{
53
77
  int idx=-1;
54
 
  int ix=int(floor((pos.X()-m_p0.X())/m_dim));
55
 
  int iy=int(floor((pos.Y()-m_p0.Y())/m_dim));
56
 
  int iz=int(floor((pos.Z()-m_p0.Z())/m_dim));
 
78
//  int ix=int(floor((pos.X()-m_p0.X())/m_dim));
 
79
//  int iy=int(floor((pos.Y()-m_p0.Y())/m_dim));
 
80
//  int iz=int(floor((pos.Z()-m_p0.Z())/m_dim));
 
81
        int ix=int(floor((pos.X()-m_p0_global.X())/m_dim))-m_global_idx;
 
82
  int iy=int(floor((pos.Y()-m_p0_global.Y())/m_dim))-m_global_idy;
 
83
  int iz=int(floor((pos.Z()-m_p0_global.Z())/m_dim))-m_global_idz;
57
84
  if((ix>=0)&&(ix<m_xsize)&&
58
85
     (iy>=0)&&(iy<m_ysize)&&
59
86
     (iz>=0)&&(iz<m_zsize)){
153
180
T* NeighborTable<T>::ptr_by_id(int id)
154
181
{
155
182
  T* pParticle = NULL;
156
 
  IdParticleMap::iterator it = m_idParticleMap.find(id);
 
183
  typename IdParticleMap::iterator it = m_idParticleMap.find(id);
157
184
 
158
185
  if (it != m_idParticleMap.end()) {
159
186
    pParticle = it->second;