git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@7202 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2011-10-26 14:42:52 +00:00
parent c452d0bd8d
commit a0e2e04aed
4 changed files with 29 additions and 24 deletions

View File

@ -28,7 +28,7 @@
using namespace LAMMPS_NS;
enum{XLO,XHI,YLO,YHI,ZLO,ZHI};
enum{NONE,EDGE,CONSTANT,VARIABLE};
enum{EDGE,CONSTANT,VARIABLE};
/* ---------------------------------------------------------------------- */
@ -126,17 +126,16 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->dimension == 2)
error->all(FLERR,"Cannot use fix wall zlo/zhi for a 2d simulation");
// scale coord for CONSTANT walls
// scale factors for CONSTANT and VARIABLE walls
int flag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == CONSTANT) flag = 1;
if (wallstyle[m] != EDGE) flag = 1;
if (flag) {
if (scaleflag && domain->lattice == NULL)
error->all(FLERR,"Use of fix wall with undefined lattice");
double xscale,yscale,zscale;
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
@ -144,12 +143,11 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
}
else xscale = yscale = zscale = 1.0;
double scale;
for (int m = 0; m < nwall; m++) {
if (wallwhich[m] < YLO) scale = xscale;
else if (wallwhich[m] < ZLO) scale = yscale;
else scale = zscale;
if (wallstyle[m] == CONSTANT) coord0[m] *= scale;
if (wallstyle[m] != CONSTANT) continue;
if (wallwhich[m] < YLO) coord0[m] *= xscale;
else if (wallwhich[m] < ZLO) coord0[m] *= yscale;
else coord0[m] *= zscale;
}
}
@ -254,9 +252,12 @@ void FixWall::post_force(int vflag)
double coord;
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] == VARIABLE)
if (wallstyle[m] == VARIABLE) {
coord = input->variable->compute_equal(varindex[m]);
else coord = coord0[m];
if (wallwhich[m] < YLO) coord *= xscale;
else if (wallwhich[m] < ZLO) coord *= yscale;
else coord *= zscale;
} else coord = coord0[m];
wall_particle(m,wallwhich[m],coord);
}

View File

@ -44,6 +44,7 @@ class FixWall : public Fix {
int varindex[6];
int eflag,varflag;
double ewall[7],ewall_all[7];
double xscale,yscale,zscale;
int nlevels_respa;
double dt;
int fldflag;

View File

@ -27,7 +27,7 @@
using namespace LAMMPS_NS;
enum{XLO,XHI,YLO,YHI,ZLO,ZHI};
enum{NONE,EDGE,CONSTANT,VARIABLE};
enum{EDGE,CONSTANT,VARIABLE};
/* ---------------------------------------------------------------------- */
@ -104,32 +104,31 @@ FixWallReflect::FixWallReflect(LAMMPS *lmp, int narg, char **arg) :
for (int m = 0; m < nwall; m++)
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->dimension == 2)
error->all(FLERR,"Cannot use fix wall/reflect zlo/zhi for a 2d simulation");
error->all(FLERR,
"Cannot use fix wall/reflect zlo/zhi for a 2d simulation");
// scale coord for CONSTANT walls
// scale factors for CONSTANT and VARIABLE walls
int flag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == CONSTANT) flag = 1;
if (wallstyle[m] != EDGE) flag = 1;
if (flag) {
if (scaleflag && domain->lattice == NULL)
error->all(FLERR,"Use of fix wall with undefined lattice");
double xscale,yscale,zscale;
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
double scale;
for (int m = 0; m < nwall; m++) {
if (wallwhich[m] < YLO) scale = xscale;
else if (wallwhich[m] < ZLO) scale = yscale;
else scale = zscale;
if (wallstyle[m] == CONSTANT) coord0[m] *= scale;
if (wallstyle[m] != CONSTANT) continue;
if (wallwhich[m] < YLO) coord0[m] *= xscale;
else if (wallwhich[m] < ZLO) coord0[m] *= yscale;
else coord0[m] *= zscale;
}
}
@ -198,9 +197,12 @@ void FixWallReflect::post_integrate()
if (varflag) modify->clearstep_compute();
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] == VARIABLE)
if (wallstyle[m] == VARIABLE) {
coord = input->variable->compute_equal(varindex[m]);
else coord = coord0[m];
if (wallwhich[m] < YLO) coord *= xscale;
else if (wallwhich[m] < ZLO) coord *= yscale;
else coord *= zscale;
} else coord = coord0[m];
dim = wallwhich[m] / 2;
side = wallwhich[m] % 2;

View File

@ -39,6 +39,7 @@ class FixWallReflect : public Fix {
char *varstr[6];
int varindex[6];
int varflag;
double xscale,yscale,zscale;
};
}