10 #ifndef SFCSORTBENCH_MESHTESTUTILS_H 11 #define SFCSORTBENCH_MESHTESTUTILS_H 34 bool isElementalNodalValuesValid(
ot::Mesh * pMesh,T* vec,std::function<T(T,T,T)> func,
double tol);
48 bool isElementalContributionValid(
ot::Mesh *pMesh, std::function<T(T,T,T)> func, std::function<T(T,T,T)> Ifunc,
double tol);
60 bool isUnzipValid(
ot::Mesh* pMesh, T* unzipVec,std::function<T(T,T,T)> fn, T tol);
72 bool isUnzipNaN(
ot::Mesh* pMesh, T* unzipVec);
80 bool isZipNAN(
ot::Mesh* pMesh, T* zipVec);
86 bool isUnzipInternalNaN(
ot::Mesh* pMesh, T* unzipVec);
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);
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);
119 template <
typename T>
120 bool ot::test::isElementalNodalValuesValid(
ot::Mesh * pMesh,T* vec,std::function<T(T,T,T)> func,
double tol)
123 if(!(pMesh->
isActive()))
return true;
125 std::vector<T> nodalValues;
131 unsigned int x,y,z,sz,owner,ix,jy,kz;
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++)
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
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)
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;
265 template <
typename T>
266 bool ot::test::isUnzipValid(
ot::Mesh* pMesh, T* unzipVec,std::function<T(T,T,T)> fn, T tol)
269 if(!(pMesh->
isActive()))
return true;
296 unsigned int lx,ly,lz;
297 unsigned int hx,hy,hz;
298 const unsigned int pW=3;
301 unsigned int ib,ie,jb,je,kb,ke;
305 for(
unsigned int blk=0;blk<blkList.size();blk++)
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();
314 hx=blkList[blk].computeGridDx();
315 hy=blkList[blk].computeGridDy();
316 hz=blkList[blk].computeGridDz();
318 bflag=blkList[blk].getBlkNodeFlag();
319 offset=blkList[blk].getOffset();
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;
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;
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++)
346 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
357 if(!(bflag & (1u<<OCT_DIR_LEFT)))
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++)
374 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
383 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
400 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
411 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
429 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
443 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
461 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
477 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
494 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
506 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
524 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
537 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
555 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
573 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
590 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
604 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
622 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
639 if(!(bflag & (1u<<OCT_DIR_RIGHT)))
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++)
658 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
669 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
686 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
699 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
716 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
727 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
744 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
759 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
776 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
786 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
803 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
814 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
831 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
846 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
863 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
877 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
895 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
915 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
934 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
945 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
962 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
976 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
994 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1010 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
1029 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1040 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1057 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1071 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1089 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1105 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1124 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1136 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1155 if(fabs(unzipVec[offset+k*ly*lx+j*lx+i]-fn(x,y,z))>tol)
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;
1180 template <
typename T>
1181 bool ot::test::isUnzipNaN(
ot::Mesh* pMesh, T* unzipVec)
1184 if(!(pMesh->
isActive()))
return false;
1210 unsigned int regLev;
1211 unsigned int lx,ly,lz;
1212 unsigned int hx,hy,hz;
1213 const unsigned int pW=3;
1215 unsigned int offset;
1216 unsigned int ib,ie,jb,je,kb,ke;
1220 for(
unsigned int blk=0;blk<blkList.size();blk++)
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();
1229 hx=blkList[blk].computeGridDx();
1230 hy=blkList[blk].computeGridDy();
1231 hz=blkList[blk].computeGridDz();
1233 bflag=blkList[blk].getBlkNodeFlag();
1234 offset=blkList[blk].getOffset();
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;
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;
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++)
1261 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1264 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[internal] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
1272 if(!(bflag & (1u<<OCT_DIR_LEFT)))
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++)
1289 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1292 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[left] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
1298 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
1315 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1326 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1343 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1355 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1372 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1388 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
1405 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1415 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1432 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1444 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1461 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1478 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1495 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1509 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1527 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1543 if(!(bflag & (1u<<OCT_DIR_RIGHT)))
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++)
1562 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1565 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[right] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
1573 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
1590 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1601 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1618 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1630 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1647 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1662 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
1679 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1690 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1707 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1719 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1736 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1752 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1769 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1783 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1801 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1821 if(!(bflag & (1u<<OCT_DIR_DOWN)))
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++)
1840 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1843 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[down] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
1851 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1868 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1882 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1900 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1916 if(!(bflag & (1u<<OCT_DIR_UP)))
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++)
1935 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
1938 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[up] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
1946 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
1963 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
1977 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
1995 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
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;
2011 if(!(bflag & (1u<<OCT_DIR_BACK)))
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++)
2030 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
2033 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[internal] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
2042 if(!(bflag & (1u<<OCT_DIR_FRONT)))
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++)
2061 if(std::isnan(unzipVec[offset+k*ly*lx+j*lx+i]))
2064 std::cout<<
"rank: "<<rank<<
"blk: "<<blkNode<<
" block[internal] unzip error : unzip value: NAN "<<
" (i,j,k): ("<<i<<
", "<<j<<
","<<k<<
" )"<<
"sz: "<<lx<<std::endl;
2085 template <
typename T>
2086 bool ot::test::isZipNAN(
ot::Mesh* pMesh, T* zipVec)
2091 const unsigned int activeRank=pMesh->
getMPIRank();
2093 for(
unsigned int i=nodeLocalBegin;i<nodeLocalEnd;i++)
2095 if(std::isnan(zipVec[i]))
2097 std::cout<<
"rank: "<<activeRank<<
" node local: "<<i<<
" is nan"<<std::endl;
2108 template <
typename T>
2109 bool ot::test::isUnzipInternalNaN(
ot::Mesh* pMesh, T* unzipVec)
2113 if(!(pMesh->
isActive()))
return false;
2139 unsigned int regLev;
2140 unsigned int lx,ly,lz;
2141 unsigned int hx,hy,hz;
2142 const unsigned int pW=3;
2144 unsigned int offset;
2145 unsigned int ib,ie,jb,je,kb,ke;
2149 for(
unsigned int blk=0;blk<blkList.size();blk++) {
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();
2157 hx = blkList[blk].computeGridDx();
2158 hy = blkList[blk].computeGridDy();
2159 hz = blkList[blk].computeGridDz();
2161 bflag = blkList[blk].getBlkNodeFlag();
2162 offset = blkList[blk].getOffset();
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;
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;
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])) {
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;
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)
2230 for(
unsigned int node=globalNodeBegin;node<globalNodeEnd;node++)
2236 T* elemenalVec=
new T[nPe];
2247 double integralVal=0;
2248 double integralVal_g=0.0;
2251 for(
unsigned int node=localNodeBegin;node<localNodeEnd;node++)
2252 integralVal+=out[node];
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)
2298 const unsigned int rankActive=mesh->
getMPIRank();
2302 const unsigned int numPts=LEBEDEV_025_NUM_PTS;
2304 std::vector<double> coords;
2305 coords.resize(3*numPts);
2308 for(
unsigned int pts=0;pts<numPts;pts++)
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]);
2318 std::vector<double> interpValues;
2319 interpValues.resize(numPts);
2321 std::vector<unsigned int > validIndex;
2322 ot::da::interpolateToCoords(mesh,zipIn,&(*(coords.begin())),coords.size(),&(*(interpValues.begin())),validIndex);
2324 unsigned int validSz=validIndex.size();
2325 unsigned int validSz_g;
2328 if(!rankActive) std::cout<<
"numPts: "<<numPts<<
" total valid incices: "<<validSz_g<<std::endl;
2332 double f_val,f_interp;
2333 for(
unsigned int i=0;i<validIndex.size();i++)
2335 x=coords[3*validIndex[i]+0];
2336 y=coords[3*validIndex[i]+1];
2337 z=coords[3*validIndex[i]+2];
2340 f_interp=interpValues[validIndex[i]];
2342 if(fabs(f_interp-f_val)>tolerance)
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;
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)
2372 const double phi_res = 0.02;
2373 const double theta_res = 0.01 ;
2375 const unsigned int numPts_phi = ( (2*M_PI) / phi_res );
2376 const unsigned int numPts_theta = (M_PI/theta_res);
2378 std::vector<T> coords;
2379 coords.reserve(3*(numPts_phi*numPts_theta));
2381 const unsigned int maxDepth = m_uiMaxDepth;
2382 std::vector<unsigned int> validIndex;
2384 std::vector<T> interpVal;
2385 interpVal.resize((numPts_phi*numPts_theta));
2387 for (
unsigned int i=0; i< numPts_theta ; i++ )
2388 for(
unsigned int j=0; j< numPts_phi ; j++)
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);
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())) ;
2401 ot::da::interpolateToCoords(pMesh,vec,&(*(coords.begin())),coords.size(),&(*(interpVal.begin())),validIndex);
2403 unsigned int count=0;
2406 for (
unsigned int i=0; i< numPts_theta ; i++ )
2407 for(
unsigned int j=0; j< numPts_phi ; j++)
2409 if( count <validIndex.size() && validIndex[count] == (i*numPts_phi +j))
2411 double x = coords[3*validIndex[count] +0];
2412 double y = coords[3*validIndex[count] +1];
2413 double z = coords[3*validIndex[count] +2];
2415 if(fabs(interpVal[validIndex[count]]-func(x,y,z))> tol)
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;
2423 sum += (r*r) * sin( i * theta_res ) * sin( i * theta_res ) * theta_res * phi_res;
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;
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.
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'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