Removing redundant k variables in npair
This commit is contained in:
@ -46,7 +46,7 @@ void NPairFullMulti2Omp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -94,22 +94,21 @@ void NPairFullMulti2Omp::build(NeighList *list)
|
||||
// skip i = j
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
kbin = ibin;
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
jbin = ibin;
|
||||
} else {
|
||||
// Locate i in ktype bin
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// Locate i in jtype bin
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (i == j) continue;
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -48,7 +48,7 @@ void NPairHalfMulti2NewtoffOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -98,23 +98,21 @@ void NPairHalfMulti2NewtoffOmp::build(NeighList *list)
|
||||
// stores own/ghost pairs on both procs
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
kbin = ibin;
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
jbin = ibin;
|
||||
} else {
|
||||
// Locate i in ktype bin
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// Locate i in jtype bin
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[jtype][j]) {
|
||||
if (j <= i) continue;
|
||||
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -47,7 +47,7 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -96,8 +96,8 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// own bin ...
|
||||
js = bins_multi2[itype][i];
|
||||
@ -110,7 +110,6 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -144,7 +143,6 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
js = binhead_multi2[itype][ibin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[itype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -170,14 +168,14 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
// if same size, use half list so check own bin
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
js = binhead_multi2[ktype][kbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
js = binhead_multi2[jtype][jbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (j >= nlocal) {
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
@ -186,7 +184,6 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -212,14 +209,13 @@ void NPairHalfMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -48,7 +48,7 @@ void NPairHalfMulti2NewtonTriOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -97,9 +97,9 @@ void NPairHalfMulti2NewtonTriOmp::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// loop over all atoms in other bins in stencil, store every pair
|
||||
// skip if i,j neighbor cutoff is less than bin distance
|
||||
@ -117,7 +117,7 @@ void NPairHalfMulti2NewtonTriOmp::build(NeighList *list)
|
||||
if (x[j][0] == xtmp && j <= i) continue;
|
||||
}
|
||||
}
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -143,20 +143,18 @@ void NPairHalfMulti2NewtonTriOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
// if same size, use half stencil
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
if (x[j][1] < ytmp) continue;
|
||||
|
||||
@ -46,7 +46,7 @@ void NPairHalfSizeMulti2NewtoffOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -86,23 +86,21 @@ void NPairHalfSizeMulti2NewtoffOmp::build(NeighList *list)
|
||||
// stores own/ghost pairs on both procs
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
kbin = ibin;
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
jbin = ibin;
|
||||
} else {
|
||||
// Locate i in ktype bin
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// Locate i in jtype bin
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[jtype][j]) {
|
||||
if (j <= i) continue;
|
||||
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -45,7 +45,7 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -84,9 +84,9 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// own bin ...
|
||||
js = bins_multi2[itype][i];
|
||||
@ -99,7 +99,6 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -125,7 +124,6 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[itype][ibin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[itype][j]) {
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
@ -145,13 +143,13 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
// if same size, use half list so check own bin
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
js = binhead_multi2[ktype][kbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
js = binhead_multi2[jtype][jbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (j >= nlocal) {
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
@ -160,7 +158,6 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -181,13 +178,11 @@ void NPairHalfSizeMulti2NewtonOmp::build(NeighList *list)
|
||||
|
||||
// Check other stencils
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
|
||||
@ -46,7 +46,7 @@ void NPairHalfSizeMulti2NewtonTriOmp::build(NeighList *list)
|
||||
#endif
|
||||
NPAIR_OMP_SETUP(nlocal);
|
||||
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -85,9 +85,9 @@ void NPairHalfSizeMulti2NewtonTriOmp::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// loop over all atoms in other bins in stencil, store every pair
|
||||
// skip if i,j neighbor cutoff is less than bin distance
|
||||
@ -105,7 +105,6 @@ void NPairHalfSizeMulti2NewtonTriOmp::build(NeighList *list)
|
||||
if (x[j][0] == xtmp && j <= i) continue;
|
||||
}
|
||||
}
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
@ -125,20 +124,18 @@ void NPairHalfSizeMulti2NewtonTriOmp::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
// if same size, use half stencil
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
if (x[j][1] < ytmp) continue;
|
||||
|
||||
@ -245,6 +245,9 @@ void Comm::init()
|
||||
// Can't used multi2 communication with Newton off
|
||||
// TODO: need to somehow restrict this option with full neighbor lists
|
||||
// CANNOT use multi2 communication with full nlist
|
||||
// Could remove NP_NEWTON from npair_full_*multi2*, but could be cryptic
|
||||
// Also could be cases where you want newton off (hybrid) but don't use multi2 comm
|
||||
// Could add check on neighbor build, if full and comm->multi2 error...
|
||||
if (force->newton == 0 && multi2)
|
||||
error->all(FLERR,"Cannot use multi2 communication with Newton off");
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ NPairFullMulti2::NPairFullMulti2(LAMMPS *lmp) : NPair(lmp) {}
|
||||
|
||||
void NPairFullMulti2::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom,moltemplate;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom,moltemplate;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -84,22 +84,21 @@ void NPairFullMulti2::build(NeighList *list)
|
||||
// skip i = j
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
kbin = ibin;
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
jbin = ibin;
|
||||
} else {
|
||||
// Locate i in ktype bin
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// Locate i in jtype bin
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (i == j) continue;
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -36,7 +36,7 @@ NPairHalfMulti2Newton::NPairHalfMulti2Newton(LAMMPS *lmp) : NPair(lmp) {}
|
||||
|
||||
void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom,moltemplate;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom,moltemplate;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -86,8 +86,8 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// own bin ...
|
||||
js = bins_multi2[itype][i];
|
||||
@ -100,7 +100,6 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -134,7 +133,6 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
js = binhead_multi2[itype][ibin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[itype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -160,14 +158,14 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
// if same size, use half list so check own bin
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
js = binhead_multi2[ktype][kbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
js = binhead_multi2[jtype][jbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (j >= nlocal) {
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
@ -176,7 +174,6 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -202,14 +199,13 @@ void NPairHalfMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -36,7 +36,7 @@ NPairHalfMulti2NewtonTri::NPairHalfMulti2NewtonTri(LAMMPS *lmp) : NPair(lmp) {}
|
||||
|
||||
void NPairHalfMulti2NewtonTri::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,which,ns,imol,iatom,moltemplate;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,which,ns,imol,iatom,moltemplate;
|
||||
tagint tagprev;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
int *neighptr,*s;
|
||||
@ -86,9 +86,9 @@ void NPairHalfMulti2NewtonTri::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// loop over all atoms in other bins in stencil, store every pair
|
||||
// skip if i,j neighbor cutoff is less than bin distance
|
||||
@ -106,7 +106,7 @@ void NPairHalfMulti2NewtonTri::build(NeighList *list)
|
||||
if (x[j][0] == xtmp && j <= i) continue;
|
||||
}
|
||||
}
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -132,20 +132,18 @@ void NPairHalfMulti2NewtonTri::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
// if same size, use half stencil
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
if (x[j][1] < ytmp) continue;
|
||||
|
||||
@ -36,7 +36,7 @@ NPairHalfSizeMulti2Newtoff::NPairHalfSizeMulti2Newtoff(LAMMPS *lmp) : NPair(lmp)
|
||||
|
||||
void NPairHalfSizeMulti2Newtoff::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -78,23 +78,21 @@ void NPairHalfSizeMulti2Newtoff::build(NeighList *list)
|
||||
// stores own/ghost pairs on both procs
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
if (itype == ktype) {
|
||||
kbin = ibin;
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
if (itype == jtype) {
|
||||
jbin = ibin;
|
||||
} else {
|
||||
// Locate i in ktype bin
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// Locate i in jtype bin
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
}
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[ktype][j]) {
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >=0; j = bins_multi2[jtype][j]) {
|
||||
if (j <= i) continue;
|
||||
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
|
||||
@ -34,7 +34,7 @@ NPairHalfSizeMulti2Newton::NPairHalfSizeMulti2Newton(LAMMPS *lmp) : NPair(lmp) {
|
||||
|
||||
void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns,js;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns,js;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -74,9 +74,9 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// own bin ...
|
||||
js = bins_multi2[itype][i];
|
||||
@ -89,7 +89,6 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -115,7 +114,6 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[itype][ibin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[itype][j]) {
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
@ -135,13 +133,13 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
// if same size, use half list so check own bin
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
js = binhead_multi2[ktype][kbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
js = binhead_multi2[jtype][jbin];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
if (j >= nlocal) {
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
@ -150,7 +148,6 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
|
||||
jtype = type[j];
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
delx = xtmp - x[j][0];
|
||||
@ -171,13 +168,11 @@ void NPairHalfSizeMulti2Newton::build(NeighList *list)
|
||||
|
||||
// Check other stencils
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ NPairHalfSizeMulti2NewtonTri::NPairHalfSizeMulti2NewtonTri(LAMMPS *lmp) : NPair(
|
||||
|
||||
void NPairHalfSizeMulti2NewtonTri::build(NeighList *list)
|
||||
{
|
||||
int i,j,k,n,itype,jtype,ktype,ibin,kbin,ns,js;
|
||||
int i,j,k,n,itype,jtype,ibin,jbin,ns,js;
|
||||
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
|
||||
double radi,radsum,cutdistsq;
|
||||
int *neighptr,*s;
|
||||
@ -74,9 +74,9 @@ void NPairHalfSizeMulti2NewtonTri::build(NeighList *list)
|
||||
|
||||
ibin = atom2bin_multi2[itype][i];
|
||||
|
||||
for (ktype = 1; ktype <= atom->ntypes; ktype++) {
|
||||
for (jtype = 1; jtype <= atom->ntypes; jtype++) {
|
||||
|
||||
if (itype == ktype) {
|
||||
if (itype == jtype) {
|
||||
|
||||
// loop over all atoms in other bins in stencil, store every pair
|
||||
// skip if i,j neighbor cutoff is less than bin distance
|
||||
@ -94,7 +94,6 @@ void NPairHalfSizeMulti2NewtonTri::build(NeighList *list)
|
||||
if (x[j][0] == xtmp && j <= i) continue;
|
||||
}
|
||||
}
|
||||
jtype = type[j];
|
||||
|
||||
if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||
|
||||
@ -114,20 +113,18 @@ void NPairHalfSizeMulti2NewtonTri::build(NeighList *list)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// smaller -> larger: locate i in the ktype bin structure
|
||||
// smaller -> larger: locate i in the jtype bin structure
|
||||
|
||||
kbin = coord2bin(x[i], ktype);
|
||||
jbin = coord2bin(x[i], jtype);
|
||||
|
||||
s = stencil_multi2[itype][ktype];
|
||||
ns = nstencil_multi2[itype][ktype];
|
||||
s = stencil_multi2[itype][jtype];
|
||||
ns = nstencil_multi2[itype][jtype];
|
||||
for (k = 0; k < ns; k++) {
|
||||
js = binhead_multi2[ktype][kbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[ktype][j]) {
|
||||
|
||||
jtype = type[j];
|
||||
js = binhead_multi2[jtype][jbin + s[k]];
|
||||
for (j = js; j >= 0; j = bins_multi2[jtype][j]) {
|
||||
|
||||
// if same size, use half stencil
|
||||
if(cutneighsq[itype][itype] == cutneighsq[ktype][ktype]){
|
||||
if(cutneighsq[itype][itype] == cutneighsq[jtype][jtype]){
|
||||
if (x[j][2] < ztmp) continue;
|
||||
if (x[j][2] == ztmp) {
|
||||
if (x[j][1] < ytmp) continue;
|
||||
|
||||
Reference in New Issue
Block a user