Removing redundant k variables in npair

This commit is contained in:
Joel Clemmer
2020-11-29 19:57:14 -07:00
parent 2c79fbebe8
commit 8a0dac90ca
14 changed files with 152 additions and 185 deletions

View File

@ -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];

View File

@ -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];

View File

@ -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];

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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;

View File

@ -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");
}

View File

@ -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];

View File

@ -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];

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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;