/home/eoseret/qaas_runs_CPU_9468/171-148-3214/intel/CoMD/build/CoMD/CoMD/src-openmp/linkCells.c: 209 - 385
--------------------------------------------------------------------------------

209:    if (iz == gridSize[2])
210:    {
211:       iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + 2*gridSize[2]*(gridSize[0]+2) +
212:          (gridSize[0]+2)*(gridSize[1]+2) + (gridSize[0]+2)*(iy+1) + (ix+1);
213:    }
214:    // Halo in Z-
215:    else if (iz == -1)
216:    {
217:       iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + 2*gridSize[2]*(gridSize[0]+2) +
218:          (gridSize[0]+2)*(iy+1) + (ix+1);
219:    }
220:    // Halo in Y+
221:    else if (iy == gridSize[1])
[...]
227:    else if (iy == -1)
228:    {
229:       iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + iz*(gridSize[0]+2) + (ix+1);
230:    }
231:    // Halo in X+
232:    else if (ix == gridSize[0])
233:    {
234:       iBox = boxes->nLocalBoxes + gridSize[1]*gridSize[2] + iz*gridSize[1] + iy;
235:    }
236:    // Halo in X-
237:    else if (ix == -1)
238:    {
239:       iBox = boxes->nLocalBoxes + iz*gridSize[1] + iy;
240:    }
241:    // local link celll.
242:    else
243:    {
244:       iBox = ix + gridSize[0]*iy + gridSize[0]*gridSize[1]*iz;
245:    }
246:    assert(iBox >= 0);
247:    assert(iBox < boxes->nTotalBoxes);
[...]
258:    int nj = boxes->nAtoms[jBox];
259:    copyAtom(boxes, atoms, iId, iBox, nj, jBox);
260:    boxes->nAtoms[jBox]++;
261: 
262:    assert(boxes->nAtoms[jBox] < MAXATOMS);
263: 
264:    boxes->nAtoms[iBox]--;
265:    int ni = boxes->nAtoms[iBox];
266:    if (ni) copyAtom(boxes, atoms, ni, iBox, iId, iBox);
267: 
268:    if (jBox > boxes->nLocalBoxes)
269:       --atoms->nLocal;
[...]
288: {
289:    emptyHaloCells(boxes);
290:    
291:    for (int iBox=0; iBox<boxes->nLocalBoxes; ++iBox)
292:    {
293:       int iOff = iBox*MAXATOMS;
294:       int ii=0;
295:       while (ii < boxes->nAtoms[iBox])
296:       {
297:          int jBox = getBoxFromCoord(boxes, atoms->r[iOff+ii]);
298:          if (jBox != iBox)
299:             moveAtom(boxes, atoms, ii, iBox, jBox);
300:          else
301:             ++ii;
302:       }
303:    }
304: }
[...]
327:    const int iOff = MAXATOMS*iBox+iAtom;
328:    const int jOff = MAXATOMS*jBox+jAtom;
329:    atoms->gid[jOff] = atoms->gid[iOff];
330:    atoms->iSpecies[jOff] = atoms->iSpecies[iOff];
331:    memcpy(atoms->r[jOff], atoms->r[iOff], sizeof(real3));
332:    memcpy(atoms->p[jOff], atoms->p[iOff], sizeof(real3));
333:    memcpy(atoms->f[jOff], atoms->f[iOff], sizeof(real3));
334:    memcpy(atoms->U+jOff,  atoms->U+iOff,  sizeof(real_t));
[...]
352:    int ix = (int)(floor((rr[0] - localMin[0])*boxes->invBoxSize[0]));
353:    int iy = (int)(floor((rr[1] - localMin[1])*boxes->invBoxSize[1]));
[...]
359:    if (rr[0] < localMax[0]) 
360:    {
361:       if (ix == gridSize[0]) ix = gridSize[0] - 1;
362:    }
363:    else
364:       ix = gridSize[0]; // assign to halo cell
365:    if (rr[1] < localMax[1])
[...]
371:    if (rr[2] < localMax[2])
[...]
384:    for (int ii=boxes->nLocalBoxes; ii<boxes->nTotalBoxes; ++ii)
385:       boxes->nAtoms[ii] = 0;
