more changes to rRESPA neighbor lists

This commit is contained in:
Steve Plimpton 2017-10-17 17:33:01 -06:00
parent 59de1a71c8
commit 0966e14e73
41 changed files with 417 additions and 624 deletions

View File

@ -225,10 +225,10 @@ void PairLJCutCoulLongCS::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -311,10 +311,10 @@ void PairLJCutCoulLongCS::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -412,10 +412,10 @@ void PairLJCutCoulLongCS::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];

View File

@ -233,7 +233,8 @@ void PairBuckLongCoulLong::init_style()
if (!atom->q_flag && (ewald_order&(1<<1)))
error->all(FLERR,
"Invoking coulombic in pair style buck/long/coul/long requires atom attribute q");
"Invoking coulombic in pair style buck/long/coul/long "
"requires atom attribute q");
// ensure use of KSpace long-range solver, set two g_ewalds
@ -258,51 +259,25 @@ void PairBuckLongCoulLong::init_style()
if (force->kspace->neighrequest_flag) {
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
}
cut_coulsq = cut_coul * cut_coul;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairBuckLongCoulLong::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
@ -651,14 +626,14 @@ void PairBuckLongCoulLong::compute_inner()
double qri, *cut_bucksqi, *buck1i, *buck2i, *rhoinvi;
vector xi, d;
ineighn = (ineigh = listinner->ilist) + listinner->inum;
ineighn = (ineigh = list->ilist_inner) + list->inum_inner;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
if (order1) qri = qqrd2e*q[i];
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
cut_bucksqi = cut_bucksq[typei = type[i]];
buck1i = buck1[typei]; buck2i = buck2[typei]; rhoinvi = rhoinv[typei];
jneighn = (jneigh = listinner->firstneigh[i])+listinner->numneigh[i];
jneighn = (jneigh = list->firstneigh_inner[i])+list->numneigh_inner[i];
for (; jneigh<jneighn; ++jneigh) { // loop over neighbors
j = *jneigh;
@ -740,7 +715,7 @@ void PairBuckLongCoulLong::compute_middle()
double qri, *cut_bucksqi, *buck1i, *buck2i, *rhoinvi;
vector xi, d;
ineighn = (ineigh = listmiddle->ilist)+listmiddle->inum;
ineighn = (ineigh = list->ilist_middle)+list->inum_middle;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
@ -748,7 +723,7 @@ void PairBuckLongCoulLong::compute_middle()
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
cut_bucksqi = cut_bucksq[typei = type[i]];
buck1i = buck1[typei]; buck2i = buck2[typei]; rhoinvi = rhoinv[typei];
jneighn = (jneigh = listmiddle->firstneigh[i])+listmiddle->numneigh[i];
jneighn = (jneigh = list->firstneigh_middle[i])+list->numneigh_middle[i];
for (; jneigh<jneighn; ++jneigh) { // loop over neighbors
j = *jneigh;
@ -839,7 +814,7 @@ void PairBuckLongCoulLong::compute_outer(int eflag, int vflag)
double cut_in_off_sq = cut_in_off*cut_in_off;
double cut_in_on_sq = cut_in_on*cut_in_on;
ineighn = (ineigh = listouter->ilist)+listouter->inum;
ineighn = (ineigh = list->ilist)+list->inum;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
@ -849,7 +824,7 @@ void PairBuckLongCoulLong::compute_outer(int eflag, int vflag)
buckai = buck_a[typei]; buckci = buck_c[typei]; rhoinvi = rhoinv[typei];
cutsqi = cutsq[typei]; cut_bucksqi = cut_bucksq[typei];
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
jneighn = (jneigh = listouter->firstneigh[i])+listouter->numneigh[i];
jneighn = (jneigh = list->firstneigh[i])+list->numneigh[i];
for (; jneigh<jneighn; ++jneigh) { // loop over neighbors
j = *jneigh;

View File

@ -35,7 +35,6 @@ class PairBuckLongCoulLong : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -242,10 +242,10 @@ void PairLJCharmmCoulLong::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
// loop over neighbors of my atoms
@ -320,10 +320,10 @@ void PairLJCharmmCoulLong::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
// loop over neighbors of my atoms
@ -417,10 +417,10 @@ void PairLJCharmmCoulLong::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms
@ -687,36 +687,23 @@ void PairLJCharmmCoulLong::init_style()
error->all(FLERR,
"Pair style lj/charmm/coul/long requires atom attribute q");
// request regular or rRESPA neighbor lists
// request regular or rRESPA neighbor list
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
// require cut_lj_inner < cut_lj
@ -767,19 +754,6 @@ void PairLJCharmmCoulLong::init_style()
if (ncoultablebits) init_tables(cut_coul,cut_respa);
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCharmmCoulLong::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -33,7 +33,6 @@ class PairLJCharmmCoulLong : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
virtual void init_style();
void init_list(int, class NeighList *);
virtual double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -278,10 +278,10 @@ void PairLJCharmmCoulMSM::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];

View File

@ -274,10 +274,10 @@ void PairLJCharmmfswCoulLong::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -359,10 +359,10 @@ void PairLJCharmmfswCoulLong::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -465,10 +465,10 @@ void PairLJCharmmfswCoulLong::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -824,19 +824,6 @@ void PairLJCharmmfswCoulLong::init_style()
if (ncoultablebits) init_tables(cut_coul,cut_respa);
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCharmmfswCoulLong::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -33,7 +33,6 @@ class PairLJCharmmfswCoulLong : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
virtual void init_style();
void init_list(int, class NeighList *);
virtual double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -224,10 +224,10 @@ void PairLJCutCoulLong::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -309,10 +309,10 @@ void PairLJCutCoulLong::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -410,10 +410,10 @@ void PairLJCutCoulLong::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -656,36 +656,23 @@ void PairLJCutCoulLong::init_style()
if (!atom->q_flag)
error->all(FLERR,"Pair style lj/cut/coul/long requires atom attribute q");
// request regular or rRESPA neighbor lists
// request regular or rRESPA neighbor list
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
cut_coulsq = cut_coul * cut_coul;
@ -707,19 +694,6 @@ void PairLJCutCoulLong::init_style()
if (ncoultablebits) init_tables(cut_coul,cut_respa);
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCutCoulLong::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -33,7 +33,6 @@ class PairLJCutCoulLong : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
virtual void init_style();
void init_list(int, class NeighList *);
virtual double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -265,10 +265,10 @@ void PairLJCutCoulMSM::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];

View File

@ -253,51 +253,25 @@ void PairLJLongCoulLong::init_style()
if (force->kspace->neighrequest_flag) {
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
} else irequest = neighbor->request(this,instance_me);
}
irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
}
cut_coulsq = cut_coul * cut_coul;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJLongCoulLong::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
@ -649,13 +623,13 @@ void PairLJLongCoulLong::compute_inner()
double qri, *cut_ljsqi, *lj1i, *lj2i;
vector xi, d;
ineighn = (ineigh = listinner->ilist)+listinner->inum;
ineighn = (ineigh = list->ilist_inner)+list->inum_inner;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
cut_ljsqi = cut_ljsq[typei = type[i]];
lj1i = lj1[typei]; lj2i = lj2[typei];
jneighn = (jneigh = listinner->firstneigh[i])+listinner->numneigh[i];
jneighn = (jneigh = list->firstneigh_inner[i])+list->numneigh_inner[i];
for (; jneigh<jneighn; ++jneigh) { // loop over neighbors
j = *jneigh;
ni = sbmask(j);
@ -736,7 +710,7 @@ void PairLJLongCoulLong::compute_middle()
double qri, *cut_ljsqi, *lj1i, *lj2i;
vector xi, d;
ineighn = (ineigh = listmiddle->ilist)+listmiddle->inum;
ineighn = (ineigh = list->ilist_middle)+list->inum_middle;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
@ -744,7 +718,7 @@ void PairLJLongCoulLong::compute_middle()
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
cut_ljsqi = cut_ljsq[typei = type[i]];
lj1i = lj1[typei]; lj2i = lj2[typei];
jneighn = (jneigh = listmiddle->firstneigh[i])+listmiddle->numneigh[i];
jneighn = (jneigh = list->firstneigh_middle[i])+list->numneigh_middle[i];
for (; jneigh<jneighn; ++jneigh) {
j = *jneigh;
@ -833,7 +807,7 @@ void PairLJLongCoulLong::compute_outer(int eflag, int vflag)
double cut_in_off_sq = cut_in_off*cut_in_off;
double cut_in_on_sq = cut_in_on*cut_in_on;
ineighn = (ineigh = listouter->ilist)+listouter->inum;
ineighn = (ineigh = list->ilist)+list->inum;
for (; ineigh<ineighn; ++ineigh) { // loop over my atoms
i = *ineigh; fi = f0+3*i;
@ -842,7 +816,7 @@ void PairLJLongCoulLong::compute_outer(int eflag, int vflag)
lj1i = lj1[typei]; lj2i = lj2[typei]; lj3i = lj3[typei]; lj4i = lj4[typei];
cutsqi = cutsq[typei]; cut_ljsqi = cut_ljsq[typei];
memcpy(xi, x0+(i+(i<<1)), sizeof(vector));
jneighn = (jneigh = listouter->firstneigh[i])+listouter->numneigh[i];
jneighn = (jneigh = list->firstneigh[i])+list->numneigh[i];
for (; jneigh<jneighn; ++jneigh) { // loop over neighbors
j = *jneigh;

View File

@ -34,7 +34,6 @@ class PairLJLongCoulLong : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -516,10 +516,10 @@ void PairLJLongTIP4PLong::compute_inner()
int ni;
double *lj1i, *lj2i;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
// loop over neighbors of my atoms
@ -769,10 +769,10 @@ void PairLJLongTIP4PLong::compute_middle()
int ni;
double *lj1i, *lj2i;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
// loop over neighbors of my atoms
@ -1049,10 +1049,10 @@ void PairLJLongTIP4PLong::compute_outer(int eflag, int vflag)
double cut_in_off_sq = cut_in_off*cut_in_off;
double cut_in_on_sq = cut_in_on*cut_in_on;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms

View File

@ -226,10 +226,10 @@ void PairLJCharmmCoulLongSoft::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -315,10 +315,10 @@ void PairLJCharmmCoulLongSoft::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -428,10 +428,10 @@ void PairLJCharmmCoulLongSoft::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -758,19 +758,6 @@ void PairLJCharmmCoulLongSoft::init_style()
g_ewald = force->kspace->g_ewald;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCharmmCoulLongSoft::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -33,7 +33,6 @@ class PairLJCharmmCoulLongSoft : public Pair {
void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -209,10 +209,10 @@ void PairLJCutCoulLongSoft::compute_inner()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -299,10 +299,10 @@ void PairLJCutCoulLongSoft::compute_middle()
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -403,10 +403,10 @@ void PairLJCutCoulLongSoft::compute_outer(int eflag, int vflag)
int newton_pair = force->newton_pair;
double qqrd2e = force->qqrd2e;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];

View File

@ -32,7 +32,6 @@ class PairLJCutCoulLongSoft : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
virtual void init_style();
void init_list(int, class NeighList *);
virtual double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -164,10 +164,10 @@ void PairLJCutSoft::compute_inner()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -242,10 +242,10 @@ void PairLJCutSoft::compute_middle()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -333,10 +333,10 @@ void PairLJCutSoft::compute_outer(int eflag, int vflag)
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -556,19 +556,6 @@ void PairLJCutSoft::init_style()
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCutSoft::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -32,7 +32,6 @@ class PairLJCutSoft : public Pair {
virtual void settings(int, char **);
void coeff(int, char **);
virtual void init_style();
void init_list(int, class NeighList *);
virtual double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -246,6 +246,7 @@ void Min::setup(int flag)
domain->box_too_small_check();
modify->setup_pre_neighbor();
neighbor->build();
modify->setup_post_neighbor();
neighbor->ncalls = 0;
// remove these restriction eventually
@ -345,6 +346,7 @@ void Min::setup_minimal(int flag)
domain->box_too_small_check();
modify->setup_pre_neighbor();
neighbor->build();
modify->setup_post_neighbor();
neighbor->ncalls = 0;
}
@ -503,12 +505,15 @@ double Min::energy_force(int resetflag)
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
timer->stamp(Timer::COMM);
if (modify->n_min_pre_neighbor) {
timer->stamp();
modify->min_pre_neighbor();
timer->stamp(Timer::MODIFY);
}
neighbor->build();
timer->stamp(Timer::NEIGH);
if (modify->n_min_post_neighbor) {
modify->min_post_neighbor();
timer->stamp(Timer::MODIFY);
}
}
ev_set(update->ntimestep);

View File

@ -47,6 +47,9 @@ NeighList::NeighList(LAMMPS *lmp) : Pointers(lmp)
ghost = 0;
ssa = 0;
history = 0;
respaouter = 0;
respamiddle = 0;
respainner = 0;
copy = 0;
copymode = 0;
@ -59,14 +62,25 @@ NeighList::NeighList(LAMMPS *lmp) : Pointers(lmp)
listskip = NULL;
listfull = NULL;
respamiddle = 0;
listinner = NULL;
listmiddle = NULL;
fix_bond = NULL;
ipage = NULL;
// extra rRESPA lists
inum_inner = gnum_inner = 0;
ilist_inner = NULL;
numneigh_inner = NULL;
firstneigh_inner = NULL;
inum_middle = gnum_middle = 0;
ilist_middle = NULL;
numneigh_middle = NULL;
firstneigh_middle = NULL;
ipage_inner = NULL;
ipage_middle = NULL;
// Kokkos package
kokkos = 0;
@ -90,6 +104,20 @@ NeighList::~NeighList()
delete [] ipage;
}
if (respainner) {
memory->destroy(ilist_inner);
memory->destroy(numneigh_inner);
memory->sfree(firstneigh_inner);
delete [] ipage_inner;
}
if (respamiddle) {
memory->destroy(ilist_middle);
memory->destroy(numneigh_middle);
memory->sfree(firstneigh_middle);
delete [] ipage_middle;
}
delete [] iskip;
memory->destroy(ijskip);
}
@ -100,7 +128,7 @@ NeighList::~NeighList()
copy -> set listcopy for list to copy from
skip -> set listskip for list to skip from, create copy of itype,ijtype
halffull -> set listfull for full list to derive from
respaouter -> set listinner/listmiddle for other rRESPA lists
respaouter -> set all 3 outer/middle/inner flags
bond -> set fix_bond to Fix that made the request
------------------------------------------------------------------------- */
@ -112,6 +140,9 @@ void NeighList::post_constructor(NeighRequest *nq)
ghost = nq->ghost;
ssa = nq->ssa;
history = nq->history;
respaouter = nq->respaouter;
respamiddle = nq->respamiddle;
respainner = nq->respainner;
copy = nq->copy;
if (nq->copy)
@ -132,17 +163,6 @@ void NeighList::post_constructor(NeighRequest *nq)
if (nq->halffull)
listfull = neighbor->lists[nq->halffulllist];
if (nq->respaouter) {
if (nq->respamiddlelist < 0) {
respamiddle = 0;
listinner = neighbor->lists[nq->respainnerlist];
} else {
respamiddle = 1;
listmiddle = neighbor->lists[nq->respamiddlelist];
listinner = neighbor->lists[nq->respainnerlist];
}
}
if (nq->bond) fix_bond = (Fix *) nq->requestor;
}
@ -157,25 +177,28 @@ void NeighList::setup_pages(int pgsize_caller, int oneatom_caller)
ipage = new MyPage<int>[nmypage];
for (int i = 0; i < nmypage; i++)
ipage[i].init(oneatom,pgsize,PGDELTA);
if (respainner) {
ipage_inner = new MyPage<int>[nmypage];
for (int i = 0; i < nmypage; i++)
ipage_inner[i].init(oneatom,pgsize,PGDELTA);
}
if (respamiddle) {
ipage_middle = new MyPage<int>[nmypage];
for (int i = 0; i < nmypage; i++)
ipage_middle[i].init(oneatom,pgsize,PGDELTA);
}
}
/* ----------------------------------------------------------------------
grow per-atom data to allow for nlocal/nall atoms
for parent lists:
also trigger grow in child list(s) which are not built themselves
history calls grow() in listhistory
respaouter calls grow() in respainner, respamiddle
triggered by neighbor list build
not called if a copy list
------------------------------------------------------------------------- */
void NeighList::grow(int nlocal, int nall)
{
// trigger grow() in children before possible return
if (listinner) listinner->grow(nlocal,nall);
if (listmiddle) listmiddle->grow(nlocal,nall);
// skip if data structs are already big enough
if (ssa) {
@ -196,6 +219,26 @@ void NeighList::grow(int nlocal, int nall)
memory->create(numneigh,maxatom,"neighlist:numneigh");
firstneigh = (int **) memory->smalloc(maxatom*sizeof(int *),
"neighlist:firstneigh");
if (respainner) {
memory->destroy(ilist_inner);
memory->destroy(numneigh_inner);
memory->sfree(firstneigh_inner);
memory->create(ilist_inner,maxatom,"neighlist:ilist_inner");
memory->create(numneigh_inner,maxatom,"neighlist:numneigh_inner");
firstneigh_inner = (int **) memory->smalloc(maxatom*sizeof(int *),
"neighlist:firstneigh_inner");
}
if (respamiddle) {
memory->destroy(ilist_middle);
memory->destroy(numneigh_middle);
memory->sfree(firstneigh_middle);
memory->create(ilist_middle,maxatom,"neighlist:ilist_middle");
memory->create(numneigh_middle,maxatom,"neighlist:numneigh_middle");
firstneigh_middle = (int **) memory->smalloc(maxatom*sizeof(int *),
"neighlist:firstneigh_middle");
}
}
/* ----------------------------------------------------------------------
@ -226,9 +269,9 @@ void NeighList::print_attributes()
printf(" %d = size\n",rq->size);
printf(" %d = history\n",rq->history);
printf(" %d = granonesided\n",rq->granonesided);
printf(" %d = respainner\n",rq->respainner);
printf(" %d = respamiddle\n",rq->respamiddle);
printf(" %d = respaouter\n",rq->respaouter);
printf(" %d = respamiddle\n",rq->respamiddle);
printf(" %d = respainner\n",rq->respainner);
printf(" %d = bond\n",rq->bond);
printf(" %d = omp\n",rq->omp);
printf(" %d = intel\n",rq->intel);
@ -263,5 +306,25 @@ bigint NeighList::memory_usage()
bytes += ipage[i].size();
}
if (respainner) {
bytes += memory->usage(ilist_inner,maxatom);
bytes += memory->usage(numneigh_inner,maxatom);
bytes += maxatom * sizeof(int *);
if (ipage_inner) {
for (int i = 0; i < nmypage; i++)
bytes += ipage_inner[i].size();
}
}
if (respamiddle) {
bytes += memory->usage(ilist_middle,maxatom);
bytes += memory->usage(numneigh_middle,maxatom);
bytes += maxatom * sizeof(int *);
if (ipage_middle) {
for (int i = 0; i < nmypage; i++)
bytes += ipage_middle[i].size();
}
}
return bytes;
}

View File

@ -35,6 +35,9 @@ class NeighList : protected Pointers {
int ghost; // 1 if list stores neighbors of ghosts
int ssa; // 1 if list stores Shardlow data
int history; // 1 if there is neigh history (FixNeighHist)
int respaouter; // 1 if list is a rRespa outer list
int respamiddle; // 1 if there is also a rRespa middle list
int respainner; // 1 if there is also a rRespa inner list
int copy; // 1 if this list is copied from another list
int copymode; // 1 if this is a Kokkos on-device copy
@ -51,6 +54,23 @@ class NeighList : protected Pointers {
int oneatom; // max size for one atom
MyPage<int> *ipage; // pages of neighbor indices
// data structs to store rRESPA neighbor pairs I,J and associated values
int inum_inner; // # of I atoms neighbors are stored for
int gnum_inner; // # of ghost atoms neighbors are stored for
int *ilist_inner; // local indices of I atoms
int *numneigh_inner; // # of J neighbors for each I atom
int **firstneigh_inner; // ptr to 1st J int value of each I atom
int inum_middle; // # of I atoms neighbors are stored for
int gnum_middle; // # of ghost atoms neighbors are stored for
int *ilist_middle; // local indices of I atoms
int *numneigh_middle; // # of J neighbors for each I atom
int **firstneigh_middle; // ptr to 1st J int value of each I atom
MyPage<int> *ipage_inner; // pages of neighbor indices for inner
MyPage<int> *ipage_middle; // pages of neighbor indices for middle
// atom types to skip when building list
// copied info from corresponding request into realloced vec/array
@ -63,10 +83,6 @@ class NeighList : protected Pointers {
NeighList *listskip; // me = skip list, point to list I skip from
NeighList *listfull; // me = half list, point to full I derive from
int respamiddle; // 1 if this respaouter has middle list
NeighList *listinner; // me = respaouter, point to respainner
NeighList *listmiddle; // me = respaouter, point to respamiddle
class Fix *fix_bond; // fix that stores bond info
// Kokkos package

View File

@ -86,9 +86,6 @@ NeighRequest::NeighRequest(LAMMPS *lmp) : Pointers(lmp)
copylist = -1;
halffull = 0;
halffulllist = -1;
respaouterlist = -1;
respamiddlelist = -1;
respainnerlist = -1;
unique = 0;
// internal settings

View File

@ -62,9 +62,9 @@ class NeighRequest : protected Pointers {
int history; // 1 if there is also neigh history info (FixNeighHist)
int granonesided; // 1 if one-sided granular list for
// sphere/surf interactions
int respainner; // 1 if a rRESPA inner list
int respamiddle; // 1 if a rRESPA middle list
int respaouter; // 1 if a rRESPA outer list
int respainner; // 1 if need a rRESPA inner list
int respamiddle; // 1 if need a rRESPA middle list
int respaouter; // 1 if need a rRESPA outer list
int bond; // 1 if store bond neighbors instead of atom neighs
int omp; // set by USER-OMP package
int intel; // set by USER-INTEL package
@ -98,17 +98,9 @@ class NeighRequest : protected Pointers {
int halffull; // 1 if half list computed from another full list
int halffulllist; // index of full list to derive half from
int respaouterlist; // index of respaouter/middle/inner lists
int respamiddlelist; // which this rREPSA list is associated with
int respainnerlist; // each rRESPA style list points at the others
int unique; // 1 if this list requires its own
// NStencil, Nbin class - because of requestor cutoff
// pointer to FSH class, set by requestor class (not by Neighbor)
class FixShearHistory *fix_history; // fix that stores per-atom history info
// -----------------------------
// internal settings made by Neighbor class
// -----------------------------

View File

@ -662,7 +662,7 @@ int Neighbor::init_pair()
// purpose is to avoid duplicate or inefficient builds
// may add new requests if a needed request to derive from does not exist
// methods:
// (1) other = point rRESPA lists at their partner lists
// (1) unique = create unique lists if cutoff is explicitly set
// (2) skip = create any new non-skip lists needed by pair hybrid skip lists
// (3) granular = adjust parent and skip lists for granular onesided usage
// (4) h/f = pair up any matching half/full lists
@ -675,7 +675,7 @@ int Neighbor::init_pair()
int nrequest_original = nrequest;
morph_other();
morph_unique();
morph_skip();
morph_granular(); // this method can change flags set by requestor
morph_halffull();
@ -828,7 +828,6 @@ int Neighbor::init_pair()
}
// first-time allocation of per-atom data for lists that are built and store
// lists that are not built: respa inner/middle (no neigh_pair)
// lists that do not store: copy
// use atom->nmax for both grow() args
// i.e. grow first time to expanded size to avoid future reallocs
@ -908,32 +907,16 @@ int Neighbor::init_pair()
/* ----------------------------------------------------------------------
scan NeighRequests to set additional flags
only for respaouter, custom cutoff lists
only for custom cutoff lists
------------------------------------------------------------------------- */
void Neighbor::morph_other()
void Neighbor::morph_unique()
{
NeighRequest *irq;
for (int i = 0; i < nrequest; i++) {
irq = requests[i];
// if respaouter, point all associated rRESPA lists at each other
if (irq->respaouter) {
if (requests[i-1]->respainner) {
irq->respainnerlist = i-1;
requests[i-1]->respaouterlist = i;
} else {
irq->respamiddlelist = i-1;
requests[i-1]->respaouterlist = i;
requests[i-1]->respainnerlist = i-1;
irq->respainnerlist = i-2;
requests[i-2]->respaouterlist = i;
requests[i-2]->respamiddlelist = i-1;
}
}
// if cut flag set by requestor, set unique flag
// this forces Pair,Stencil,Bin styles to be instantiated separately
@ -964,7 +947,6 @@ void Neighbor::morph_skip()
// halffull list and its full parent may both skip,
// but are checked to insure matching skip info
if (irq->respainner || irq->respamiddle) continue;
if (irq->halffull) continue;
if (irq->copy) continue;
@ -997,7 +979,6 @@ void Neighbor::morph_skip()
// else 2 lists do not store same pairs
// or their data structures are different
// this includes custom cutoff set by requestor
// no need to check respaouter b/c it stores same pairs
// NOTE: need check for 2 Kokkos flags?
if (irq->ghost != jrq->ghost) continue;
@ -1134,7 +1115,6 @@ void Neighbor::morph_halffull()
// these lists are created other ways, no need for halffull
// do want to process skip lists
if (irq->respainner || irq->respamiddle) continue;
if (irq->copy) continue;
// check all other lists
@ -1153,7 +1133,6 @@ void Neighbor::morph_halffull()
// else 2 lists do not store same pairs
// or their data structures are different
// this includes custom cutoff set by requestor
// no need to check respaouter b/c it stores same pairs
if (irq->ghost != jrq->ghost) continue;
if (irq->size != jrq->size) continue;
@ -1204,11 +1183,6 @@ void Neighbor::morph_copy()
if (irq->copy) continue;
// these lists are created other ways, no need to copy
// skip lists are eligible to become a copy list
if (irq->respainner || irq->respamiddle) continue;
// check all other lists
for (j = 0; j < nrequest; j++) {
@ -1245,7 +1219,8 @@ void Neighbor::morph_copy()
if (irq->ghost && !jrq->ghost) continue;
// do not copy from a respa middle/inner list
// do not copy from a list with respa middle/inner
// b/c its outer list will not be complete
if (jrq->respamiddle) continue;
if (jrq->respainner) continue;
@ -1254,7 +1229,6 @@ void Neighbor::morph_copy()
// else 2 lists do not store same pairs
// or their data structures are different
// this includes custom cutoff set by requestor
// no need to check respaouter b/c it stores same pairs
// no need to check omp b/c it stores same pairs
// NOTE: need check for 2 Kokkos flags?
@ -1532,9 +1506,8 @@ void Neighbor::print_pairwise_info()
if (rq->size) fprintf(out,", size");
if (rq->history) fprintf(out,", history");
if (rq->granonesided) fprintf(out,", onesided");
if (rq->respainner) fprintf(out,", respa outer");
if (rq->respamiddle) fprintf(out,", respa middle");
if (rq->respaouter) fprintf(out,", respa inner");
if (rq->respamiddle) fprintf(out,", respa outer/middle/inner");
else if (rq->respainner) fprintf(out,", respa outer/inner");
if (rq->bond) fprintf(out,", bond");
if (rq->omp) fprintf(out,", omp");
if (rq->intel) fprintf(out,", intel");
@ -1629,7 +1602,6 @@ int Neighbor::choose_bin(NeighRequest *rq)
if (style == NSQ) return 0;
if (rq->skip || rq->copy || rq->halffull) return 0;
if (rq->respainner || rq->respamiddle) return 0;
// use request settings to match exactly one NBin class mask
// checks are bitwise using NeighConst bit masks
@ -1670,7 +1642,6 @@ int Neighbor::choose_stencil(NeighRequest *rq)
if (style == NSQ) return 0;
if (rq->skip || rq->copy || rq->halffull) return 0;
if (rq->respainner || rq->respamiddle) return 0;
// convert newton request to newtflag = on or off
@ -1761,10 +1732,6 @@ int Neighbor::choose_stencil(NeighRequest *rq)
int Neighbor::choose_pair(NeighRequest *rq)
{
// no neighbor list build performed
if (rq->respainner || rq->respamiddle) return 0;
// error check for includegroup with ghost neighbor request
if (includegroup && rq->ghost)

View File

@ -204,7 +204,7 @@ class Neighbor : protected Pointers {
int init_pair();
virtual void init_topology();
void morph_other();
void morph_unique();
void morph_skip();
void morph_granular();
void morph_halffull();

View File

@ -63,22 +63,19 @@ void NPairHalfRespaBinNewtoff::build(NeighList *list)
int **firstneigh = list->firstneigh;
MyPage<int> *ipage = list->ipage;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
}
int inum = 0;
@ -185,6 +182,6 @@ void NPairHalfRespaBinNewtoff::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -62,22 +62,19 @@ void NPairHalfRespaBinNewton::build(NeighList *list)
int **firstneigh = list->firstneigh;
MyPage<int> *ipage = list->ipage;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
}
int inum = 0;
@ -231,6 +228,6 @@ void NPairHalfRespaBinNewton::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -63,22 +63,19 @@ void NPairHalfRespaBinNewtonTri::build(NeighList *list)
int **firstneigh = list->firstneigh;
MyPage<int> *ipage = list->ipage;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
}
int inum = 0;
@ -193,6 +190,6 @@ void NPairHalfRespaBinNewtonTri::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -67,22 +67,19 @@ void NPairHalfRespaNsqNewtoff::build(NeighList *list)
int **firstneigh = list->firstneigh;
MyPage<int> *ipage = list->ipage;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
}
int inum = 0;
@ -180,6 +177,6 @@ void NPairHalfRespaNsqNewtoff::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -69,22 +69,19 @@ void NPairHalfRespaNsqNewton::build(NeighList *list)
int **firstneigh = list->firstneigh;
MyPage<int> *ipage = list->ipage;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
}
int inum = 0;
@ -200,6 +197,6 @@ void NPairHalfRespaNsqNewton::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -53,28 +53,24 @@ void NPairSkipRespa::build(NeighList *list)
int *iskip = list->iskip;
int **ijskip = list->ijskip;
NeighList *listinner = list->listinner;
int *ilist_inner = listinner->ilist;
int *numneigh_inner = listinner->numneigh;
int **firstneigh_inner = listinner->firstneigh;
MyPage<int> *ipage_inner = listinner->ipage;
int *ilist_inner = list->ilist_inner;
int *numneigh_inner = list->numneigh_inner;
int **firstneigh_inner = list->firstneigh_inner;
MyPage<int> *ipage_inner = list->ipage_inner;
int *numneigh_inner_skip = list->listskip->numneigh_inner;
int **firstneigh_inner_skip = list->listskip->firstneigh_inner;
int *numneigh_inner_skip = list->listskip->listinner->numneigh;
int **firstneigh_inner_skip = list->listskip->listinner->firstneigh;
NeighList *listmiddle;
int *ilist_middle,*numneigh_middle,**firstneigh_middle;
MyPage<int> *ipage_middle;
int *numneigh_middle_skip,**firstneigh_middle_skip;
int respamiddle = list->respamiddle;
if (respamiddle) {
listmiddle = list->listmiddle;
ilist_middle = listmiddle->ilist;
numneigh_middle = listmiddle->numneigh;
firstneigh_middle = listmiddle->firstneigh;
ipage_middle = listmiddle->ipage;
numneigh_middle_skip = list->listskip->listmiddle->numneigh;
firstneigh_middle_skip = list->listskip->listmiddle->firstneigh;
ilist_middle = list->ilist_middle;
numneigh_middle = list->numneigh_middle;
firstneigh_middle = list->firstneigh_middle;
ipage_middle = list->ipage_middle;
numneigh_middle_skip = list->listskip->numneigh_middle;
firstneigh_middle_skip = list->listskip->firstneigh_middle;
}
int inum = 0;
@ -164,6 +160,6 @@ void NPairSkipRespa::build(NeighList *list)
}
list->inum = inum;
listinner->inum = inum;
if (respamiddle) listmiddle->inum = inum;
list->inum_inner = inum;
if (respamiddle) list->inum_middle = inum;
}

