/* Each thread should copy its own data to the combined arrays,
* as otherwise data will go back and forth between different caches.
*/
-#if GMX_OPENMP && !(defined __clang_analyzer__)
- int nthreads = gmx_omp_nthreads_get(emntPairsearch);
-#endif
+ int gmx_unused nthreads = gmx_omp_nthreads_get(emntPairsearch);
#pragma omp parallel for num_threads(nthreads) schedule(static)
- for (int n = 0; n < nbls.ssize(); n++)
+ for (gmx::index n = 0; n < nbls.ssize(); n++)
{
try
{
int cj4_offset = ncj4;
int excl_offset = nexcl;
- for (int i = n; i < nbls.ssize(); i++)
+ for (const auto &nbl : nbls)
{
- sci_offset -= nbls[i].sci.size();
- cj4_offset -= nbls[i].cj4.size();
- excl_offset -= nbls[i].excl.size();
+ sci_offset -= nbl.sci.size();
+ cj4_offset -= nbl.cj4.size();
+ excl_offset -= nbl.excl.size();
}
const NbnxnPairlistGpu &nbli = nbls[n];
static void incrementNumSimpleJClustersInList(NbnxnPairlistCpu *nbl,
int ncj_old_j)
{
- nbl->ncjInUse += nbl->cj.size() - ncj_old_j;
+ nbl->ncjInUse += nbl->cj.size();
+ nbl->ncjInUse -= ncj_old_j;
}
static void incrementNumSimpleJClustersInList(NbnxnPairlistGpu gmx_unused *nbl,
{
continue;
}
-
ncj_old_i = getNumSimpleJClustersInList(*nbl);
d2cx = 0;
}
else
{
- bx1 = iGridDims.lowerCorner[XX] + (ci_x+1)*iGridDims.cellSize[XX];
+ bx1 = iGridDims.lowerCorner[XX] + (real(ci_x)+1)*iGridDims.cellSize[XX];
}
if (bx1 < jGridDims.lowerCorner[XX])
{
/* Loop over shift vectors in three dimensions */
for (int tz = -shp[ZZ]; tz <= shp[ZZ]; tz++)
{
- const real shz = tz*box[ZZ][ZZ];
+ const real shz = real(tz)*box[ZZ][ZZ];
bz0 = bbcz_i[ci].lower + shz;
bz1 = bbcz_i[ci].upper + shz;
continue;
}
- bz1_frac = bz1/iGrid.numCellsInColumn(ci_xy);
+ bz1_frac = bz1/real(iGrid.numCellsInColumn(ci_xy));
if (bz1_frac < 0)
{
bz1_frac = 0;
for (int ty = -shp[YY]; ty <= shp[YY]; ty++)
{
- const real shy = ty*box[YY][YY] + tz*box[ZZ][YY];
+ const real shy = real(ty)*box[YY][YY] + real(tz)*box[ZZ][YY];
if (bSimple)
{
}
else
{
- by0 = iGridDims.lowerCorner[YY] + (ci_y )*iGridDims.cellSize[YY] + shy;
- by1 = iGridDims.lowerCorner[YY] + (ci_y + 1)*iGridDims.cellSize[YY] + shy;
+ by0 = iGridDims.lowerCorner[YY] + (real(ci_y) )*iGridDims.cellSize[YY] + shy;
+ by1 = iGridDims.lowerCorner[YY] + (real(ci_y) + 1)*iGridDims.cellSize[YY] + shy;
}
get_cell_range<YY>(by0, by1,
continue;
}
- const real shx = tx*box[XX][XX] + ty*box[YY][XX] + tz*box[ZZ][XX];
+ const real shx = real(tx)*box[XX][XX] + real(ty)*box[YY][XX] + real(tz)*box[ZZ][XX];
if (bSimple)
{
}
else
{
- bx0 = iGridDims.lowerCorner[XX] + (ci_x )*iGridDims.cellSize[XX] + shx;
- bx1 = iGridDims.lowerCorner[XX] + (ci_x+1)*iGridDims.cellSize[XX] + shx;
+ bx0 = iGridDims.lowerCorner[XX] + (real(ci_x) )*iGridDims.cellSize[XX] + shx;
+ bx1 = iGridDims.lowerCorner[XX] + (real(ci_x)+1)*iGridDims.cellSize[XX] + shx;
}
get_cell_range<XX>(bx0, bx1,
for (int cx = cxf; cx <= cxl; cx++)
{
+ const real cx_real = cx;
d2zx = d2z;
- if (jGridDims.lowerCorner[XX] + cx*jGridDims.cellSize[XX] > bx1)
+ if (jGridDims.lowerCorner[XX] + cx_real*jGridDims.cellSize[XX] > bx1)
{
- d2zx += gmx::square(jGridDims.lowerCorner[XX] + cx*jGridDims.cellSize[XX] - bx1);
+ d2zx += gmx::square(jGridDims.lowerCorner[XX] + cx_real*jGridDims.cellSize[XX] - bx1);
}
- else if (jGridDims.lowerCorner[XX] + (cx+1)*jGridDims.cellSize[XX] < bx0)
+ else if (jGridDims.lowerCorner[XX] + (cx_real+1)*jGridDims.cellSize[XX] < bx0)
{
- d2zx += gmx::square(jGridDims.lowerCorner[XX] + (cx+1)*jGridDims.cellSize[XX] - bx0);
+ d2zx += gmx::square(jGridDims.lowerCorner[XX] + (cx_real+1)*jGridDims.cellSize[XX] - bx0);
}
if (isIntraGridList &&
for (int cy = cyf_x; cy <= cyl; cy++)
{
- const int columnStart = jGrid.firstCellInColumn(cx*jGridDims.numCells[YY] + cy);
- const int columnEnd = jGrid.firstCellInColumn(cx*jGridDims.numCells[YY] + cy + 1);
+ const int columnStart = jGrid.firstCellInColumn(cx*jGridDims.numCells[YY] + cy);
+ const int columnEnd = jGrid.firstCellInColumn(cx*jGridDims.numCells[YY] + cy + 1);
+ const real cy_real = cy;
d2zxy = d2zx;
- if (jGridDims.lowerCorner[YY] + cy*jGridDims.cellSize[YY] > by1)
+ if (jGridDims.lowerCorner[YY] + cy_real*jGridDims.cellSize[YY] > by1)
{
- d2zxy += gmx::square(jGridDims.lowerCorner[YY] + cy*jGridDims.cellSize[YY] - by1);
+ d2zxy += gmx::square(jGridDims.lowerCorner[YY] + cy_real*jGridDims.cellSize[YY] - by1);
}
- else if (jGridDims.lowerCorner[YY] + (cy + 1)*jGridDims.cellSize[YY] < by0)
+ else if (jGridDims.lowerCorner[YY] + (cy_real + 1)*jGridDims.cellSize[YY] < by0)
{
- d2zxy += gmx::square(jGridDims.lowerCorner[YY] + (cy + 1)*jGridDims.cellSize[YY] - by0);
+ d2zxy += gmx::square(jGridDims.lowerCorner[YY] + (cy_real + 1)*jGridDims.cellSize[YY] - by0);
}
if (columnStart < columnEnd && d2zxy < listRangeBBToJCell2)
{
* but we do not do this because it would
* complicate this code even more.
*/
- int midCell = columnStart + static_cast<int>(bz1_frac*(columnEnd - columnStart));
+ int midCell = columnStart + static_cast<int>(bz1_frac*static_cast<real>(columnEnd - columnStart));
if (midCell >= columnEnd)
{
midCell = columnEnd - 1;
dest->ci.push_back(*srcCi);
dest->ci.back().cj_ind_start = dest->cj.size();
- dest->ci.back().cj_ind_end = dest->cj.size() + ncj;
+ dest->ci.back().cj_ind_end = dest->ci.back().cj_ind_start + ncj;
if (setFlags)
{
*/
const real rebalanceTolerance = 1.03;
- return numLists*ncjMax > ncjTotal*rebalanceTolerance;
+ return real(numLists*ncjMax) > real(ncjTotal)*rebalanceTolerance;
}
/* Perform a count (linear) sort to sort the smaller lists to the end.
NbnxnPairlistGpuWork &work = *nbl->work;
/* We will distinguish differences up to double the average */
- const int m = (2*nbl->cj4.size())/nbl->sci.size();
+ const int m = static_cast<int>((2*ssize(nbl->cj4))/ssize(nbl->sci));
/* Resize work.sci_sort so we can sort into it */
work.sci_sort.resize(nbl->sci.size());
/* Calculate the offset for each count */
int s0 = sort[m];
sort[m] = 0;
- for (int i = m - 1; i >= 0; i--)
+ for (gmx::index i = m - 1; i >= 0; i--)
{
int s1 = sort[i];
sort[i] = sort[i + 1] + s0;