Re-arranged the binsize call from the GPU lib in Atom so that the box bounds and bininv[xyz] are computed on the CPU side intact

This commit is contained in:
Trung Nguyen
2021-09-03 17:32:41 -05:00
parent 8f5f65e68d
commit be5aa46df8
2 changed files with 16 additions and 30 deletions

View File

@ -2195,6 +2195,21 @@ void Atom::setup_sort_bins()
return;
}
#ifdef LMP_GPU
if (userbinsize == 0.0) {
int ifix = modify->find_fix("package_gpu");
if (ifix >= 0) {
const double subx = domain->subhi[0] - domain->sublo[0];
const double suby = domain->subhi[1] - domain->sublo[1];
const double subz = domain->subhi[2] - domain->sublo[2];
FixGPU *fix = static_cast<FixGPU *>(modify->fix[ifix]);
binsize = fix->binsize(subx, suby, subz, atom->nlocal,
0.5 * neighbor->cutneighmax);
}
}
#endif
double bininv = 1.0/binsize;
// nbin xyz = local bins
@ -2271,35 +2286,6 @@ void Atom::setup_sort_bins()
}
#endif
#ifdef LMP_GPU
if (userbinsize == 0.0) {
int ifix = modify->find_fix("package_gpu");
if (ifix >= 0) {
const double subx = domain->subhi[0] - domain->sublo[0];
const double suby = domain->subhi[1] - domain->sublo[1];
const double subz = domain->subhi[2] - domain->sublo[2];
FixGPU *fix = static_cast<FixGPU *>(modify->fix[ifix]);
binsize = fix->binsize(subx, suby, subz, atom->nlocal,
neighbor->cutneighmax);
bininv = 1.0 / binsize;
nbinx = static_cast<int> (ceil(subx * bininv));
nbiny = static_cast<int> (ceil(suby * bininv));
nbinz = static_cast<int> (ceil(subz * bininv));
if (domain->dimension == 2) nbinz = 1;
if (nbinx == 0) nbinx = 1;
if (nbiny == 0) nbiny = 1;
if (nbinz == 0) nbinz = 1;
bininvx = bininv;
bininvy = bininv;
bininvz = bininv;
}
}
#endif
if (1.0*nbinx*nbiny*nbinz > INT_MAX)
error->one(FLERR,"Too many atom sorting bins");