From d1bcc7174807445e63e8891a09957f3c7dddcad5 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 23 Apr 2010 18:45:31 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@4038 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/neigh_gran.cpp | 31 +++++++++++++++++++++---------- src/neigh_half_bin.cpp | 20 ++++++++++++++------ src/neigh_half_multi.cpp | 20 +++++++++++++++----- src/neigh_respa.cpp | 27 ++++++++++++++++++--------- 4 files changed, 68 insertions(+), 30 deletions(-) diff --git a/src/neigh_gran.cpp b/src/neigh_gran.cpp index f5eed3b29a..ce75b16afc 100644 --- a/src/neigh_gran.cpp +++ b/src/neigh_gran.cpp @@ -231,9 +231,10 @@ void Neighbor::granular_nsq_newton(NeighList *list) if ((itag+jtag) % 2 == 1) continue; } else { if (x[j][2] < ztmp) continue; - else if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - else if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) - continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } } @@ -477,11 +478,14 @@ void Neighbor::granular_bin_newton(NeighList *list) for (j = bins[i]; j >= 0; j = bins[j]) { if (j >= nlocal) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; - if (exclude && exclusion(i,j,type[i],type[j],mask,molecule)) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } + if (exclude && exclusion(i,j,type[i],type[j],mask,molecule)) continue; + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -579,15 +583,22 @@ void Neighbor::granular_bin_newton_tri(NeighList *list) // loop over all atoms in bins in stencil // pairs for atoms j "below" i are excluded - // below = lower z or (equal z and lower y) or (equal zy and <= x) - // this excludes self-self interaction + // below = lower z or (equal z and lower y) or (equal zy and lower x) + // (equal zyx and j <= i) + // latter excludes self-self interaction but allows superposed atoms ibin = coord2bin(x[i]); for (k = 0; k < nstencil; k++) { for (j = binhead[ibin+stencil[k]]; j >= 0; j = bins[j]) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] <= xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp) { + if (x[j][0] < xtmp) continue; + if (x[j][0] == xtmp && j <= i) continue; + } + } + if (exclude && exclusion(i,j,type[i],type[j],mask,molecule)) continue; delx = xtmp - x[j][0]; diff --git a/src/neigh_half_bin.cpp b/src/neigh_half_bin.cpp index c4d38e6025..570b87307e 100644 --- a/src/neigh_half_bin.cpp +++ b/src/neigh_half_bin.cpp @@ -173,8 +173,10 @@ void Neighbor::half_bin_newton(NeighList *list) for (j = bins[i]; j >= 0; j = bins[j]) { if (j >= nlocal) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } jtype = type[j]; @@ -282,15 +284,21 @@ void Neighbor::half_bin_newton_tri(NeighList *list) // loop over all atoms in bins in stencil // pairs for atoms j "below" i are excluded - // below = lower z or (equal z and lower y) or (equal zy and <= x) - // this excludes self-self interaction + // below = lower z or (equal z and lower y) or (equal zy and lower x) + // (equal zyx and j <= i) + // latter excludes self-self interaction but allows superposed atoms ibin = coord2bin(x[i]); for (k = 0; k < nstencil; k++) { for (j = binhead[ibin+stencil[k]]; j >= 0; j = bins[j]) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] <= xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp) { + if (x[j][0] < xtmp) continue; + if (x[j][0] == xtmp && j <= i) continue; + } + } jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; diff --git a/src/neigh_half_multi.cpp b/src/neigh_half_multi.cpp index e2f1c046f5..bbfff83655 100644 --- a/src/neigh_half_multi.cpp +++ b/src/neigh_half_multi.cpp @@ -184,8 +184,10 @@ void Neighbor::half_multi_newton(NeighList *list) for (j = bins[i]; j >= 0; j = bins[j]) { if (j >= nlocal) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } jtype = type[j]; @@ -304,7 +306,10 @@ void Neighbor::half_multi_newton_tri(NeighList *list) // loop over all atoms in bins, including self, in stencil // skip if i,j neighbor cutoff is less than bin distance // bins below self are excluded from stencil - // pairs for atoms j below i are excluded + // pairs for atoms j "below" i are excluded + // below = lower z or (equal z and lower y) or (equal zy and lower x) + // (equal zyx and j <= i) + // latter excludes self-self interaction but allows superposed atoms ibin = coord2bin(x[i]); s = stencil_multi[itype]; @@ -316,8 +321,13 @@ void Neighbor::half_multi_newton_tri(NeighList *list) jtype = type[j]; if (cutsq[jtype] < distsq[k]) continue; if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] <= xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp) { + if (x[j][0] < xtmp) continue; + if (x[j][0] == xtmp && j <= i) continue; + } + } if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; diff --git a/src/neigh_respa.cpp b/src/neigh_respa.cpp index d4d6880e86..5d33abace7 100644 --- a/src/neigh_respa.cpp +++ b/src/neigh_respa.cpp @@ -276,9 +276,10 @@ void Neighbor::respa_nsq_newton(NeighList *list) if ((itag+jtag) % 2 == 1) continue; } else { if (x[j][2] < ztmp) continue; - else if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - else if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) - continue; + else if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } } @@ -607,8 +608,10 @@ void Neighbor::respa_bin_newton(NeighList *list) for (j = bins[i]; j >= 0; j = bins[j]) { if (j >= nlocal) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } } jtype = type[j]; @@ -799,15 +802,21 @@ void Neighbor::respa_bin_newton_tri(NeighList *list) // loop over all atoms in bins in stencil // pairs for atoms j "below" i are excluded - // below = lower z or (equal z and lower y) or (equal zy and <= x) - // this excludes self-self interaction + // below = lower z or (equal z and lower y) or (equal zy and lower x) + // (equal zyx and j <= i) + // latter excludes self-self interaction but allows superposed atoms ibin = coord2bin(x[i]); for (k = 0; k < nstencil; k++) { for (j = binhead[ibin+stencil[k]]; j >= 0; j = bins[j]) { if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] <= xtmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp) { + if (x[j][0] < xtmp) continue; + if (x[j][0] == xtmp && j <= i) continue; + } + } jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue;