only compute special neighbors of a template if it has bonds

This commit is contained in:
Axel Kohlmeyer
2025-04-09 16:12:47 -04:00
parent f16f65c8dc
commit 8fd1bf23c9
17 changed files with 49 additions and 51 deletions

View File

@ -203,10 +203,9 @@ void NPairHalfBinNewtonSSA::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i],nspecial[i],tag[j]); which = find_special(special[i],nspecial[i],tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], which = find_special(onemols[imol]->special[iatom],
onemols[imol]->nspecial[iatom], onemols[imol]->nspecial[iatom], tag[j] - tagprev);
tag[j]-tagprev);
else which = 0; else which = 0;
if (which == 0) neighptr[n++] = j; if (which == 0) neighptr[n++] = j;
else if (domain->minimum_image_check(delx,dely,delz)) else if (domain->minimum_image_check(delx,dely,delz))
@ -286,11 +285,11 @@ void NPairHalfBinNewtonSSA::build(NeighList *list)
which = find_special(special[j],nspecial[j],tag[i]); which = find_special(special[j],nspecial[j],tag[i]);
else { else {
int jmol = molindex[j]; int jmol = molindex[j];
if (jmol >= 0) { if ((jmol >= 0) && onemols[jmol]->special) {
int jatom = molatom[j]; int jatom = molatom[j];
which = find_special(onemols[jmol]->special[jatom], which = find_special(onemols[jmol]->special[jatom],
onemols[jmol]->nspecial[jatom], onemols[jmol]->nspecial[jatom],
tag[i] - (tag[j] - jatom - 1)); tag[i] - (tag[j] - jatom - 1));
} else which = 0; } else which = 0;
} }
if (which == 0) neighptr[n++] = j; if (which == 0) neighptr[n++] = j;

View File

@ -135,7 +135,7 @@ void NPairBinGhostOmp<HALF>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -207,9 +207,9 @@ void NPairBinOmp<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol] ->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol] ->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)
@ -230,9 +230,9 @@ void NPairBinOmp<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else which = 0; else which = 0;
if (which == 0) if (which == 0)
neighptr[n++] = j; neighptr[n++] = j;

View File

@ -204,7 +204,7 @@ void NPairMultiOldOmp<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else
@ -223,7 +223,7 @@ void NPairMultiOldOmp<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -232,9 +232,9 @@ void NPairMultiOmp<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)
@ -255,9 +255,9 @@ void NPairMultiOmp<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)

View File

@ -131,7 +131,7 @@ void NPairNsqGhostOmp<HALF>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -181,7 +181,7 @@ void NPairNsqOmp<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else
@ -200,7 +200,7 @@ void NPairNsqOmp<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -204,7 +204,7 @@ void NPairRespaBinOmp<NEWTON, TRI>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -186,7 +186,7 @@ void NPairRespaNsqOmp<NEWTON, TRI>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -199,9 +199,9 @@ void NPairBin<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)
@ -222,9 +222,9 @@ void NPairBin<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)

View File

@ -130,9 +130,9 @@ void NPairBinGhost<HALF>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)

View File

@ -229,9 +229,9 @@ void NPairMulti<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)
@ -252,9 +252,9 @@ void NPairMulti<HALF, NEWTON, TRI, SIZE, ATOMONLY>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom],
tag[j] - tagprev); onemols[imol]->nspecial[iatom], tag[j] - tagprev);
else else
which = 0; which = 0;
if (which == 0) if (which == 0)

View File

@ -197,7 +197,7 @@ void NPairMultiOld<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else
@ -216,7 +216,7 @@ void NPairMultiOld<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -173,7 +173,7 @@ void NPairNsq<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else
@ -192,7 +192,7 @@ void NPairNsq<HALF, NEWTON, TRI, SIZE>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -127,10 +127,9 @@ void NPairNsqGhost<HALF>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i],nspecial[i],tag[j]); which = find_special(special[i],nspecial[i],tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
onemols[imol]->nspecial[iatom], tag[j] - tagprev);
tag[j]-tagprev);
else which = 0; else which = 0;
if (which == 0) neighptr[n++] = j; if (which == 0) neighptr[n++] = j;
else if (domain->minimum_image_check(delx,dely,delz)) else if (domain->minimum_image_check(delx,dely,delz))

View File

@ -192,7 +192,7 @@ void NPairRespaBin<NEWTON, TRI>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else

View File

@ -179,7 +179,7 @@ void NPairRespaNsq<NEWTON, TRI>::build(NeighList *list)
if (molecular != Atom::ATOMIC) { if (molecular != Atom::ATOMIC) {
if (!moltemplate) if (!moltemplate)
which = find_special(special[i], nspecial[i], tag[j]); which = find_special(special[i], nspecial[i], tag[j]);
else if (imol >= 0) else if ((imol >= 0) && onemols[imol]->special)
which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom], which = find_special(onemols[imol]->special[iatom], onemols[imol]->nspecial[iatom],
tag[j] - tagprev); tag[j] - tagprev);
else else