43 #define MAX(A,B) ((A) > (B) ? (A) : (B))
97 static int loadAtomsBuffer(
void* vparms,
void* data,
int face,
char* charBuf);
98 static void unloadAtomsBuffer(
void* vparms,
void* data,
int face,
int bufSize,
char* charBuf);
103 static int loadForceBuffer(
void* vparms,
void* data,
int face,
char* charBuf);
104 static void unloadForceBuffer(
void* vparms,
void* data,
int face,
int bufSize,
char* charBuf);
151 int maxSize =
MAX(size0, size1);
152 maxSize =
MAX(size1, size2);
168 for (
int ii=0; ii<6; ++ii)
171 for (
int ii=0; ii<6; ++ii)
174 for (
int jj=0; jj<3; ++jj)
216 int maxSize =
MAX(size0, size1);
217 maxSize =
MAX(size1, size2);
229 for (
int ii=0; ii<6; ++ii)
241 (*haloExchange)->destroy((*haloExchange)->parms);
243 *haloExchange = NULL;
248 for (
int iAxis=0; iAxis<3; ++iAxis)
287 int nSendM = haloExchange->
loadBuffer(haloExchange->
parms, data, faceM, sendBufM);
288 int nSendP = haloExchange->
loadBuffer(haloExchange->
parms, data, faceP, sendBufP);
290 int nbrRankM = haloExchange->
nbrRank[faceM];
291 int nbrRankP = haloExchange->
nbrRank[faceP];
345 for (
int ix=xBegin; ix<xEnd; ++ix)
346 for (
int iy=yBegin; iy<yEnd; ++iy)
347 for (
int iz=zBegin; iz<zEnd; ++iz)
349 assert(count == nCells);
372 int nCells = parms->
nCells[face];
373 int* cellList = parms->
cellList[face];
375 for (
int iCell=0; iCell<nCells; ++iCell)
377 int iBox = cellList[iCell];
379 for (
int ii=iOff; ii<iOff+s->
boxes->
nAtoms[iBox]; ++ii)
383 buf[nBuf].
rx = s->
atoms->
r[ii][0] + shift[0];
384 buf[nBuf].
ry = s->
atoms->
r[ii][1] + shift[1];
385 buf[nBuf].
rz = s->
atoms->
r[ii][2] + shift[2];
410 int nBuf = bufSize /
sizeof(
AtomMsg);
411 assert(bufSize %
sizeof(
AtomMsg) == 0);
413 for (
int ii=0; ii<nBuf; ++ii)
415 int gid = buf[ii].
gid;
416 int type = buf[ii].
type;
431 for (
int ii=0; ii<6; ++ii)
448 int xBegin, xEnd, yBegin, yEnd, zBegin, zEnd;
456 xBegin=0; xEnd=1; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz;
459 xBegin=nx-1; xEnd=nx; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz;
462 xBegin=-1; xEnd=nx+1; yBegin=0; yEnd=1; zBegin=0; zEnd=nz;
465 xBegin=-1; xEnd=nx+1; yBegin=ny-1; yEnd=ny; zBegin=0; zEnd=nz;
468 xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=0; zEnd=1;
471 xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=nz-1; zEnd=nz;
478 for (
int ix=xBegin; ix<xEnd; ++ix)
479 for (
int iy=yBegin; iy<yEnd; ++iy)
480 for (
int iz=zBegin; iz<zEnd; ++iz)
483 assert(count == nCells);
497 int xBegin, xEnd, yBegin, yEnd, zBegin, zEnd;
505 xBegin=-1; xEnd=0; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz;
508 xBegin=nx; xEnd=nx+1; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz;
511 xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=0; zBegin=0; zEnd=nz;
514 xBegin=-1; xEnd=nx+1; yBegin=ny; yEnd=ny+1; zBegin=0; zEnd=nz;
517 xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=-1; zEnd=0;
520 xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=nz; zEnd=nz+1;
527 for (
int ix=xBegin; ix<xEnd; ++ix)
528 for (
int iy=yBegin; iy<yEnd; ++iy)
529 for (
int iz=zBegin; iz<zEnd; ++iz)
532 assert(count == nCells);
548 int nCells = parms->
nCells[face];
551 for (
int iCell=0; iCell<nCells; ++iCell)
553 int iBox = cellList[iCell];
555 for (
int ii=iOff; ii<iOff+data->
boxes->
nAtoms[iBox]; ++ii)
575 assert(bufSize %
sizeof(
ForceMsg) == 0);
577 int nCells = parms->
nCells[face];
580 for (
int iCell=0; iCell<nCells; ++iCell)
582 int iBox = cellList[iCell];
584 for (
int ii=iOff; ii<iOff+data->
boxes->
nAtoms[iBox]; ++ii)
590 assert(iBuf == bufSize/
sizeof(
ForceMsg));
597 for (
int ii=0; ii<6; ++ii)
614 int nAtoms = boxes->
nAtoms[iBox];
619 int end = begin + nAtoms;
620 for (
int ii=begin, iTmp=0; ii<end; ++ii, ++iTmp)
622 tmp[iTmp].
gid = atoms->
gid[ii];
624 tmp[iTmp].
rx = atoms->
r[ii][0];
625 tmp[iTmp].
ry = atoms->
r[ii][1];
626 tmp[iTmp].
rz = atoms->
r[ii][2];
627 tmp[iTmp].
px = atoms->
p[ii][0];
628 tmp[iTmp].
py = atoms->
p[ii][1];
629 tmp[iTmp].
pz = atoms->
p[ii][2];
632 for (
int ii=begin, iTmp=0; ii<end; ++ii, ++iTmp)
634 atoms->
gid[ii] = tmp[iTmp].
gid;
636 atoms->
r[ii][0] = tmp[iTmp].
rx;
637 atoms->
r[ii][1] = tmp[iTmp].
ry;
638 atoms->
r[ii][2] = tmp[iTmp].
rz;
639 atoms->
p[ii][0] = tmp[iTmp].
px;
640 atoms->
p[ii][1] = tmp[iTmp].
py;
641 atoms->
p[ii][2] = tmp[iTmp].
pz;