Dendro  5.01
Dendro in Greek language means tree. The Dendro library is a large scale (262K cores on ORNL's Titan) distributed memory adaptive octree framework. The main goal of Dendro is to perform large scale multiphysics simulations efficeiently in mordern supercomputers. Dendro consists of efficient parallel data structures and algorithms to perform variational ( finite element) methods and finite difference mthods on 2:1 balanced arbitary adaptive octrees which enables the users to perform simulations raning from black holes (binary black hole mergers) to blood flow in human body, where applications ranging from relativity, astrophysics to biomedical engineering.
meshTestUtils.h
1 //
2 // Created by milinda on 9/25/17.
8 //
9 
10 #ifndef SFCSORTBENCH_MESHTESTUTILS_H
11 #define SFCSORTBENCH_MESHTESTUTILS_H
12 
13 #include "mesh.h"
14 #include <iostream>
15 #include <functional>
16 #include "daUtils.h"
17 #include "lebedev.h"
18 
19 
20 
21 namespace ot
22 {
23  namespace test
24  {
33  template <typename T>
34  bool isElementalNodalValuesValid( ot::Mesh * pMesh,T* vec,std::function<T(T,T,T)> func, double tol);
35 
36 
47  template<typename T>
48  bool isElementalContributionValid(ot::Mesh *pMesh, std::function<T(T,T,T)> func, std::function<T(T,T,T)> Ifunc, double tol);
49 
50 
59  template <typename T>
60  bool isUnzipValid(ot::Mesh* pMesh, T* unzipVec,std::function<T(T,T,T)> fn, T tol);
61 
71  template <typename T>
72  bool isUnzipNaN(ot::Mesh* pMesh, T* unzipVec);
73 
74 
79  template <typename T>
80  bool isZipNAN(ot::Mesh* pMesh, T* zipVec);
81 
82 
83 
84 
85  template <typename T>
86  bool isUnzipInternalNaN(ot::Mesh* pMesh, T* unzipVec);
87 
98  template<typename T>
99  bool isInterpToSphereValid(const ot::Mesh * mesh,const T* zipIn,std::function<T(T,T,T)> func,double r,const double *dMin,const double * dMax,double tolerance);
100 
101 
102 
103  template<typename T>
104  bool isSphereInterpValid(ot::Mesh* pMesh, T* vec, std::function< double(double,double,double) > func, double r, double tol, Point d_min, Point d_max);
105 
106 
107 
108 
109  }
110 }
111 
112 
113 
114 
115 
116 // function definitions
117 
118 
119 template <typename T>
120 bool ot::test::isElementalNodalValuesValid( ot::Mesh * pMesh,T* vec,std::function<T(T,T,T)> func,double tol)
121 {
122 
123  if(!(pMesh->isActive())) return true;
124 
125  std::vector<T> nodalValues;
126  nodalValues.resize(pMesh->getNumNodesPerElement());
127  const unsigned int eleOrder=pMesh->getElementOrder();
128 
129  const std::vector<ot::TreeNode> pNodes=pMesh->getAllElements();
130  const std::vector<unsigned int> e2n_dg=pMesh->getE2NMapping_DG();
131  unsigned int x,y,z,sz,owner,ix,jy,kz;
132  const unsigned int nPe=pMesh->getNumNodesPerElement();
133  bool isValid=true;
134 
135  for(unsigned int ele=pMesh->getElementLocalBegin();ele<pMesh->getElementLocalEnd();ele++)
136  {
137 
138  pMesh->getElementNodalValues(vec,&(*(nodalValues.begin())),ele);
139  sz=1u<<(m_uiMaxDepth-pNodes[ele].getLevel());
140  for(unsigned int k=0;k<(eleOrder+1);k++)
141  for(unsigned int j=0;j<(eleOrder+1);j++)
142  for(unsigned int i=0;i<(eleOrder+1);i++)
143  {
144  x=pNodes[ele].getX()+i*(sz/eleOrder);
145  y=pNodes[ele].getY()+j*(sz/eleOrder);
146  z=pNodes[ele].getZ()+k*(sz/eleOrder);
147  if((i>1 && i<eleOrder) && (j>1 && j<eleOrder) && (k>1 && k<eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
148  {
149  isValid=false;
150  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
151  std::cout<<"[node value Error]"<<std::endl;
152  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
153  }
154 
155  if((i==0) && (j==0) && (k>=0 && k<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
156  {
157  isValid=false;
158  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
159  std::cout<<"[left down value error]"<<std::endl;
160  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
161  }
162 
163  if((i==0) && (j==eleOrder) && (k>=0 && k<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
164  {
165  isValid=false;
166  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
167  std::cout<<"[left up value error]"<<std::endl;
168  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
169  }
170 
171  if((i==0) && (k==0) && (j>=0 && j<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
172  {
173  isValid=false;
174  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
175  std::cout<<"[left back value error]"<<std::endl;
176  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
177  }
178 
179  if((i==0) && (k==eleOrder) && (j>=0 && j<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
180  {
181  isValid=false;
182  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
183  std::cout<<"[left front value error]"<<std::endl;
184  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
185  }
186 
187  if((i==eleOrder) && (j==0) && (k>=0 && k<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
188  {
189  isValid=false;
190  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
191  std::cout<<"[right down value error]"<<std::endl;
192  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
193  }
194 
195  if((i==eleOrder) && (j==eleOrder) && (k>=0 && k<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
196  {
197  isValid=false;
198  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
199  std::cout<<"[right up value error]"<<std::endl;
200  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
201  }
202 
203  if((i==eleOrder) && (k==0) && (j>=0 && j<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
204  {
205  isValid=false;
206  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
207  std::cout<<"[right back value error]"<<std::endl;
208  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
209  }
210 
211  if((i==eleOrder) && (k==eleOrder) && (j>=0 && j<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
212  {
213  isValid=false;
214  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
215  std::cout<<"[right front value error]"<<std::endl;
216  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
217  }
218 
219  if((k==0) && (j==0) && (i>=0 && i<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
220  {
221  isValid=false;
222  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
223  std::cout<<"[down back value error]"<<std::endl;
224  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
225  }
226 
227  if((k==eleOrder) && (j==0) && (i>=0 && i<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
228  {
229  isValid=false;
230  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
231  std::cout<<"[down front value error]"<<std::endl;
232  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
233  }
234 
235 
236  if((k==0) && (j==eleOrder) && (i>=0 && i<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
237  {
238  isValid=false;
239  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
240  std::cout<<"[up back value error]"<<std::endl;
241  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
242  }
243 
244  if((k==eleOrder) && (j==eleOrder) && (i>=0 && i<=eleOrder) && fabs(nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]-func(x,y,z))>tol)
245  {
246  isValid=false;
247  pMesh->dg2eijk(e2n_dg[ele*nPe+k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i],owner,ix,jy,kz);
248  std::cout<<"[up front value error]"<<std::endl;
249  std::cout<<" nvalue: "<<nodalValues[k*(eleOrder+1)*(eleOrder+1)+j*(eleOrder+1)+i]<<" actual: "<<func(x,y,z)<<" ele: "<<ele<<" (i,j,k) : ("<<i<<","<<j<<","<<k<<") : element : "<<pNodes[ele]<<" (x,y,z): ("<<x<<","<<y<<","<<z<<")"<<" owner: "<<pNodes[owner]<<" (i,j,k): ("<<ix<<","<<jy<<","<<kz<<" )"<<std::endl;
250  }
251 
252 
253  }
254 
255  }
256 
257 
258  return isValid;
259 
260 
261 }
262 
263 
264 
265 template <typename T>
266 bool ot::test::isUnzipValid(ot::Mesh* pMesh, T* unzipVec,std::function<T(T,T,T)> fn, T tol)
267 {
268 
269  if(!(pMesh->isActive())) return true;
270 
271  const int rank =pMesh->getMPIRank();
272  const std::vector<ot::TreeNode> pNodes=pMesh->getAllElements();
273  const std::vector<ot::Block> blkList=pMesh->getLocalBlockList();
274 
275  /*std::vector<ot::TreeNode> localElem;
276  std::vector<ot::TreeNode> ghostElem;
277  std::vector<ot::TreeNode> debugBlocks;
278 
279  for(unsigned int e=0;e<pNodes.size();e++)
280  {
281  if(e>=lBegin && e< lEnd)
282  localElem.push_back(pNodes[e]);
283  else
284  ghostElem.push_back(pNodes[e]);
285 
286  }
287 
288 
289  treeNodesTovtk(localElem,rank,"localElem");
290  treeNodesTovtk(ghostElem,rank,"ghostElem");*/
291 
292  ot::TreeNode blkNode;
293  double pt_min[3];
294  double pt_max[3];
295  unsigned int regLev;
296  unsigned int lx,ly,lz;
297  unsigned int hx,hy,hz;
298  const unsigned int pW=3;
299  unsigned int bflag;
300  unsigned int offset;
301  unsigned int ib,ie,jb,je,kb,ke;
302  double x,y,z;
303  bool valid=true;
304 
305  for(unsigned int blk=0;blk<blkList.size();blk++)
306  {
307 
308  blkNode=blkList[blk].getBlockNode();
309  regLev=blkList[blk].getRegularGridLev();
310  lx=blkList[blk].getAllocationSzX();
311  ly=blkList[blk].getAllocationSzY();
312  lz=blkList[blk].getAllocationSzZ();
313 
314  hx=blkList[blk].computeGridDx();
315  hy=blkList[blk].computeGridDy();
316  hz=blkList[blk].computeGridDz();
317 
318  bflag=blkList[blk].getBlkNodeFlag();
319  offset=blkList[blk].getOffset();
320 
321  pt_min[0]=(double)blkNode.minX()-pW*hx;
322  pt_min[1]=(double)blkNode.minY()-pW*hy;
323  pt_min[2]=(double)blkNode.minZ()-pW*hz;
324 
325  pt_max[0]=(double)blkNode.maxX()+pW*hx;
326  pt_max[1]=(double)blkNode.maxY()+pW*hy;
327  pt_max[2]=(double)blkNode.maxZ()+pW*hz;
328 
329  ib=pW;
330  ie=lx-pW;
331 
332  jb=pW;
333  je=ly-pW;
334 
335  kb=pW;
336  ke=lz-pW;
337 
338  for(unsigned int k=kb; k < ke; k++)
339  for(unsigned int j=jb;j < je; j++)
340  for(unsigned int i=ib;i < ie; i++)
341  {
342  x=pt_min[0]+i*hx;
343  y=pt_min[1]+j*hy;
344  z=pt_min[2]+k*hz;
345 
346  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
347  {
348  valid=false;
349  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[internal] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
350  }
351 
352 
353  }
354 
355 
356 
357  if(!(bflag & (1u<<OCT_DIR_LEFT)))
358  {
359  ib=1;
360  ie=pW;
361  jb=pW;
362  je=ly-pW;
363  kb=pW;
364  ke=lz-pW;
365 
366  for(unsigned int k=kb; k<ke; k++)
367  for(unsigned int j=jb;j<je; j++)
368  for(unsigned int i=ib;i<ie; i++)
369  {
370  x=pt_min[0]+i*hx;
371  y=pt_min[1]+j*hy;
372  z=pt_min[2]+k*hz;
373 
374  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
375  {
376  valid=false;
377  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
378  }
379 
380 
381  }
382 
383  if(!(bflag & (1u<<OCT_DIR_DOWN)))
384  {
385  ib=1;
386  ie=pW;
387  jb=1;
388  je=pW;
389  kb=pW;
390  ke=lz-pW;
391 
392  for(unsigned int k=kb; k<ke; k++)
393  for(unsigned int j=jb;j<je; j++)
394  for(unsigned int i=ib;i<ie; i++)
395  {
396  x=pt_min[0]+i*hx;
397  y=pt_min[1]+j*hy;
398  z=pt_min[2]+k*hz;
399 
400  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
401  {
402  valid=false;
403  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_DOWN] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
404  }
405 
406 
407  }
408 
409 
410 
411  if(!(bflag & (1u<<OCT_DIR_BACK)))
412  {
413 
414  ib=1;
415  ie=pW;
416  jb=1;
417  je=pW;
418  kb=1;
419  ke=pW;
420 
421  for(unsigned int k=kb; k<ke; k++)
422  for(unsigned int j=jb;j<je; j++)
423  for(unsigned int i=ib;i<ie; i++)
424  {
425  x=pt_min[0]+i*hx;
426  y=pt_min[1]+j*hy;
427  z=pt_min[2]+k*hz;
428 
429  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
430  {
431  valid=false;
432  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_DOWN_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
433  }
434 
435 
436  }
437 
438 
439  }
440 
441 
442 
443  if(!(bflag & (1u<<OCT_DIR_FRONT)))
444  {
445 
446  ib=1;
447  ie=pW;
448  jb=1;
449  je=pW;
450  kb=lz-pW;
451  ke=lz-1;
452 
453  for(unsigned int k=kb; k<ke; k++)
454  for(unsigned int j=jb;j<je; j++)
455  for(unsigned int i=ib;i<ie; i++)
456  {
457  x=pt_min[0]+i*hx;
458  y=pt_min[1]+j*hy;
459  z=pt_min[2]+k*hz;
460 
461  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
462  {
463  valid=false;
464  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_DOWN_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
465  }
466 
467 
468  }
469 
470 
471  }
472 
473 
474 
475  }
476 
477  if(!(bflag & (1u<<OCT_DIR_UP)))
478  {
479  ib=1;
480  ie=pW;
481  jb=ly-pW;
482  je=ly-1;
483  kb=pW;
484  ke=lz-pW;
485 
486  for(unsigned int k=kb; k<ke; k++)
487  for(unsigned int j=jb;j<je; j++)
488  for(unsigned int i=ib;i<ie; i++)
489  {
490  x=pt_min[0]+i*hx;
491  y=pt_min[1]+j*hy;
492  z=pt_min[2]+k*hz;
493 
494  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
495  {
496  valid=false;
497  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_UP] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
498  }
499 
500 
501  }
502 
503 
504 
505 
506  if(!(bflag & (1u<<OCT_DIR_BACK)))
507  {
508 
509  ib=1;
510  ie=pW;
511  jb=ly-pW;
512  je=ly-1;
513  kb=1;
514  ke=pW;
515 
516  for(unsigned int k=kb; k<ke; k++)
517  for(unsigned int j=jb;j<je; j++)
518  for(unsigned int i=ib;i<ie; i++)
519  {
520  x=pt_min[0]+i*hx;
521  y=pt_min[1]+j*hy;
522  z=pt_min[2]+k*hz;
523 
524  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
525  {
526  valid=false;
527  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_UP_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
528  }
529 
530 
531  }
532 
533 
534  }
535 
536 
537  if(!(bflag & (1u<<OCT_DIR_FRONT)))
538  {
539 
540  ib=1;
541  ie=pW;
542  jb=ly-pW;
543  je=ly-1;
544  kb=lz-pW;
545  ke=lz-1;
546 
547  for(unsigned int k=kb; k<ke; k++)
548  for(unsigned int j=jb;j<je; j++)
549  for(unsigned int i=ib;i<ie; i++)
550  {
551  x=pt_min[0]+i*hx;
552  y=pt_min[1]+j*hy;
553  z=pt_min[2]+k*hz;
554 
555  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
556  {
557  valid=false;
558  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_UP_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
559  }
560 
561 
562  }
563 
564 
565  }
566 
567 
568 
569 
570  }
571 
572 
573  if(!(bflag & (1u<<OCT_DIR_BACK)))
574  {
575  ib=1;
576  ie=pW;
577  jb=pW;
578  je=ly-pW;
579  kb=1;
580  ke=pW;
581 
582  for(unsigned int k=kb; k<ke; k++)
583  for(unsigned int j=jb;j<je; j++)
584  for(unsigned int i=ib;i<ie; i++)
585  {
586  x=pt_min[0]+i*hx;
587  y=pt_min[1]+j*hy;
588  z=pt_min[2]+k*hz;
589 
590  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
591  {
592  valid=false;
593  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<" x: "<<x<<" y: "<<y<<" z: "<<z<<std::endl;
594  }
595 
596 
597 
598 
599  }
600 
601  }
602 
603 
604  if(!(bflag & (1u<<OCT_DIR_FRONT)))
605  {
606  ib=1;
607  ie=pW;
608  jb=pW;
609  je=ly-pW;
610 
611  kb=lz-pW;
612  ke=lz-1;
613 
614  for(unsigned int k=kb; k<ke; k++)
615  for(unsigned int j=jb;j<je; j++)
616  for(unsigned int i=ib;i<ie; i++)
617  {
618  x=pt_min[0]+i*hx;
619  y=pt_min[1]+j*hy;
620  z=pt_min[2]+k*hz;
621 
622  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
623  {
624  valid=false;
625  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[LEFT_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
626  }
627 
628 
629  }
630 
631  }
632 
633 
634 
635 
636  }
637 
638 
639  if(!(bflag & (1u<<OCT_DIR_RIGHT)))
640  {
641 
642 
643  ib=lx-pW;
644  ie=lx-1;
645  jb=pW;
646  je=ly-pW;
647  kb=pW;
648  ke=lz-pW;
649 
650  for(unsigned int k=kb; k<ke; k++)
651  for(unsigned int j=jb;j<je; j++)
652  for(unsigned int i=ib;i<ie; i++)
653  {
654  x=pt_min[0]+i*hx;
655  y=pt_min[1]+j*hy;
656  z=pt_min[2]+k*hz;
657 
658  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
659  {
660  valid=false;
661  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
662  }
663 
664 
665  }
666 
667 
668 
669  if(!(bflag & (1u<<OCT_DIR_DOWN)))
670  {
671  ib=lx-pW;
672  ie=lx-1;
673  jb=1;
674  je=pW;
675  kb=pW;
676  ke=lz-pW;
677 
678  for(unsigned int k=kb; k<ke; k++)
679  for(unsigned int j=jb;j<je; j++)
680  for(unsigned int i=ib;i<ie; i++)
681  {
682  x=pt_min[0]+i*hx;
683  y=pt_min[1]+j*hy;
684  z=pt_min[2]+k*hz;
685 
686  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
687  {
688  valid=false;
689  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_DOWN] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
690  }
691 
692 
693  }
694 
695 
696 
697 
698 
699  if(!(bflag & (1u<<OCT_DIR_BACK)))
700  {
701  ib=lx-pW;
702  ie=lx-1;
703  jb=1;
704  je=pW;
705  kb=1;
706  ke=pW;
707 
708  for(unsigned int k=kb; k<ke; k++)
709  for(unsigned int j=jb;j<je; j++)
710  for(unsigned int i=ib;i<ie; i++)
711  {
712  x=pt_min[0]+i*hx;
713  y=pt_min[1]+j*hy;
714  z=pt_min[2]+k*hz;
715 
716  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
717  {
718  valid=false;
719  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_DOWN_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
720  }
721 
722 
723  }
724 
725  }
726 
727  if(!(bflag & (1u<<OCT_DIR_FRONT)))
728  {
729  ib=lx-pW;
730  ie=lx-1;
731  jb=1;
732  je=pW;
733  kb=lz-pW;
734  ke=lz-1;
735 
736  for(unsigned int k=kb; k<ke; k++)
737  for(unsigned int j=jb;j<je; j++)
738  for(unsigned int i=ib;i<ie; i++)
739  {
740  x=pt_min[0]+i*hx;
741  y=pt_min[1]+j*hy;
742  z=pt_min[2]+k*hz;
743 
744  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
745  {
746  valid=false;
747  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_DOWN_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
748  }
749 
750 
751  }
752 
753  }
754 
755 
756 
757  }
758 
759  if(!(bflag & (1u<<OCT_DIR_UP)))
760  {
761  ib=lx-pW;
762  ie=lx-1;
763  jb=ly-pW;
764  je=ly-1;
765  kb=pW;
766  ke=lz-pW;
767 
768  for(unsigned int k=kb; k<ke; k++)
769  for(unsigned int j=jb;j<je; j++)
770  for(unsigned int i=ib;i<ie; i++)
771  {
772  x=pt_min[0]+i*hx;
773  y=pt_min[1]+j*hy;
774  z=pt_min[2]+k*hz;
775 
776  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
777  {
778  valid=false;
779  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_UP] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
780  }
781 
782 
783  }
784 
785 
786  if(!(bflag & (1u<<OCT_DIR_BACK)))
787  {
788  ib=lx-pW;
789  ie=lx-1;
790  jb=ly-pW;
791  je=ly-1;
792  kb=1;
793  ke=pW;
794 
795  for(unsigned int k=kb; k<ke; k++)
796  for(unsigned int j=jb;j<je; j++)
797  for(unsigned int i=ib;i<ie; i++)
798  {
799  x=pt_min[0]+i*hx;
800  y=pt_min[1]+j*hy;
801  z=pt_min[2]+k*hz;
802 
803  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
804  {
805  valid=false;
806  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_UP_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
807  }
808 
809 
810  }
811 
812  }
813 
814  if(!(bflag & (1u<<OCT_DIR_FRONT)))
815  {
816  ib=lx-pW;
817  ie=lx-1;
818  jb=ly-pW;
819  je=ly-1;
820  kb=lz-pW;
821  ke=lz-1;
822 
823  for(unsigned int k=kb; k<ke; k++)
824  for(unsigned int j=jb;j<je; j++)
825  for(unsigned int i=ib;i<ie; i++)
826  {
827  x=pt_min[0]+i*hx;
828  y=pt_min[1]+j*hy;
829  z=pt_min[2]+k*hz;
830 
831  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
832  {
833  valid=false;
834  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_UP_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
835  }
836 
837 
838  }
839 
840  }
841 
842 
843  }
844 
845 
846  if(!(bflag & (1u<<OCT_DIR_BACK)))
847  {
848  ib=lx-pW;
849  ie=lx-1;
850  jb=pW;
851  je=ly-pW;
852  kb=1;
853  ke=pW;
854 
855  for(unsigned int k=kb; k<ke; k++)
856  for(unsigned int j=jb;j<je; j++)
857  for(unsigned int i=ib;i<ie; i++)
858  {
859  x=pt_min[0]+i*hx;
860  y=pt_min[1]+j*hy;
861  z=pt_min[2]+k*hz;
862 
863  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
864  {
865  valid=false;
866  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<" x: "<<x<<" y: "<<y<<" z: "<<z<<std::endl;
867  }
868 
869 
870 
871 
872  }
873 
874  }
875 
876 
877  if(!(bflag & (1u<<OCT_DIR_FRONT)))
878  {
879  ib=lx-pW;
880  ie=lx-1;
881  jb=pW;
882  je=ly-pW;
883 
884  kb=lz-pW;
885  ke=lz-1;
886 
887  for(unsigned int k=kb; k<ke; k++)
888  for(unsigned int j=jb;j<je; j++)
889  for(unsigned int i=ib;i<ie; i++)
890  {
891  x=pt_min[0]+i*hx;
892  y=pt_min[1]+j*hy;
893  z=pt_min[2]+k*hz;
894 
895  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
896  {
897  valid=false;
898  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[RIGHT_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
899  }
900 
901 
902  }
903 
904  }
905 
906 
907 
908 
909 
910 
911 
912  }
913 
914 
915  if(!(bflag & (1u<<OCT_DIR_DOWN)))
916  {
917 
918 
919  ib=pW;
920  ie=lx-pW;
921  jb=1;
922  je=pW;
923  kb=pW;
924  ke=lz-pW;
925 
926  for(unsigned int k=kb; k<ke; k++)
927  for(unsigned int j=jb;j<je; j++)
928  for(unsigned int i=ib;i<ie; i++)
929  {
930  x=pt_min[0]+i*hx;
931  y=pt_min[1]+j*hy;
932  z=pt_min[2]+k*hz;
933 
934  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
935  {
936  valid=false;
937  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[DOWN] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
938  }
939 
940 
941  }
942 
943 
944 
945  if(!(bflag & (1u<<OCT_DIR_BACK)))
946  {
947  ib=pW;
948  ie=lx-pW;
949  jb=1;
950  je=pW;
951  kb=1;
952  ke=pW;
953 
954  for(unsigned int k=kb; k<ke; k++)
955  for(unsigned int j=jb;j<je; j++)
956  for(unsigned int i=ib;i<ie; i++)
957  {
958  x=pt_min[0]+i*hx;
959  y=pt_min[1]+j*hy;
960  z=pt_min[2]+k*hz;
961 
962  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
963  {
964  valid=false;
965  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[DOWN_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<" x: "<<x<<" y: "<<y<<" z: "<<z<<std::endl;
966  }
967 
968 
969 
970 
971  }
972 
973  }
974 
975 
976  if(!(bflag & (1u<<OCT_DIR_FRONT)))
977  {
978  ib=pW;
979  ie=lx-pW;
980  jb=1;
981  je=pW;
982 
983  kb=lz-pW;
984  ke=lz-1;
985 
986  for(unsigned int k=kb; k<ke; k++)
987  for(unsigned int j=jb;j<je; j++)
988  for(unsigned int i=ib;i<ie; i++)
989  {
990  x=pt_min[0]+i*hx;
991  y=pt_min[1]+j*hy;
992  z=pt_min[2]+k*hz;
993 
994  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
995  {
996  valid=false;
997  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[DOWN_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
998  }
999 
1000 
1001  }
1002 
1003  }
1004 
1005 
1006 
1007  }
1008 
1009 
1010  if(!(bflag & (1u<<OCT_DIR_UP)))
1011  {
1012 
1013 
1014  ib=pW;
1015  ie=lx-pW;
1016  jb=ly-pW;
1017  je=ly-1;
1018  kb=pW;
1019  ke=lz-pW;
1020 
1021  for(unsigned int k=kb; k<ke; k++)
1022  for(unsigned int j=jb;j<je; j++)
1023  for(unsigned int i=ib;i<ie; i++)
1024  {
1025  x=pt_min[0]+i*hx;
1026  y=pt_min[1]+j*hy;
1027  z=pt_min[2]+k*hz;
1028 
1029  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
1030  {
1031  valid=false;
1032  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[UP] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1033  }
1034 
1035 
1036  }
1037 
1038 
1039 
1040  if(!(bflag & (1u<<OCT_DIR_BACK)))
1041  {
1042  ib=pW;
1043  ie=lx-pW;
1044  jb=ly-pW;
1045  je=ly-1;
1046  kb=1;
1047  ke=pW;
1048 
1049  for(unsigned int k=kb; k<ke; k++)
1050  for(unsigned int j=jb;j<je; j++)
1051  for(unsigned int i=ib;i<ie; i++)
1052  {
1053  x=pt_min[0]+i*hx;
1054  y=pt_min[1]+j*hy;
1055  z=pt_min[2]+k*hz;
1056 
1057  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
1058  {
1059  valid=false;
1060  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[UP_BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<" x: "<<x<<" y: "<<y<<" z: "<<z<<std::endl;
1061  }
1062 
1063 
1064 
1065 
1066  }
1067 
1068  }
1069 
1070 
1071  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1072  {
1073  ib=pW;
1074  ie=lx-pW;
1075  jb=ly-pW;
1076  je=ly-1;
1077 
1078  kb=lz-pW;
1079  ke=lz-1;
1080 
1081  for(unsigned int k=kb; k<ke; k++)
1082  for(unsigned int j=jb;j<je; j++)
1083  for(unsigned int i=ib;i<ie; i++)
1084  {
1085  x=pt_min[0]+i*hx;
1086  y=pt_min[1]+j*hy;
1087  z=pt_min[2]+k*hz;
1088 
1089  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
1090  {
1091  valid=false;
1092  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[UP_FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1093  }
1094 
1095 
1096  }
1097 
1098  }
1099 
1100 
1101 
1102  }
1103 
1104 
1105  if(!(bflag & (1u<<OCT_DIR_BACK)))
1106  {
1107 
1108 
1109  ib=pW;
1110  ie=lx-pW;
1111  jb=pW;
1112  je=ly-pW;
1113  kb=1;
1114  ke=pW;
1115 
1116  for(unsigned int k=kb; k<ke; k++)
1117  for(unsigned int j=jb;j<je; j++)
1118  for(unsigned int i=ib;i<ie; i++)
1119  {
1120  x=pt_min[0]+i*hx;
1121  y=pt_min[1]+j*hy;
1122  z=pt_min[2]+k*hz;
1123 
1124  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
1125  {
1126  valid=false;
1127  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[BACK] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1128  }
1129 
1130 
1131  }
1132 
1133  }
1134 
1135 
1136  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1137  {
1138 
1139 
1140  ib=pW;
1141  ie=lx-pW;
1142  jb=pW;
1143  je=ly-pW;
1144  kb=lz-pW;
1145  ke=lz-1;
1146 
1147  for(unsigned int k=kb; k<ke; k++)
1148  for(unsigned int j=jb;j<je; j++)
1149  for(unsigned int i=ib;i<ie; i++)
1150  {
1151  x=pt_min[0]+i*hx;
1152  y=pt_min[1]+j*hy;
1153  z=pt_min[2]+k*hz;
1154 
1155  if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
1156  {
1157  valid=false;
1158  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[FRONT] unzip error : unzip value: "<<unzipVec[offset+k*ly*lx+j*lx+i]<<"\t func(x,y,z): "<<fn(x,y,z)<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1159  }
1160 
1161 
1162  }
1163 
1164  }
1165 
1166 
1167 
1168 
1169  }
1170 
1171 
1172 
1173  return valid;
1174 
1175 
1176 
1177 }
1178 
1179 
1180 template <typename T>
1181 bool ot::test::isUnzipNaN(ot::Mesh* pMesh, T* unzipVec)
1182 {
1183 
1184  if(!(pMesh->isActive())) return false;
1185 
1186  const int rank =pMesh->getMPIRank();
1187  const std::vector<ot::TreeNode> pNodes=pMesh->getAllElements();
1188  const std::vector<ot::Block> blkList=pMesh->getLocalBlockList();
1189 
1190  /*std::vector<ot::TreeNode> localElem;
1191  std::vector<ot::TreeNode> ghostElem;
1192  std::vector<ot::TreeNode> debugBlocks;
1193 
1194  for(unsigned int e=0;e<pNodes.size();e++)
1195  {
1196  if(e>=lBegin && e< lEnd)
1197  localElem.push_back(pNodes[e]);
1198  else
1199  ghostElem.push_back(pNodes[e]);
1200 
1201  }
1202 
1203 
1204  treeNodesTovtk(localElem,rank,"localElem");
1205  treeNodesTovtk(ghostElem,rank,"ghostElem");*/
1206 
1207  ot::TreeNode blkNode;
1208  double pt_min[3];
1209  double pt_max[3];
1210  unsigned int regLev;
1211  unsigned int lx,ly,lz;
1212  unsigned int hx,hy,hz;
1213  const unsigned int pW=3;
1214  unsigned int bflag;
1215  unsigned int offset;
1216  unsigned int ib,ie,jb,je,kb,ke;
1217  double x,y,z;
1218  bool valid=true;
1219 
1220  for(unsigned int blk=0;blk<blkList.size();blk++)
1221  {
1222 
1223  blkNode=blkList[blk].getBlockNode();
1224  regLev=blkList[blk].getRegularGridLev();
1225  lx=blkList[blk].getAllocationSzX();
1226  ly=blkList[blk].getAllocationSzY();
1227  lz=blkList[blk].getAllocationSzZ();
1228 
1229  hx=blkList[blk].computeGridDx();
1230  hy=blkList[blk].computeGridDy();
1231  hz=blkList[blk].computeGridDz();
1232 
1233  bflag=blkList[blk].getBlkNodeFlag();
1234  offset=blkList[blk].getOffset();
1235 
1236  pt_min[0]=(double)blkNode.minX()-pW*hx;
1237  pt_min[1]=(double)blkNode.minY()-pW*hy;
1238  pt_min[2]=(double)blkNode.minZ()-pW*hz;
1239 
1240  pt_max[0]=(double)blkNode.maxX()+pW*hx;
1241  pt_max[1]=(double)blkNode.maxY()+pW*hy;
1242  pt_max[2]=(double)blkNode.maxZ()+pW*hz;
1243 
1244  ib=pW;
1245  ie=lx-pW;
1246 
1247  jb=pW;
1248  je=ly-pW;
1249 
1250  kb=pW;
1251  ke=lz-pW;
1252 
1253  for(unsigned int k=kb; k < ke; k++)
1254  for(unsigned int j=jb;j < je; j++)
1255  for(unsigned int i=ib;i < ie; i++)
1256  {
1257  x=pt_min[0]+i*hx;
1258  y=pt_min[1]+j*hy;
1259  z=pt_min[2]+k*hz;
1260 
1261  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1262  {
1263  valid=false;
1264  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[internal] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1265  }
1266 
1267 
1268  }
1269 
1270 
1271 
1272  if(!(bflag & (1u<<OCT_DIR_LEFT)))
1273  {
1274  ib=0;
1275  ie=pW;
1276  jb=pW;
1277  je=ly-pW;
1278  kb=pW;
1279  ke=lz-pW;
1280 
1281  for(unsigned int k=kb; k<ke; k++)
1282  for(unsigned int j=jb;j<je; j++)
1283  for(unsigned int i=ib;i<ie; i++)
1284  {
1285  x=pt_min[0]+i*hx;
1286  y=pt_min[1]+j*hy;
1287  z=pt_min[2]+k*hz;
1288 
1289  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1290  {
1291  valid=false;
1292  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1293  }
1294 
1295 
1296  }
1297 
1298  if(!(bflag & (1u<<OCT_DIR_DOWN)))
1299  {
1300  ib=1;
1301  ie=pW;
1302  jb=1;
1303  je=pW;
1304  kb=pW;
1305  ke=lz-pW;
1306 
1307  for(unsigned int k=kb; k<ke; k++)
1308  for(unsigned int j=jb;j<je; j++)
1309  for(unsigned int i=ib;i<ie; i++)
1310  {
1311  x=pt_min[0]+i*hx;
1312  y=pt_min[1]+j*hy;
1313  z=pt_min[2]+k*hz;
1314 
1315  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1316  {
1317  valid=false;
1318  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_down] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1319  }
1320 
1321 
1322  }
1323 
1324 
1325 
1326  if(!(bflag & (1u<<OCT_DIR_BACK)))
1327  {
1328  ib=1;
1329  ie=pW;
1330  jb=1;
1331  je=pW;
1332  kb=1;
1333  ke=pW;
1334 
1335  for(unsigned int k=kb; k<ke; k++)
1336  for(unsigned int j=jb;j<je; j++)
1337  for(unsigned int i=ib;i<ie; i++)
1338  {
1339  x=pt_min[0]+i*hx;
1340  y=pt_min[1]+j*hy;
1341  z=pt_min[2]+k*hz;
1342 
1343  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1344  {
1345  valid=false;
1346  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_down_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1347  }
1348 
1349 
1350  }
1351 
1352  }
1353 
1354 
1355  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1356  {
1357  ib=1;
1358  ie=pW;
1359  jb=1;
1360  je=pW;
1361  kb=lz-pW;
1362  ke=lz-1;
1363 
1364  for(unsigned int k=kb; k<ke; k++)
1365  for(unsigned int j=jb;j<je; j++)
1366  for(unsigned int i=ib;i<ie; i++)
1367  {
1368  x=pt_min[0]+i*hx;
1369  y=pt_min[1]+j*hy;
1370  z=pt_min[2]+k*hz;
1371 
1372  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1373  {
1374  valid=false;
1375  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_down_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1376  }
1377 
1378 
1379  }
1380 
1381  }
1382 
1383 
1384 
1385 
1386  }
1387 
1388  if(!(bflag & (1u<<OCT_DIR_UP)))
1389  {
1390  ib=1;
1391  ie=pW;
1392  jb=ly-pW;
1393  je=ly-1;
1394  kb=pW;
1395  ke=lz-pW;
1396 
1397  for(unsigned int k=kb; k<ke; k++)
1398  for(unsigned int j=jb;j<je; j++)
1399  for(unsigned int i=ib;i<ie; i++)
1400  {
1401  x=pt_min[0]+i*hx;
1402  y=pt_min[1]+j*hy;
1403  z=pt_min[2]+k*hz;
1404 
1405  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1406  {
1407  valid=false;
1408  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_up] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1409  }
1410 
1411 
1412  }
1413 
1414 
1415  if(!(bflag & (1u<<OCT_DIR_BACK)))
1416  {
1417  ib=1;
1418  ie=pW;
1419  jb=ly-pW;
1420  je=ly-1;
1421  kb=1;
1422  ke=pW;
1423 
1424  for(unsigned int k=kb; k<ke; k++)
1425  for(unsigned int j=jb;j<je; j++)
1426  for(unsigned int i=ib;i<ie; i++)
1427  {
1428  x=pt_min[0]+i*hx;
1429  y=pt_min[1]+j*hy;
1430  z=pt_min[2]+k*hz;
1431 
1432  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1433  {
1434  valid=false;
1435  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_up_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1436  }
1437 
1438 
1439  }
1440 
1441  }
1442 
1443 
1444  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1445  {
1446  ib=1;
1447  ie=pW;
1448  jb=ly-pW;
1449  je=ly-1;
1450  kb=lz-pW;
1451  ke=lz-1;
1452 
1453  for(unsigned int k=kb; k<ke; k++)
1454  for(unsigned int j=jb;j<je; j++)
1455  for(unsigned int i=ib;i<ie; i++)
1456  {
1457  x=pt_min[0]+i*hx;
1458  y=pt_min[1]+j*hy;
1459  z=pt_min[2]+k*hz;
1460 
1461  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1462  {
1463  valid=false;
1464  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_up_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1465  }
1466 
1467 
1468  }
1469 
1470  }
1471 
1472 
1473 
1474 
1475  }
1476 
1477 
1478  if(!(bflag & (1u<<OCT_DIR_BACK)))
1479  {
1480  ib=1;
1481  ie=pW;
1482  jb=pW;
1483  je=ly-pW;
1484  kb=1;
1485  ke=pW;
1486 
1487  for(unsigned int k=kb; k<ke; k++)
1488  for(unsigned int j=jb;j<je; j++)
1489  for(unsigned int i=ib;i<ie; i++)
1490  {
1491  x=pt_min[0]+i*hx;
1492  y=pt_min[1]+j*hy;
1493  z=pt_min[2]+k*hz;
1494 
1495  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1496  {
1497  valid=false;
1498  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1499  }
1500 
1501 
1502 
1503 
1504  }
1505 
1506  }
1507 
1508 
1509  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1510  {
1511  ib=1;
1512  ie=pW;
1513  jb=pW;
1514  je=ly-pW;
1515 
1516  kb=lz-pW;
1517  ke=lz-1;
1518 
1519  for(unsigned int k=kb; k<ke; k++)
1520  for(unsigned int j=jb;j<je; j++)
1521  for(unsigned int i=ib;i<ie; i++)
1522  {
1523  x=pt_min[0]+i*hx;
1524  y=pt_min[1]+j*hy;
1525  z=pt_min[2]+k*hz;
1526 
1527  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1528  {
1529  valid=false;
1530  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[left_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1531  }
1532 
1533  }
1534 
1535  }
1536 
1537 
1538 
1539 
1540  }
1541 
1542 
1543  if(!(bflag & (1u<<OCT_DIR_RIGHT)))
1544  {
1545 
1546 
1547  ib=lx-pW;
1548  ie=lx;
1549  jb=pW;
1550  je=ly-pW;
1551  kb=pW;
1552  ke=lz-pW;
1553 
1554  for(unsigned int k=kb; k<ke; k++)
1555  for(unsigned int j=jb;j<je; j++)
1556  for(unsigned int i=ib;i<ie; i++)
1557  {
1558  x=pt_min[0]+i*hx;
1559  y=pt_min[1]+j*hy;
1560  z=pt_min[2]+k*hz;
1561 
1562  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1563  {
1564  valid=false;
1565  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1566  }
1567 
1568 
1569  }
1570 
1571 
1572 
1573  if(!(bflag & (1u<<OCT_DIR_DOWN)))
1574  {
1575  ib=lx-pW;
1576  ie=lx-1;
1577  jb=1;
1578  je=pW;
1579  kb=pW;
1580  ke=lz-pW;
1581 
1582  for(unsigned int k=kb; k<ke; k++)
1583  for(unsigned int j=jb;j<je; j++)
1584  for(unsigned int i=ib;i<ie; i++)
1585  {
1586  x=pt_min[0]+i*hx;
1587  y=pt_min[1]+j*hy;
1588  z=pt_min[2]+k*hz;
1589 
1590  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1591  {
1592  valid=false;
1593  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_down] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1594  }
1595 
1596 
1597  }
1598 
1599 
1600 
1601  if(!(bflag & (1u<<OCT_DIR_BACK)))
1602  {
1603  ib=lx-pW;
1604  ie=lx-1;
1605  jb=1;
1606  je=pW;
1607  kb=1;
1608  ke=pW;
1609 
1610  for(unsigned int k=kb; k<ke; k++)
1611  for(unsigned int j=jb;j<je; j++)
1612  for(unsigned int i=ib;i<ie; i++)
1613  {
1614  x=pt_min[0]+i*hx;
1615  y=pt_min[1]+j*hy;
1616  z=pt_min[2]+k*hz;
1617 
1618  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1619  {
1620  valid=false;
1621  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_down_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1622  }
1623 
1624 
1625  }
1626 
1627  }
1628 
1629 
1630  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1631  {
1632  ib=lx-pW;
1633  ie=lx-1;
1634  jb=1;
1635  je=pW;
1636  kb=lz-pW;
1637  ke=lz-1;
1638 
1639  for(unsigned int k=kb; k<ke; k++)
1640  for(unsigned int j=jb;j<je; j++)
1641  for(unsigned int i=ib;i<ie; i++)
1642  {
1643  x=pt_min[0]+i*hx;
1644  y=pt_min[1]+j*hy;
1645  z=pt_min[2]+k*hz;
1646 
1647  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1648  {
1649  valid=false;
1650  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_down_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1651  }
1652 
1653 
1654  }
1655 
1656  }
1657 
1658 
1659 
1660  }
1661 
1662  if(!(bflag & (1u<<OCT_DIR_UP)))
1663  {
1664  ib=lx-pW;
1665  ie=lx-1;
1666  jb=ly-pW;
1667  je=ly-1;
1668  kb=pW;
1669  ke=lz-pW;
1670 
1671  for(unsigned int k=kb; k<ke; k++)
1672  for(unsigned int j=jb;j<je; j++)
1673  for(unsigned int i=ib;i<ie; i++)
1674  {
1675  x=pt_min[0]+i*hx;
1676  y=pt_min[1]+j*hy;
1677  z=pt_min[2]+k*hz;
1678 
1679  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1680  {
1681  valid=false;
1682  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_up] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1683  }
1684 
1685 
1686  }
1687 
1688 
1689 
1690  if(!(bflag & (1u<<OCT_DIR_BACK)))
1691  {
1692  ib=lx-pW;
1693  ie=lx-1;
1694  jb=ly-pW;
1695  je=ly-1;
1696  kb=1;
1697  ke=pW;
1698 
1699  for(unsigned int k=kb; k<ke; k++)
1700  for(unsigned int j=jb;j<je; j++)
1701  for(unsigned int i=ib;i<ie; i++)
1702  {
1703  x=pt_min[0]+i*hx;
1704  y=pt_min[1]+j*hy;
1705  z=pt_min[2]+k*hz;
1706 
1707  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1708  {
1709  valid=false;
1710  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_up_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1711  }
1712 
1713 
1714  }
1715 
1716  }
1717 
1718 
1719  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1720  {
1721  ib=lx-pW;
1722  ie=lx-1;
1723  jb=ly-pW;
1724  je=ly-1;
1725  kb=lz-pW;
1726  ke=lz-1;
1727 
1728  for(unsigned int k=kb; k<ke; k++)
1729  for(unsigned int j=jb;j<je; j++)
1730  for(unsigned int i=ib;i<ie; i++)
1731  {
1732  x=pt_min[0]+i*hx;
1733  y=pt_min[1]+j*hy;
1734  z=pt_min[2]+k*hz;
1735 
1736  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1737  {
1738  valid=false;
1739  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_up_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1740  }
1741 
1742 
1743  }
1744 
1745  }
1746 
1747 
1748 
1749  }
1750 
1751 
1752  if(!(bflag & (1u<<OCT_DIR_BACK)))
1753  {
1754  ib=lx-pW;
1755  ie=lx-1;
1756  jb=pW;
1757  je=ly-pW;
1758  kb=1;
1759  ke=pW;
1760 
1761  for(unsigned int k=kb; k<ke; k++)
1762  for(unsigned int j=jb;j<je; j++)
1763  for(unsigned int i=ib;i<ie; i++)
1764  {
1765  x=pt_min[0]+i*hx;
1766  y=pt_min[1]+j*hy;
1767  z=pt_min[2]+k*hz;
1768 
1769  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1770  {
1771  valid=false;
1772  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1773  }
1774 
1775 
1776 
1777 
1778  }
1779 
1780  }
1781 
1782 
1783  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1784  {
1785  ib=lx-pW;
1786  ie=lx-1;
1787  jb=pW;
1788  je=ly-pW;
1789 
1790  kb=lz-pW;
1791  ke=lz-1;
1792 
1793  for(unsigned int k=kb; k<ke; k++)
1794  for(unsigned int j=jb;j<je; j++)
1795  for(unsigned int i=ib;i<ie; i++)
1796  {
1797  x=pt_min[0]+i*hx;
1798  y=pt_min[1]+j*hy;
1799  z=pt_min[2]+k*hz;
1800 
1801  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1802  {
1803  valid=false;
1804  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[right_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1805  }
1806 
1807 
1808  }
1809 
1810  }
1811 
1812 
1813 
1814 
1815 
1816 
1817 
1818  }
1819 
1820 
1821  if(!(bflag & (1u<<OCT_DIR_DOWN)))
1822  {
1823 
1824 
1825  ib=pW;
1826  ie=lx-pW;
1827  jb=0;
1828  je=pW;
1829  kb=pW;
1830  ke=lz-pW;
1831 
1832  for(unsigned int k=kb; k<ke; k++)
1833  for(unsigned int j=jb;j<je; j++)
1834  for(unsigned int i=ib;i<ie; i++)
1835  {
1836  x=pt_min[0]+i*hx;
1837  y=pt_min[1]+j*hy;
1838  z=pt_min[2]+k*hz;
1839 
1840  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1841  {
1842  valid=false;
1843  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[down] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1844  }
1845 
1846 
1847  }
1848 
1849 
1850 
1851  if(!(bflag & (1u<<OCT_DIR_BACK)))
1852  {
1853  ib=pW;
1854  ie=lx-pW;
1855  jb=1;
1856  je=pW;
1857  kb=1;
1858  ke=pW;
1859 
1860  for(unsigned int k=kb; k<ke; k++)
1861  for(unsigned int j=jb;j<je; j++)
1862  for(unsigned int i=ib;i<ie; i++)
1863  {
1864  x=pt_min[0]+i*hx;
1865  y=pt_min[1]+j*hy;
1866  z=pt_min[2]+k*hz;
1867 
1868  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1869  {
1870  valid=false;
1871  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[down_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1872  }
1873 
1874 
1875 
1876 
1877  }
1878 
1879  }
1880 
1881 
1882  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1883  {
1884  ib=pW;
1885  ie=lx-pW;
1886  jb=1;
1887  je=pW;
1888 
1889  kb=lz-pW;
1890  ke=lz-1;
1891 
1892  for(unsigned int k=kb; k<ke; k++)
1893  for(unsigned int j=jb;j<je; j++)
1894  for(unsigned int i=ib;i<ie; i++)
1895  {
1896  x=pt_min[0]+i*hx;
1897  y=pt_min[1]+j*hy;
1898  z=pt_min[2]+k*hz;
1899 
1900  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1901  {
1902  valid=false;
1903  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[down_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1904  }
1905 
1906 
1907  }
1908 
1909  }
1910 
1911 
1912 
1913  }
1914 
1915 
1916  if(!(bflag & (1u<<OCT_DIR_UP)))
1917  {
1918 
1919 
1920  ib=pW;
1921  ie=lx-pW;
1922  jb=ly-pW;
1923  je=ly;
1924  kb=pW;
1925  ke=lz-pW;
1926 
1927  for(unsigned int k=kb; k<ke; k++)
1928  for(unsigned int j=jb;j<je; j++)
1929  for(unsigned int i=ib;i<ie; i++)
1930  {
1931  x=pt_min[0]+i*hx;
1932  y=pt_min[1]+j*hy;
1933  z=pt_min[2]+k*hz;
1934 
1935  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1936  {
1937  valid=false;
1938  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[up] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1939  }
1940 
1941 
1942  }
1943 
1944 
1945 
1946  if(!(bflag & (1u<<OCT_DIR_BACK)))
1947  {
1948  ib=pW;
1949  ie=lx-pW;
1950  jb=ly-pW;
1951  je=ly-1;
1952  kb=1;
1953  ke=pW;
1954 
1955  for(unsigned int k=kb; k<ke; k++)
1956  for(unsigned int j=jb;j<je; j++)
1957  for(unsigned int i=ib;i<ie; i++)
1958  {
1959  x=pt_min[0]+i*hx;
1960  y=pt_min[1]+j*hy;
1961  z=pt_min[2]+k*hz;
1962 
1963  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1964  {
1965  valid=false;
1966  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[up_back] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1967  }
1968 
1969 
1970 
1971 
1972  }
1973 
1974  }
1975 
1976 
1977  if(!(bflag & (1u<<OCT_DIR_FRONT)))
1978  {
1979  ib=pW;
1980  ie=lx-pW;
1981  jb=ly-pW;
1982  je=ly-1;
1983 
1984  kb=lz-pW;
1985  ke=lz-1;
1986 
1987  for(unsigned int k=kb; k<ke; k++)
1988  for(unsigned int j=jb;j<je; j++)
1989  for(unsigned int i=ib;i<ie; i++)
1990  {
1991  x=pt_min[0]+i*hx;
1992  y=pt_min[1]+j*hy;
1993  z=pt_min[2]+k*hz;
1994 
1995  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1996  {
1997  valid=false;
1998  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[up_front] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
1999  }
2000 
2001 
2002  }
2003 
2004  }
2005 
2006 
2007 
2008  }
2009 
2010 
2011  if(!(bflag & (1u<<OCT_DIR_BACK)))
2012  {
2013 
2014 
2015  ib=pW;
2016  ie=lx-pW;
2017  jb=pW;
2018  je=ly-pW;
2019  kb=0;
2020  ke=pW;
2021 
2022  for(unsigned int k=kb; k<ke; k++)
2023  for(unsigned int j=jb;j<je; j++)
2024  for(unsigned int i=ib;i<ie; i++)
2025  {
2026  x=pt_min[0]+i*hx;
2027  y=pt_min[1]+j*hy;
2028  z=pt_min[2]+k*hz;
2029 
2030  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
2031  {
2032  valid=false;
2033  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[internal] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
2034  }
2035 
2036 
2037  }
2038 
2039  }
2040 
2041 
2042  if(!(bflag & (1u<<OCT_DIR_FRONT)))
2043  {
2044 
2045 
2046  ib=pW;
2047  ie=lx-pW;
2048  jb=pW;
2049  je=ly-pW;
2050  kb=lz-pW;
2051  ke=lz;
2052 
2053  for(unsigned int k=kb; k<ke; k++)
2054  for(unsigned int j=jb;j<je; j++)
2055  for(unsigned int i=ib;i<ie; i++)
2056  {
2057  x=pt_min[0]+i*hx;
2058  y=pt_min[1]+j*hy;
2059  z=pt_min[2]+k*hz;
2060 
2061  if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
2062  {
2063  valid=false;
2064  std::cout<<"rank: "<<rank<<"blk: "<<blkNode<<" block[internal] unzip error : unzip value: NAN "<<" (i,j,k): ("<<i<<", "<<j<<","<<k<<" )"<<"sz: "<<lx<<std::endl;
2065  }
2066 
2067 
2068  }
2069 
2070  }
2071 
2072 
2073 
2074 
2075  }
2076 
2077 
2078 
2079  return (!valid);
2080 
2081 }
2082 
2083 
2084 
2085 template <typename T>
2086 bool ot::test::isZipNAN(ot::Mesh* pMesh, T* zipVec)
2087 {
2088  const unsigned int nodeLocalBegin=pMesh->getNodeLocalBegin();
2089  const unsigned int nodeLocalEnd=pMesh->getNodeLocalEnd();
2090 
2091  const unsigned int activeRank=pMesh->getMPIRank();
2092 
2093  for(unsigned int i=nodeLocalBegin;i<nodeLocalEnd;i++)
2094  {
2095  if(std::isnan(zipVec[i]))
2096  {
2097  std::cout<<"rank: "<<activeRank<<" node local: "<<i<<" is nan"<<std::endl;
2098  assert(false);
2099  }
2100 
2101  }
2102 
2103  return true;
2104 
2105 }
2106 
2107 
2108 template <typename T>
2109 bool ot::test::isUnzipInternalNaN(ot::Mesh* pMesh, T* unzipVec)
2110 {
2111 
2112 
2113  if(!(pMesh->isActive())) return false;
2114 
2115  const int rank =pMesh->getMPIRank();
2116  const std::vector<ot::TreeNode> pNodes=pMesh->getAllElements();
2117  const std::vector<ot::Block> blkList=pMesh->getLocalBlockList();
2118 
2119  /*std::vector<ot::TreeNode> localElem;
2120  std::vector<ot::TreeNode> ghostElem;
2121  std::vector<ot::TreeNode> debugBlocks;
2122 
2123  for(unsigned int e=0;e<pNodes.size();e++)
2124  {
2125  if(e>=lBegin && e< lEnd)
2126  localElem.push_back(pNodes[e]);
2127  else
2128  ghostElem.push_back(pNodes[e]);
2129 
2130  }
2131 
2132 
2133  treeNodesTovtk(localElem,rank,"localElem");
2134  treeNodesTovtk(ghostElem,rank,"ghostElem");*/
2135 
2136  ot::TreeNode blkNode;
2137  double pt_min[3];
2138  double pt_max[3];
2139  unsigned int regLev;
2140  unsigned int lx,ly,lz;
2141  unsigned int hx,hy,hz;
2142  const unsigned int pW=3;
2143  unsigned int bflag;
2144  unsigned int offset;
2145  unsigned int ib,ie,jb,je,kb,ke;
2146  double x,y,z;
2147  bool valid=true;
2148 
2149  for(unsigned int blk=0;blk<blkList.size();blk++) {
2150 
2151  blkNode = blkList[blk].getBlockNode();
2152  regLev = blkList[blk].getRegularGridLev();
2153  lx = blkList[blk].getAllocationSzX();
2154  ly = blkList[blk].getAllocationSzY();
2155  lz = blkList[blk].getAllocationSzZ();
2156 
2157  hx = blkList[blk].computeGridDx();
2158  hy = blkList[blk].computeGridDy();
2159  hz = blkList[blk].computeGridDz();
2160 
2161  bflag = blkList[blk].getBlkNodeFlag();
2162  offset = blkList[blk].getOffset();
2163 
2164  pt_min[0] = (double) blkNode.minX() - pW * hx;
2165  pt_min[1] = (double) blkNode.minY() - pW * hy;
2166  pt_min[2] = (double) blkNode.minZ() - pW * hz;
2167 
2168  pt_max[0] = (double) blkNode.maxX() + pW * hx;
2169  pt_max[1] = (double) blkNode.maxY() + pW * hy;
2170  pt_max[2] = (double) blkNode.maxZ() + pW * hz;
2171 
2172  ib = pW;
2173  ie = lx - pW;
2174 
2175  jb = pW;
2176  je = ly - pW;
2177 
2178  kb = pW;
2179  ke = lz - pW;
2180 
2181  for (unsigned int k = kb; k < ke; k++)
2182  for (unsigned int j = jb; j < je; j++)
2183  for (unsigned int i = ib; i < ie; i++) {
2184  x = pt_min[0] + i * hx;
2185  y = pt_min[1] + j * hy;
2186  z = pt_min[2] + k * hz;
2187  if (std::isnan(unzipVec[offset + k * ly * lx + j * lx + i])) {
2188  valid = false;
2189  std::cout << "rank: " << rank << "blk: " << blkNode
2190  << " block[internal] unzip error : unzip value: NAN " << " (i,j,k): (" << i << ", "
2191  << j << "," << k << " )" << "sz: " << lx << std::endl;
2192  }
2193 
2194 
2195  }
2196 
2197  }
2198 
2199 
2200  return (!valid);
2201 
2202 }
2203 
2204 
2205 template<typename T>
2206 bool ot::test::isElementalContributionValid(ot::Mesh *pMesh, std::function<T(T,T,T)> func, std::function<T(T,T,T)> Ifunc, double tol)
2207 {
2208 
2209 
2210 
2211  if(pMesh->isActive())
2212  {
2213  const unsigned int rank=pMesh->getMPIRank();
2214  const unsigned int npes=pMesh->getMPICommSize();
2215 
2216  MPI_Comm commActive=pMesh->getMPICommunicator();
2217 
2218  T * v_func=pMesh->createVector<T>(func);
2219  T * out =pMesh->createVector<T>((T)0);
2220 
2221  const unsigned int localEleBegin=pMesh->getElementLocalBegin();
2222  const unsigned int localEleEnd=pMesh->getElementLocalEnd();
2223 
2224  const unsigned int localNodeBegin=pMesh->getNodeLocalBegin();
2225  const unsigned int localNodeEnd=pMesh->getNodeLocalEnd();
2226 
2227  const unsigned int globalNodeBegin=pMesh->getNodePreGhostBegin();
2228  const unsigned int globalNodeEnd=pMesh->getNodePostGhostEnd();
2229 
2230  for(unsigned int node=globalNodeBegin;node<globalNodeEnd;node++)
2231  out[node]=(T)0;
2232 
2233 
2234  const unsigned int nPe=pMesh->getNumNodesPerElement();
2235 
2236  T* elemenalVec=new T[nPe];
2237 
2238  pMesh->performGhostExchange(v_func);
2239 
2240 
2241  for(unsigned int ele=pMesh->getElementPreGhostBegin();ele<pMesh->getElementPostGhostEnd();ele++)
2242  {
2243  pMesh->getElementNodalValues(v_func,elemenalVec,ele);
2244  pMesh->computeElementalContribution(elemenalVec,out,ele);
2245  }
2246 
2247  double integralVal=0;
2248  double integralVal_g=0.0;
2249  pMesh->performGhostExchange(out);
2250 
2251  for(unsigned int node=localNodeBegin;node<localNodeEnd;node++)
2252  integralVal+=out[node];
2253 
2254  par::Mpi_Reduce(&integralVal,&integralVal_g,1,MPI_SUM,0,commActive);
2255  /*char fPrefix[256];
2256  sprintf(fPrefix,"%s","elecontribution");
2257  const char * varNames[]={"U"};
2258  const double * var[]={out};
2259  io::vtk::mesh2vtuFine(pMesh,fPrefix,0,NULL,NULL,1,varNames,var);*/
2260 
2261  //if(!rank) std::cout<<"integral value: "<<integralVal_g<<std::endl;
2262 
2263  delete [] out;
2264  delete [] v_func;
2265 
2266  }
2267 
2268  return true;
2269 
2270 
2271 
2272 
2273 
2274 
2275 
2276 
2277 
2278 
2279 
2280 }
2281 
2282 
2283 template<typename T>
2284 bool ot::test::isInterpToSphereValid(const ot::Mesh * mesh,const T* zipIn,std::function<T(T,T,T)> func,double r,const double *dMin,const double * dMax,double tolerance)
2285 {
2286 
2287 
2288  const unsigned int rankGlobal=mesh->getMPIRankGlobal();
2289  const unsigned int npesGlobal=mesh->getMPICommSizeGlobal();
2290  MPI_Comm commGlobal=mesh->getMPIGlobalCommunicator();
2291 
2292  bool status =true;
2293 
2294 
2295  if(mesh->isActive())
2296  {
2297 
2298  const unsigned int rankActive=mesh->getMPIRank();
2299  const unsigned int npesActive=mesh->getMPICommSize();
2300  MPI_Comm commActive=mesh->getMPICommunicator();
2301 
2302  const unsigned int numPts=LEBEDEV_025_NUM_PTS;
2303 
2304  std::vector<double> coords;
2305  coords.resize(3*numPts);
2306 
2307 
2308  for(unsigned int pts=0;pts<numPts;pts++)
2309  {
2310  coords[3*pts + 0]=(r*sin(LEBEDEV_025_THETA[pts])*cos(LEBEDEV_025_PHI[pts])-dMin[0])*(1u<<m_uiMaxDepth)/(dMax[0]-dMin[0]);
2311  coords[3*pts + 1]=(r*sin(LEBEDEV_025_THETA[pts])*sin(LEBEDEV_025_PHI[pts])-dMin[1])*(1u<<m_uiMaxDepth)/(dMax[1]-dMin[1]);
2312  coords[3*pts + 2]=(r*cos(LEBEDEV_025_THETA[pts])-dMin[2])*(1u<<m_uiMaxDepth)/(dMax[2]-dMin[2]);
2313 
2314  //std::cout<<"rank: "<<rankActive<<" x: "<<coords[3*pts + 0]<<" y: "<<coords[3*pts + 1]<<" z: "<<coords[3*pts + 2]<<std::endl;
2315 
2316  }
2317 
2318  std::vector<double> interpValues;
2319  interpValues.resize(numPts);
2320 
2321  std::vector<unsigned int > validIndex;
2322  ot::da::interpolateToCoords(mesh,zipIn,&(*(coords.begin())),coords.size(),&(*(interpValues.begin())),validIndex);
2323 
2324  unsigned int validSz=validIndex.size();
2325  unsigned int validSz_g;
2326  par::Mpi_Reduce(&validSz,&validSz_g,1,MPI_SUM,0,commActive);
2327 
2328  if(!rankActive) std::cout<<"numPts: "<<numPts<<" total valid incices: "<<validSz_g<<std::endl;
2329 
2330 
2331  double x,y,z;
2332  double f_val,f_interp;
2333  for(unsigned int i=0;i<validIndex.size();i++)
2334  {
2335  x=coords[3*validIndex[i]+0];
2336  y=coords[3*validIndex[i]+1];
2337  z=coords[3*validIndex[i]+2];
2338 
2339  f_val=func(x,y,z);
2340  f_interp=interpValues[validIndex[i]];
2341 
2342  if(fabs(f_interp-f_val)>tolerance)
2343  {
2344  std::cout<<"rank: "<<rankActive<<" x: "<<x<<" y: "<<y<<" z: "<<z<<" f_val: "<<f_val<<" f_interp: "<<f_interp<<" diff: "<<fabs(f_interp-f_val)<<std::endl;
2345  status=false;
2346  }
2347 
2348 
2349 
2350  }
2351 
2352 
2353 
2354  }
2355 
2356  return status;
2357 
2358 
2359 
2360 
2361  }
2362 
2363 
2368 template<typename T>
2369 bool ot::test::isSphereInterpValid(ot::Mesh* pMesh, T* vec, std::function< double(double,double,double) > func, double r, double tol, Point d_min, Point d_max)
2370 {
2371 
2372  const double phi_res = 0.02; // azimuthal angle
2373  const double theta_res = 0.01 ; // polar angle.
2374 
2375  const unsigned int numPts_phi = ( (2*M_PI) / phi_res );
2376  const unsigned int numPts_theta = (M_PI/theta_res);
2377 
2378  std::vector<T> coords;
2379  coords.reserve(3*(numPts_phi*numPts_theta));
2380 
2381  const unsigned int maxDepth = m_uiMaxDepth;
2382  std::vector<unsigned int> validIndex;
2383 
2384  std::vector<T> interpVal;
2385  interpVal.resize((numPts_phi*numPts_theta));
2386 
2387  for (unsigned int i=0; i< numPts_theta ; i++ )
2388  for(unsigned int j=0; j< numPts_phi ; j++)
2389  {
2390  double x = r*sin(j*theta_res) * cos(i*phi_res) ;
2391  double y = r*sin(j*theta_res) * sin(i*phi_res) ;
2392  double z = r*cos(j*theta_res);
2393 
2394  coords.push_back( (x-d_min.x()) * ((double)(1u<<(maxDepth))) / (d_max.x()-d_min.x())) ;
2395  coords.push_back( (y-d_min.y()) * ((double)(1u<<(maxDepth))) / (d_max.y()-d_min.y())) ;
2396  coords.push_back( (z-d_min.z()) * ((double)(1u<<(maxDepth))) / (d_max.z()-d_min.z())) ;
2397 
2398  }
2399 
2400 
2401  ot::da::interpolateToCoords(pMesh,vec,&(*(coords.begin())),coords.size(),&(*(interpVal.begin())),validIndex);
2402 
2403  unsigned int count=0;
2404  double sum=0;
2405 
2406  for (unsigned int i=0; i< numPts_theta ; i++ )
2407  for(unsigned int j=0; j< numPts_phi ; j++)
2408  {
2409  if( count <validIndex.size() && validIndex[count] == (i*numPts_phi +j))
2410  {
2411  double x = coords[3*validIndex[count] +0];
2412  double y = coords[3*validIndex[count] +1];
2413  double z = coords[3*validIndex[count] +2];
2414 
2415  if(fabs(interpVal[validIndex[count]]-func(x,y,z))> tol)
2416  {
2417  std::cout<<"rank: "<<pMesh->getMPIRank()<<" intepVal: "<<interpVal[validIndex[count]] <<" actual val : "<<func(x,y,z)<< " diff : "<< fabs(interpVal[validIndex[count]]- func(x,y,z))<<std::endl;
2418 
2419  }
2420 
2421  count++;
2422 
2423  sum += (r*r) * sin( i * theta_res ) * sin( i * theta_res ) * theta_res * phi_res;
2424 
2425  }
2426 
2427  }
2428 
2429 
2430  double sum_g=0;
2431  par::Mpi_Reduce(&sum,&sum_g,1,MPI_SUM,0,pMesh->getMPIGlobalCommunicator());
2432  if(!(pMesh->getMPIRank()))
2433  {
2434  std::cout<<" integration value: "<<sum_g << " analytic : "<<(M_PI*M_PI*r*r) <<" diff: "<<fabs(sum_g-M_PI*M_PI*r*r)<<" num pts : "<<(numPts_phi*numPts_theta)<<std::endl;
2435  }
2436 
2437 
2438 
2439  return true;
2440 
2441  }
2442 
2443 
2444 #endif //SFCSORTBENCH_MESHTESTUTILS_H
MPI_Comm getMPIGlobalCommunicator() const
returns the global communicator
Definition: mesh.h:1099
Simple class to manage async data transfer in the ODA class.
Definition: asyncExchangeContex.h:16
int Mpi_Reduce(T *sendbuf, T *recvbuf, int count, MPI_Op op, int root, MPI_Comm comm)
void computeElementalContribution(const T *in, T *out, unsigned int elementID) const
: Computes the contribution of elemental nodal values to the parent elements if it is hanging...
unsigned int minX() const
returns true min corner(anchor) and the max corner coordinates of a octant.
Definition: TreeNode.h:164
A collection of functions for debugging.
T * createVector() const
allocate memory for variable array based on the adaptive mesh
A class to manage octants.
Definition: TreeNode.h:35
void performGhostExchange(std::vector< T > &vec)
Perform the ghost exchange for the vector vec.
Definition: mesh.h:179
A point class.
Definition: point.h:36
const std::vector< unsigned int > & getE2NMapping_DG() const
Definition: mesh.h:1082
unsigned int getNodeLocalBegin() const
return the location of local node begin
Definition: mesh.h:1043
unsigned int getMPICommSizeGlobal() const
returns the comm size w.r.t. global comm
Definition: mesh.h:1105
unsigned int getElementLocalBegin() const
return the begin location of element local
Definition: mesh.h:1030
unsigned int getElementPostGhostEnd() const
return the end location of element post ghost
Definition: mesh.h:1036
void getElementNodalValues(const T *vec, T *nodalValues, unsigned int elementID) const
: Returns the nodal values of a given element for a given variable vector.
const std::vector< ot::TreeNode > & getAllElements() const
returns the pointer to All elements array.
Definition: mesh.h:1058
unsigned int getNumNodesPerElement() const
return the number of nodes per element.
Definition: mesh.h:1090
unsigned int getNodePreGhostBegin() const
return the begin location of pre ghost nodes
Definition: mesh.h:1039
unsigned int getMPIRank() const
returns the rank
Definition: mesh.h:1108
unsigned int getElementPreGhostBegin() const
return the begin location of element pre ghost
Definition: mesh.h:1026
bool isActive() const
returns true if mesh is active
Definition: mesh.h:1173
unsigned int getMPIRankGlobal() const
returns the rank w.r.t. global comm
Definition: mesh.h:1102
unsigned int getNodeLocalEnd() const
return the location of local node end
Definition: mesh.h:1045
const std::vector< ot::Block > & getLocalBlockList() const
returns const list of local blocks (regular grids) for the consdering mesh.
Definition: mesh.h:1084
unsigned int getNodePostGhostEnd() const
return the location of post node end
Definition: mesh.h:1049
void dg2eijk(unsigned int dg_index, unsigned int &e, unsigned int &i, unsigned int &j, unsigned int &k) const
: Decompose the DG index to element id and it&#39;s i,j,k values.
Definition: mesh.h:1147
unsigned int getElementOrder() const
returns the order of an element
Definition: mesh.h:1093
MPI_Comm getMPICommunicator() const
returns the communicator (acitve)
Definition: mesh.h:1096
unsigned int getElementLocalEnd() const
return the end location of element local
Definition: mesh.h:1032
unsigned int getMPICommSize() const
returns the comm size:
Definition: mesh.h:1111