View File

@ -92,10 +92,6 @@ class Pair : protected Pointers {
class NeighList *list; // standard neighbor list used by most pairs
class NeighList *listhalf; // half list used by some pairs
class NeighList *listfull; // full list used by some pairs
class NeighList *listhistory; // neighbor history list used by some pairs
class NeighList *listinner; // rRESPA lists used by some pairs
class NeighList *listmiddle;
class NeighList *listouter;
int allocated; // 0/1 = whether arrays are allocated
// public so external driver can check

View File

@ -157,10 +157,10 @@ void PairLJ96Cut::compute_inner()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -231,10 +231,10 @@ void PairLJ96Cut::compute_middle()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -318,10 +318,10 @@ void PairLJ96Cut::compute_outer(int eflag, int vflag)
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -487,36 +487,23 @@ void PairLJ96Cut::coeff(int narg, char **arg)
void PairLJ96Cut::init_style()
{
// request regular or rRESPA neighbor lists
// request regular or rRESPA neighbor list
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
// set rRESPA cutoffs
@ -526,19 +513,6 @@ void PairLJ96Cut::init_style()
else cut_respa = NULL;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJ96Cut::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -33,7 +33,6 @@ class PairLJ96Cut : public Pair {
void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -156,10 +156,10 @@ void PairLJCut::compute_inner()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -229,10 +229,10 @@ void PairLJCut::compute_middle()
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -315,10 +315,10 @@ void PairLJCut::compute_outer(int eflag, int vflag)
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -481,36 +481,23 @@ void PairLJCut::coeff(int narg, char **arg)
void PairLJCut::init_style()
{
// request regular or rRESPA neighbor lists
// request regular or rRESPA neighbor list
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
// set rRESPA cutoffs
@ -520,19 +507,6 @@ void PairLJCut::init_style()
else cut_respa = NULL;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairLJCut::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -32,7 +32,6 @@ class PairLJCut : public Pair {
void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -159,10 +159,10 @@ void PairMIECut::compute_inner()
double *special_mie = force->special_lj;
int newton_pair = force->newton_pair;
inum = listinner->inum;
ilist = listinner->ilist;
numneigh = listinner->numneigh;
firstneigh = listinner->firstneigh;
inum = list->inum_inner;
ilist = list->ilist_inner;
numneigh = list->numneigh_inner;
firstneigh = list->firstneigh_inner;
double cut_out_on = cut_respa[0];
double cut_out_off = cut_respa[1];
@ -233,10 +233,10 @@ void PairMIECut::compute_middle()
double *special_mie = force->special_lj;
int newton_pair = force->newton_pair;
inum = listmiddle->inum;
ilist = listmiddle->ilist;
numneigh = listmiddle->numneigh;
firstneigh = listmiddle->firstneigh;
inum = list->inum_middle;
ilist = list->ilist_middle;
numneigh = list->numneigh_middle;
firstneigh = list->firstneigh_middle;
double cut_in_off = cut_respa[0];
double cut_in_on = cut_respa[1];
@ -320,10 +320,10 @@ void PairMIECut::compute_outer(int eflag, int vflag)
double *special_mie = force->special_lj;
int newton_pair = force->newton_pair;
inum = listouter->inum;
ilist = listouter->ilist;
numneigh = listouter->numneigh;
firstneigh = listouter->firstneigh;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
double cut_in_off = cut_respa[2];
double cut_in_on = cut_respa[3];
@ -496,36 +496,23 @@ void PairMIECut::coeff(int narg, char **arg)
void PairMIECut::init_style()
{
// request regular or rRESPA neighbor lists
// request regular or rRESPA neighbor list
int irequest;
int respa = 0;
if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) {
int respa = 0;
if (((Respa *) update->integrate)->level_inner >= 0) respa = 1;
if (((Respa *) update->integrate)->level_middle >= 0) respa = 2;
}
if (respa == 0) irequest = neighbor->request(this,instance_me);
else if (respa == 1) {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
} else {
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 1;
neighbor->requests[irequest]->respainner = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 2;
neighbor->requests[irequest]->respamiddle = 1;
irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->id = 3;
neighbor->requests[irequest]->respaouter = 1;
}
irequest = neighbor->request(this,instance_me);
} else irequest = neighbor->request(this,instance_me);
if (respa >= 1) {
neighbor->requests[irequest]->respaouter = 1;
neighbor->requests[irequest]->respainner = 1;
}
if (respa == 2) neighbor->requests[irequest]->respamiddle = 1;
// set rRESPA cutoffs
@ -535,19 +522,6 @@ void PairMIECut::init_style()
else cut_respa = NULL;
}
/* ----------------------------------------------------------------------
neighbor callback to inform pair style of neighbor list to use
regular or rRESPA
------------------------------------------------------------------------- */
void PairMIECut::init_list(int id, NeighList *ptr)
{
if (id == 0) list = ptr;
else if (id == 1) listinner = ptr;
else if (id == 2) listmiddle = ptr;
else if (id == 3) listouter = ptr;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */

View File

@ -32,7 +32,6 @@ class PairMIECut : public Pair {
void settings(int, char **);
void coeff(int, char **);
void init_style();
void init_list(int, class NeighList *);
double init_one(int, int);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -442,6 +442,7 @@ void Respa::setup(int flag)
domain->box_too_small_check();
modify->setup_pre_neighbor();
neighbor->build();
modify->setup_post_neighbor();
neighbor->ncalls = 0;
// compute all forces
@ -517,6 +518,7 @@ void Respa::setup_minimal(int flag)
domain->box_too_small_check();
modify->setup_pre_neighbor();
neighbor->build();
modify->setup_post_neighbor();
neighbor->ncalls = 0;
}
@ -668,6 +670,11 @@ void Respa::recurse(int ilevel)
}
neighbor->build();
timer->stamp(Timer::NEIGH);
if (modify->n_post_neighbor) {
modify->post_neighbor();
timer->stamp(Timer::MODIFY);
}
} else if (ilevel == 0) {
timer->stamp();
comm->forward_comm();