Adding in a new slab option for Jeremy Templeton. Invoked by "kspace_modify slab nozforce", which run slab mode with no long-range z forces.

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@8464 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
pscrozi 2012-07-03 17:21:56 +00:00
parent 56ca4db42c
commit 4a0601f875
3 changed files with 17 additions and 13 deletions

View File

@ -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();
}
/* ---------------------------------------------------------------------- */

View File

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

View File

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