diff -Naur lammps-14Nov09/doc/fix_wall_reflect.html lammps-16Nov09/doc/fix_wall_reflect.html --- lammps-14Nov09/doc/fix_wall_reflect.html 2009-01-05 15:26:31.000000000 -0700 +++ lammps-16Nov09/doc/fix_wall_reflect.html 2009-11-12 17:04:38.000000000 -0700 @@ -57,11 +57,13 @@

Any dimension (xyz) that has a reflecting wall must be non-periodic.

-

A reflecting wall cannot be used with rigid bodies such as those +

A reflecting wall should not be used with rigid bodies such as those defined by a "fix rigid" command. This is because the wall/reflect displaces atoms directly rather than exerts a force on them. For rigid bodies, use a soft wall instead, such as fix -wall/lj93. +wall/lj93. LAMMPS will flag the use of a rigid +fix with fix wall/reflect with a warning, but will not generate an +error.

Related commands:

diff -Naur lammps-14Nov09/doc/fix_wall_reflect.txt lammps-16Nov09/doc/fix_wall_reflect.txt --- lammps-14Nov09/doc/fix_wall_reflect.txt 2009-01-05 15:26:31.000000000 -0700 +++ lammps-16Nov09/doc/fix_wall_reflect.txt 2009-11-12 17:04:38.000000000 -0700 @@ -54,11 +54,13 @@ Any dimension (xyz) that has a reflecting wall must be non-periodic. -A reflecting wall cannot be used with rigid bodies such as those +A reflecting wall should not be used with rigid bodies such as those defined by a "fix rigid" command. This is because the wall/reflect displaces atoms directly rather than exerts a force on them. For rigid bodies, use a soft wall instead, such as "fix -wall/lj93"_fix_wall_lj93.html. +wall/lj93"_fix_wall_lj93.html. LAMMPS will flag the use of a rigid +fix with fix wall/reflect with a warning, but will not generate an +error. [Related commands:] diff -Naur lammps-14Nov09/src/MOLECULE/atom_vec_angle.cpp lammps-16Nov09/src/MOLECULE/atom_vec_angle.cpp --- lammps-14Nov09/src/MOLECULE/atom_vec_angle.cpp 2009-11-09 11:20:20.000000000 -0700 +++ lammps-16Nov09/src/MOLECULE/atom_vec_angle.cpp 2009-11-16 10:03:09.000000000 -0700 @@ -175,9 +175,6 @@ buf[m++] = x[j][0]; buf[m++] = x[j][1]; buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; } } else { if (domain->triclinic == 0) { @@ -194,9 +191,6 @@ buf[m++] = x[j][0] + dx; buf[m++] = x[j][1] + dy; buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; } } return m; @@ -217,6 +211,9 @@ buf[m++] = x[j][0]; buf[m++] = x[j][1]; buf[m++] = x[j][2]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; } } else { if (domain->triclinic == 0) { @@ -233,6 +230,9 @@ buf[m++] = x[j][0] + dx; buf[m++] = x[j][1] + dy; buf[m++] = x[j][2] + dz; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; } } return m; diff -Naur lammps-14Nov09/src/fix_wall_reflect.cpp lammps-16Nov09/src/fix_wall_reflect.cpp --- lammps-14Nov09/src/fix_wall_reflect.cpp 2009-01-05 15:26:08.000000000 -0700 +++ lammps-16Nov09/src/fix_wall_reflect.cpp 2009-11-12 17:03:09.000000000 -0700 @@ -14,6 +14,7 @@ #include "string.h" #include "fix_wall_reflect.h" #include "atom.h" +#include "comm.h" #include "modify.h" #include "domain.h" #include "error.h" @@ -58,6 +59,19 @@ /* ---------------------------------------------------------------------- */ +void FixWallReflect::init() +{ + int nrigid = 0; + for (int i = 0; i < modify->nfix; i++) + if (modify->fix[i]->rigid_flag) nrigid++; + + if (nrigid && comm->me == 0) + error->warning("Should not allow rigid bodies to bounce off " + "relecting walls"); +} + +/* ---------------------------------------------------------------------- */ + void FixWallReflect::post_integrate() { double xlo = domain->boxlo[0]; diff -Naur lammps-14Nov09/src/fix_wall_reflect.h lammps-16Nov09/src/fix_wall_reflect.h --- lammps-14Nov09/src/fix_wall_reflect.h 2009-01-05 15:26:08.000000000 -0700 +++ lammps-16Nov09/src/fix_wall_reflect.h 2009-11-12 17:03:09.000000000 -0700 @@ -22,6 +22,7 @@ public: FixWallReflect(class LAMMPS *, int, char **); int setmask(); + void init(); void post_integrate(); private: