Adding custom grouping option
This commit is contained in:
45
src/nbin.cpp
45
src/nbin.cpp
@ -43,8 +43,11 @@ NBin::NBin(LAMMPS *lmp) : Pointers(lmp)
|
||||
bins_multi = nullptr;
|
||||
atom2bin_multi = nullptr;
|
||||
maxbins_multi = nullptr;
|
||||
|
||||
map_type_multi = nullptr;
|
||||
cutmultisq = nullptr;
|
||||
|
||||
maxtypes = 0;
|
||||
maxgroups = 0;
|
||||
|
||||
neighbor->last_setup_bins = -1;
|
||||
|
||||
@ -84,7 +87,7 @@ NBin::~NBin()
|
||||
memory->destroy(bininvy_multi);
|
||||
memory->destroy(bininvz_multi);
|
||||
|
||||
for (int n = 1; n <= maxtypes; n++) {
|
||||
for (int n = 0; n < maxgroups; n++) {
|
||||
memory->destroy(binhead_multi[n]);
|
||||
memory->destroy(bins_multi[n]);
|
||||
memory->destroy(atom2bin_multi[n]);
|
||||
@ -117,6 +120,10 @@ void NBin::copy_neighbor_info()
|
||||
binsize_user = neighbor->binsize_user;
|
||||
bboxlo = neighbor->bboxlo;
|
||||
bboxhi = neighbor->bboxhi;
|
||||
|
||||
n_multi_groups = neighbor->n_multi_groups;
|
||||
map_type_multi = neighbor->map_type_multi;
|
||||
cutmultisq = neighbor->cutmultisq;
|
||||
|
||||
// overwrite Neighbor cutoff with custom value set by requestor
|
||||
// only works for style = BIN (checked by Neighbor class)
|
||||
@ -174,10 +181,10 @@ int NBin::coord2bin(double *x)
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
convert atom coords into local bin # for a particular type
|
||||
convert atom coords into local bin # for a particular grouping
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
int NBin::coord2bin_multi(double *x, int it)
|
||||
int NBin::coord2bin_multi(double *x, int ig)
|
||||
{
|
||||
int ix,iy,iz;
|
||||
int ibin;
|
||||
@ -186,33 +193,33 @@ int NBin::coord2bin_multi(double *x, int it)
|
||||
error->one(FLERR,"Non-numeric positions - simulation unstable");
|
||||
|
||||
if (x[0] >= bboxhi[0])
|
||||
ix = static_cast<int> ((x[0]-bboxhi[0])*bininvx_multi[it]) + nbinx_multi[it];
|
||||
ix = static_cast<int> ((x[0]-bboxhi[0])*bininvx_multi[ig]) + nbinx_multi[ig];
|
||||
else if (x[0] >= bboxlo[0]) {
|
||||
ix = static_cast<int> ((x[0]-bboxlo[0])*bininvx_multi[it]);
|
||||
ix = MIN(ix,nbinx_multi[it]-1);
|
||||
ix = static_cast<int> ((x[0]-bboxlo[0])*bininvx_multi[ig]);
|
||||
ix = MIN(ix,nbinx_multi[ig]-1);
|
||||
} else
|
||||
ix = static_cast<int> ((x[0]-bboxlo[0])*bininvx_multi[it]) - 1;
|
||||
ix = static_cast<int> ((x[0]-bboxlo[0])*bininvx_multi[ig]) - 1;
|
||||
|
||||
if (x[1] >= bboxhi[1])
|
||||
iy = static_cast<int> ((x[1]-bboxhi[1])*bininvy_multi[it]) + nbiny_multi[it];
|
||||
iy = static_cast<int> ((x[1]-bboxhi[1])*bininvy_multi[ig]) + nbiny_multi[ig];
|
||||
else if (x[1] >= bboxlo[1]) {
|
||||
iy = static_cast<int> ((x[1]-bboxlo[1])*bininvy_multi[it]);
|
||||
iy = MIN(iy,nbiny_multi[it]-1);
|
||||
iy = static_cast<int> ((x[1]-bboxlo[1])*bininvy_multi[ig]);
|
||||
iy = MIN(iy,nbiny_multi[ig]-1);
|
||||
} else
|
||||
iy = static_cast<int> ((x[1]-bboxlo[1])*bininvy_multi[it]) - 1;
|
||||
iy = static_cast<int> ((x[1]-bboxlo[1])*bininvy_multi[ig]) - 1;
|
||||
|
||||
if (x[2] >= bboxhi[2])
|
||||
iz = static_cast<int> ((x[2]-bboxhi[2])*bininvz_multi[it]) + nbinz_multi[it];
|
||||
iz = static_cast<int> ((x[2]-bboxhi[2])*bininvz_multi[ig]) + nbinz_multi[ig];
|
||||
else if (x[2] >= bboxlo[2]) {
|
||||
iz = static_cast<int> ((x[2]-bboxlo[2])*bininvz_multi[it]);
|
||||
iz = MIN(iz,nbinz_multi[it]-1);
|
||||
iz = static_cast<int> ((x[2]-bboxlo[2])*bininvz_multi[ig]);
|
||||
iz = MIN(iz,nbinz_multi[ig]-1);
|
||||
} else
|
||||
iz = static_cast<int> ((x[2]-bboxlo[2])*bininvz_multi[it]) - 1;
|
||||
iz = static_cast<int> ((x[2]-bboxlo[2])*bininvz_multi[ig]) - 1;
|
||||
|
||||
|
||||
ibin = (iz-mbinzlo_multi[it])*mbiny_multi[it]*mbinx_multi[it]
|
||||
+ (iy-mbinylo_multi[it])*mbinx_multi[it]
|
||||
+ (ix-mbinxlo_multi[it]);
|
||||
ibin = (iz-mbinzlo_multi[ig])*mbiny_multi[ig]*mbinx_multi[ig]
|
||||
+ (iy-mbinylo_multi[ig])*mbinx_multi[ig]
|
||||
+ (ix-mbinxlo_multi[ig]);
|
||||
return ibin;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user