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

View File

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

View File

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

View File

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