From a0e2e04aed5d3c9640751b9c97e896f052761a57 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 26 Oct 2011 14:42:52 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@7202 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_wall.cpp | 23 ++++++++++++----------- src/fix_wall.h | 1 + src/fix_wall_reflect.cpp | 28 +++++++++++++++------------- src/fix_wall_reflect.h | 1 + 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/fix_wall.cpp b/src/fix_wall.cpp index 2be0651690..405f6bfd2b 100644 --- a/src/fix_wall.cpp +++ b/src/fix_wall.cpp @@ -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); } diff --git a/src/fix_wall.h b/src/fix_wall.h index 62ee69bc54..9c2bd5ed27 100644 --- a/src/fix_wall.h +++ b/src/fix_wall.h @@ -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; diff --git a/src/fix_wall_reflect.cpp b/src/fix_wall_reflect.cpp index 2251fd2662..7d2d9e4ff5 100644 --- a/src/fix_wall_reflect.cpp +++ b/src/fix_wall_reflect.cpp @@ -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; diff --git a/src/fix_wall_reflect.h b/src/fix_wall_reflect.h index 6b87d4039b..2345a4b19c 100644 --- a/src/fix_wall_reflect.h +++ b/src/fix_wall_reflect.h @@ -39,6 +39,7 @@ class FixWallReflect : public Fix { char *varstr[6]; int varindex[6]; int varflag; + double xscale,yscale,zscale; }; }