diff --git a/src/KSPACE/ewald.cpp b/src/KSPACE/ewald.cpp index 04ebd7eb82..e6e4863c57 100644 --- a/src/KSPACE/ewald.cpp +++ b/src/KSPACE/ewald.cpp @@ -94,7 +94,7 @@ void Ewald::init() if (slabflag == 0 && domain->nonperiodic > 0) error->all(FLERR,"Cannot use nonperiodic boundaries with Ewald"); - if (slabflag == 1) { + if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) error->all(FLERR,"Incorrect boundaries with slab Ewald"); @@ -382,7 +382,7 @@ void Ewald::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) { f[i][0] += qscale * q[i]*ek[i][0]; f[i][1] += qscale * q[i]*ek[i][1]; - f[i][2] += qscale * q[i]*ek[i][2]; + if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; } // global energy @@ -426,7 +426,7 @@ void Ewald::compute(int eflag, int vflag) // 2d slab correction - if (slabflag) slabcorr(); + if (slabflag == 1) slabcorr(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index a4aed0f3a7..47c644702e 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -131,7 +131,7 @@ void PPPM::init() if (slabflag == 0 && domain->nonperiodic > 0) error->all(FLERR,"Cannot use nonperiodic boundaries with PPPM"); - if (slabflag == 1) { + if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) error->all(FLERR,"Incorrect boundaries with slab PPPM"); @@ -800,7 +800,7 @@ void PPPM::compute(int eflag, int vflag) // 2d slab correction - if (slabflag) slabcorr(); + if (slabflag == 1) slabcorr(); // convert atoms back from lamda to box coords @@ -2247,7 +2247,7 @@ void PPPM::fieldforce() const double qfactor = force->qqrd2e * scale * q[i]; f[i][0] += qfactor*ekx; f[i][1] += qfactor*eky; - f[i][2] += qfactor*ekz; + if (slabflag != 2) f[i][2] += qfactor*ekz; } } diff --git a/src/kspace.cpp b/src/kspace.cpp index 61fa8e400d..61a2b0e9a6 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -189,14 +189,18 @@ void KSpace::modify_params(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"slab") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); - slab_volfactor = atof(arg[iarg+1]); + if (strcmp(arg[iarg+1],"nozforce") == 0) { + slabflag = 2; + } else { + slabflag = 1; + slab_volfactor = atof(arg[iarg+1]); + if (slab_volfactor <= 1.0) + error->all(FLERR,"Bad kspace_modify slab parameter"); + if (slab_volfactor < 2.0 && comm->me == 0) + error->warning(FLERR,"Kspace_modify slab param < 2.0 may " + "cause unphysical behavior"); + } iarg += 2; - if (slab_volfactor <= 1.0) - error->all(FLERR,"Bad kspace_modify slab parameter"); - if (slab_volfactor < 2.0 && comm->me == 0) - error->warning(FLERR,"Kspace_modify slab param < 2.0 may " - "cause unphysical behavior"); - slabflag = 1; } else if (strcmp(arg[iarg],"compute") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); if (strcmp(arg[iarg+1],"yes") == 0) compute_flag = 1;