diff --git a/doc/Manual.html b/doc/Manual.html index edeb10ad0d..6dc80d4376 100644 --- a/doc/Manual.html +++ b/doc/Manual.html @@ -1,7 +1,7 @@
Treat one or more sets of atoms as independent rigid bodies. This means that each timestep the total force and torque on each rigid body is computed as the sum of the forces and torques on its constituent -particles and the coordinates, velocities, and orientations of the -atoms in each body are updated so that the body moves and rotates as a +particles. The coordinates, velocities, and orientations of the atoms +in each body are then updated so that the body moves and rotates as a single entity.
-Examples of large rigid bodies are a large colloidal particle, or -portions of a large biomolecule such as a protein. +
Examples of large rigid bodies are a colloidal particle, or portions +of a biomolecule such as a protein.
Example of small rigid bodies are patchy nanoparticles, such as those modeled in this paper by Sharon Glotzer's group, clumps of @@ -183,6 +183,16 @@ command), setting the force on them to 0.0 (via the fix nve command).
+IMPORTANT NOTE: The aggregate properties of each rigid body are +calculated at the start of each simulation run. These include its +center of mass, moments of inertia, and net velocity and angular +momentum. This means that before or between runs, per-atom properties +can be changed, e.g. via the set or +velocity command, which will affect the bodies. An +exception is if the infile keyword is used, then all the body +properties (except net velocity and angular momentum) are only +calculated once so that values from the file are valid. +
Each rigid body must have two or more atoms. An atom can belong to at diff --git a/doc/fix_rigid.txt b/doc/fix_rigid.txt index 62bd5e2ee3..66a6c7bd67 100644 --- a/doc/fix_rigid.txt +++ b/doc/fix_rigid.txt @@ -85,12 +85,12 @@ fix 1 particles rigid/npt/small molecule temp 1.0 1.0 1.0 iso 0.5 0.5 1.0 :pre Treat one or more sets of atoms as independent rigid bodies. This means that each timestep the total force and torque on each rigid body is computed as the sum of the forces and torques on its constituent -particles and the coordinates, velocities, and orientations of the -atoms in each body are updated so that the body moves and rotates as a +particles. The coordinates, velocities, and orientations of the atoms +in each body are then updated so that the body moves and rotates as a single entity. -Examples of large rigid bodies are a large colloidal particle, or -portions of a large biomolecule such as a protein. +Examples of large rigid bodies are a colloidal particle, or portions +of a biomolecule such as a protein. Example of small rigid bodies are patchy nanoparticles, such as those modeled in "this paper"_#Zhang by Sharon Glotzer's group, clumps of @@ -165,6 +165,16 @@ command), setting the force on them to 0.0 (via the "fix setforce"_fix_setforce.html command), and integrating them as usual (e.g. via the "fix nve"_fix_nve.html command). +IMPORTANT NOTE: The aggregate properties of each rigid body are +calculated at the start of each simulation run. These include its +center of mass, moments of inertia, and net velocity and angular +momentum. This means that before or between runs, per-atom properties +can be changed, e.g. via the "set"_set.html or +"velocity"_velocity.html command, which will affect the bodies. An +exception is if the {infile} keyword is used, then all the body +properties (except net velocity and angular momentum) are only +calculated once so that values from the file are valid. + :line Each rigid body must have two or more atoms. An atom can belong to at diff --git a/doc/fix_wall_region.html b/doc/fix_wall_region.html index 4bea6c7103..b6a215362e 100644 --- a/doc/fix_wall_region.html +++ b/doc/fix_wall_region.html @@ -76,11 +76,21 @@ points suffer from inaccuracies. The basic problem is that the outward normal of the surface is not continuous at these points. This can cause particles to feel no force (they don't "see" the wall) when in one location, then move a distance epsilon, and suddenly feel a -large force because they now "see" the wall. In the worst-case +large force because they now "see" the wall. In a worst-case scenario, this can blow particles out of the simulation box. Thus, as a general rule you should not use the fix wall/region command with union or interesect regions that have convex points or edges.
+IMPORTANT NOTE: Similarly, you should not define union or +intersert regions for use with this command that share a common +face, even if the face is smooth. E.g. two regions of style block in +a union region, where the two blocks have the same face. This is +because LAMMPS discards points that are part of multiple sub-regions +when calculating wall/particle interactions, to avoid double-counting +the interaction. Having two coincident faces could cause the face to +become invisible to the particles. The solution is to make the two +faces differ by epsilon in their position. +
The energy of wall-particle interactions depends on the specified style.
diff --git a/doc/fix_wall_region.txt b/doc/fix_wall_region.txt index 0c13cf3b44..607e60374c 100644 --- a/doc/fix_wall_region.txt +++ b/doc/fix_wall_region.txt @@ -73,11 +73,21 @@ points suffer from inaccuracies. The basic problem is that the outward normal of the surface is not continuous at these points. This can cause particles to feel no force (they don't "see" the wall) when in one location, then move a distance epsilon, and suddenly feel a -large force because they now "see" the wall. In the worst-case +large force because they now "see" the wall. In a worst-case scenario, this can blow particles out of the simulation box. Thus, as a general rule you should not use the fix wall/region command with {union} or {interesect} regions that have convex points or edges. +IMPORTANT NOTE: Similarly, you should not define {union} or +{intersert} regions for use with this command that share a common +face, even if the face is smooth. E.g. two regions of style block in +a {union} region, where the two blocks have the same face. This is +because LAMMPS discards points that are part of multiple sub-regions +when calculating wall/particle interactions, to avoid double-counting +the interaction. Having two coincident faces could cause the face to +become invisible to the particles. The solution is to make the two +faces differ by epsilon in their position. + The energy of wall-particle interactions depends on the specified style. diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 18e4a51715..93c4144140 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -1738,7 +1738,6 @@ void FixRigidSmall::setup_bodies_static() if (atom->line_flag) orientflag = 1; if (atom->tri_flag) orientflag = 4; if (atom->mu_flag) dorientflag = 1; - grow_arrays(atom->nmax); for (i = 0; i < nlocal; i++) { eflags[i] = 0; diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index ce6b4bd64c..22e718dd76 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -45,6 +45,8 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) nevery = force->inumeric(FLERR,arg[3]); if (nevery < 0) error->all(FLERR,"Illegal fix adapt command"); + dynamic_group_allow = 1; + // count # of adaptations nadapt = 0; @@ -266,6 +268,13 @@ void FixAdapt::init() { int i,j; + // allow a dynamic group only if ATOM attribute not used + + if (group->dynamic[igroup]) + for (int i = 0; i < nadapt; i++) + if (adapt[i].which == ATOM) + error->all(FLERR,"Cannot use dynamic group with fix adapt atom"); + // setup and error checks anypair = 0; diff --git a/src/input.cpp b/src/input.cpp index 7edb0f8e7b..b5affba078 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1166,6 +1166,11 @@ void Input::comm_style() "Cannot switch to comm style brick from " "irregular tiling of proc domains"); comm = new CommBrick(lmp); + // NOTE: this will lose load balancing info in old CommBrick + if (domain->box_exist) { + comm->set_proc_grid(); + domain->set_local_box(); + } } else if (strcmp(arg[0],"tiled") == 0) { error->all(FLERR,"Comm_style tiled not yet supported"); comm = new CommTiled(lmp); diff --git a/src/version.h b/src/version.h index f0f6c2230e..535898f618 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "23 May 2014" +#define LAMMPS_VERSION "27 May 2014"