246 lines
10 KiB
HTML
246 lines
10 KiB
HTML
<HTML>
|
||
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
|
||
</CENTER>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<HR>
|
||
|
||
<H3>fix shake command
|
||
</H3>
|
||
<H3>fix shake/cuda command
|
||
</H3>
|
||
<H3>fix rattle command
|
||
</H3>
|
||
<P><B>Syntax:</B>
|
||
</P>
|
||
<PRE>fix ID group-ID style tol iter N constraint values ... keyword value ...
|
||
</PRE>
|
||
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
|
||
|
||
<LI>style = shake or rattle = style name of this fix command
|
||
|
||
<LI>tol = accuracy tolerance of SHAKE solution
|
||
|
||
<LI>iter = max # of iterations in each SHAKE solution
|
||
|
||
<LI>N = print SHAKE statistics every this many timesteps (0 = never)
|
||
|
||
<LI>one or more constraint/value pairs are appended
|
||
|
||
<LI>constraint = <I>b</I> or <I>a</I> or <I>t</I> or <I>m</I>
|
||
|
||
<PRE> <I>b</I> values = one or more bond types
|
||
<I>a</I> values = one or more angle types
|
||
<I>t</I> values = one or more atom types
|
||
<I>m</I> value = one or more mass values
|
||
</PRE>
|
||
<LI>zero or more keyword/value pairs may be appended
|
||
|
||
<LI>keyword = <I>mol</I>
|
||
|
||
<PRE> <I>mol</I> value = template-ID
|
||
template-ID = ID of molecule template specified in a separate <A HREF = "molecule.html">molecule</A> command
|
||
</PRE>
|
||
|
||
</UL>
|
||
<P><B>Examples:</B>
|
||
</P>
|
||
<PRE>fix 1 sub shake 0.0001 20 10 b 4 19 a 3 5 2
|
||
fix 1 sub shake 0.0001 20 10 t 5 6 m 1.0 a 31
|
||
fix 1 sub shake 0.0001 20 10 t 5 6 m 1.0 a 31 mol myMol
|
||
fix 1 sub rattle 0.0001 20 10 t 5 6 m 1.0 a 31
|
||
fix 1 sub rattle 0.0001 20 10 t 5 6 m 1.0 a 31 mol myMol
|
||
</PRE>
|
||
<P><B>Description:</B>
|
||
</P>
|
||
<P>Apply bond and angle constraints to specified bonds and angles in the
|
||
simulation by either the SHAKE or RATTLE algorithms. This typically
|
||
enables a longer timestep.
|
||
</P>
|
||
<P><B>SHAKE vs RATTLE:</B>
|
||
</P>
|
||
<P>The SHAKE algorithm was invented for schemes such as standard Verlet
|
||
timesteppnig, where only the coordinates are integrated and the
|
||
velocities are approximated as finite differences to the trajectories
|
||
(<A HREF = "#Ryckaert">Ryckaert et al. (1977)</A>). If the velocities are
|
||
integrated explicitly, as with velocity Verlet which is what LAMMPS
|
||
uses as an integration method, a second set of constraining forces is
|
||
required in order to eliminate velocity components along the bonds
|
||
(<A HREF = "#Andersen">Andersen (1983)</A>).
|
||
</P>
|
||
<P>In order to formulate individual constraints for SHAKE and RATTLE,
|
||
focus on a single molecule whose bonds are constrained. Let Ri and Vi
|
||
be the position and velocity of atom <I>i</I> at time <I>n</I>, for
|
||
<I>i</I>=1,...,<I>N</I>, where <I>N</I> is the number of sites of our reference
|
||
molecule. The distance vector between sites <I>i</I> and <I>j</I> is given by
|
||
</P>
|
||
<CENTER><IMG SRC = "Eqs/fix_rattle_rij.jpg">
|
||
</CENTER>
|
||
<P>The constraints can then be formulated as
|
||
</P>
|
||
<CENTER><IMG SRC = "Eqs/fix_rattle_constraints.jpg">
|
||
</CENTER>
|
||
<P>The SHAKE algorithm satisfies the first condition, i.e. the sites at
|
||
time <I>n+1</I> will have the desired separations Dij immediately after the
|
||
coordinates are integrated. If we also enforce the second condition,
|
||
the velocity components along the bonds will vanish. RATTLE satisfies
|
||
both conditions. As implemented in LAMMPS, fix rattle uses fix shake
|
||
for satisfying the coordinate constraints. Therefore the settings and
|
||
optional keywords are the same for both fixes, and all the information
|
||
below about SHAKE is also relevant for RATTLE.
|
||
</P>
|
||
<P><B>SHAKE:</B>
|
||
</P>
|
||
<P>Each timestep the specified bonds and angles are reset to their
|
||
equilibrium lengths and angular values via the SHAKE algorithm
|
||
(<A HREF = "#Ryckaert">Ryckaert et al. (1977)</A>). This is done by applying an
|
||
additional constraint force so that the new positions preserve the
|
||
desired atom separations. The equations for the additional force are
|
||
solved via an iterative method that typically converges to an accurate
|
||
solution in a few iterations. The desired tolerance (e.g. 1.0e-4 = 1
|
||
part in 10000) and maximum # of iterations are specified as arguments.
|
||
Setting the N argument will print statistics to the screen and log
|
||
file about regarding the lengths of bonds and angles that are being
|
||
constrained. Small delta values mean SHAKE is doing a good job.
|
||
</P>
|
||
<P>In LAMMPS, only small clusters of atoms can be constrained. This is
|
||
so the constraint calculation for a cluster can be performed by a
|
||
single processor, to enable good parallel performance. A cluster is
|
||
defined as a central atom connected to others in the cluster by
|
||
constrained bonds. LAMMPS allows for the following kinds of clusters
|
||
to be constrained: one central atom bonded to 1 or 2 or 3 atoms, or
|
||
one central atom bonded to 2 others and the angle between the 3 atoms
|
||
also constrained. This means water molecules or CH2 or CH3 groups may
|
||
be constrained, but not all the C-C backbone bonds of a long polymer
|
||
chain.
|
||
</P>
|
||
<P>The <I>b</I> constraint lists bond types that will be constrained. The <I>t</I>
|
||
constraint lists atom types. All bonds connected to an atom of the
|
||
specified type will be constrained. The <I>m</I> constraint lists atom
|
||
masses. All bonds connected to atoms of the specified masses will be
|
||
constrained (within a fudge factor of MASSDELTA specified in
|
||
fix_shake.cpp). The <I>a</I> constraint lists angle types. If both bonds
|
||
in the angle are constrained then the angle will also be constrained
|
||
if its type is in the list.
|
||
</P>
|
||
<P>For all constraints, a particular bond is only constrained if both
|
||
atoms in the bond are in the group specified with the SHAKE fix.
|
||
</P>
|
||
<P>The degrees-of-freedom removed by SHAKE bonds and angles are accounted
|
||
for in temperature and pressure computations. Similarly, the SHAKE
|
||
contribution to the pressure of the system (virial) is also accounted
|
||
for.
|
||
</P>
|
||
<P>IMPORTANT NOTE: This command works by using the current forces on
|
||
atoms to caculate an additional constraint force which when added will
|
||
leave the atoms in positions that satisfy the SHAKE constraints
|
||
(e.g. bond length) after the next time integration step. If you
|
||
define fixes (e.g. <A HREF = "fix_efield.html">fix efield</A>) that add additional
|
||
force to the atoms after fix shake operates, then this fix will not
|
||
take them into account and the time integration will typically not
|
||
satisfy the SHAKE constraints. The solution for this is to make sure
|
||
that fix shake is defined in your input script after any other fixes
|
||
which add or change forces (to atoms that fix shake operates on).
|
||
</P>
|
||
<HR>
|
||
|
||
<P>The <I>mol</I> keyword should be used when other commands, such as <A HREF = "fix_deposit.html">fix
|
||
deposit</A> or <A HREF = "fix_pour.html">fix pour</A>, add molecules
|
||
on-the-fly during a simulation, and you wish to contrain the new
|
||
molecules via SHAKE. You specify a <I>template-ID</I> previously defined
|
||
using the <A HREF = "molecule.html">molecule</A> command, which reads a file that
|
||
defines the molecule. You must use the same <I>template-ID</I> that the
|
||
command adding molecules uses. The coordinates, atom types, special
|
||
bond restrictions, and SHAKE info can be specified in the molecule
|
||
file. See the <A HREF = "molecule.html">molecule</A> command for details. The only
|
||
settings required to be in this file (by this command) are the SHAKE
|
||
info of atoms in the molecule.
|
||
</P>
|
||
<HR>
|
||
|
||
<P>Styles with a <I>cuda</I> suffix are functionally the same as the
|
||
corresponding style without the suffix. They have been optimized to
|
||
run faster, depending on your available hardware, as discussed in
|
||
<A HREF = "Section_accelerate.html">Section_accelerate</A> of the manual. The
|
||
accelerated styles take the same arguments and should produce the same
|
||
results, except for round-off and precision issues.
|
||
</P>
|
||
<P>These accelerated styles are part of the USER-CUDA package. They are
|
||
only enabled if LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
|
||
LAMMPS</A> section for more info.
|
||
</P>
|
||
<P>You can specify the accelerated styles explicitly in your input script
|
||
by including their suffix, or you can use the <A HREF = "Section_start.html#start_7">-suffix command-line
|
||
switch</A> when you invoke LAMMPS, or you can
|
||
use the <A HREF = "suffix.html">suffix</A> command in your input script.
|
||
</P>
|
||
<P>See <A HREF = "Section_accelerate.html">Section_accelerate</A> of the manual for
|
||
more instructions on how to use the accelerated styles effectively.
|
||
</P>
|
||
<HR>
|
||
|
||
<P><B>RATTLE:</B>
|
||
</P>
|
||
<P>The velocity constraints lead to a linear system of equations which
|
||
can be solved analytically. The implementation of the algorithm in
|
||
LAMMPS closely follows <A HREF = "#Andersen">Andersen (1983)</A>.
|
||
</P>
|
||
<P>IMPORTANT NOTE: The fix rattle command modifies forces and velocities
|
||
and thus should be defined after all other integration fixes in your
|
||
input script. If you define other fixes that modify velocities or
|
||
forces after fix rattle operates, then fix rattle will not take them
|
||
into account and the overall time integration will typically not
|
||
satisfy the RATTLE constraints. You can check whether the constraints
|
||
work correctly by setting the value of RATTLE_DEBUG in
|
||
src/fix_rattle.cpp to 1 and recompiling LAMMPS.
|
||
</P>
|
||
<HR>
|
||
|
||
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
|
||
</P>
|
||
<P>No information about these fixes is written to <A HREF = "restart.html">binary restart
|
||
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
|
||
are relevant to these fixes. No global or per-atom quantities are
|
||
stored by these fixes for access by various <A HREF = "Section_howto.html#howto_15">output
|
||
commands</A>. No parameter of these fixes
|
||
can be used with the <I>start/stop</I> keywords of the <A HREF = "run.html">run</A>
|
||
command. These fixes are not invoked during <A HREF = "minimize.html">energy
|
||
minimization</A>.
|
||
</P>
|
||
<P><B>Restrictions:</B>
|
||
</P>
|
||
<P>These fixes are part of the RIGID package. They are only enabled if
|
||
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
|
||
LAMMPS</A> section for more info.
|
||
</P>
|
||
<P>For computational efficiency, there can only be one shake or rattle
|
||
fix defined in a simulation.
|
||
</P>
|
||
<P>If you use a tolerance that is too large or a max-iteration count that
|
||
is too small, the constraints will not be enforced very strongly,
|
||
which can lead to poor energy conservation. You can test for this in
|
||
your system by running a constant NVE simulation with a particular set
|
||
of SHAKE parameters and monitoring the energy versus time.
|
||
</P>
|
||
<P><B>Related commands:</B> none
|
||
</P>
|
||
<P><B>Default:</B> none
|
||
</P>
|
||
<HR>
|
||
|
||
<A NAME = "Ryckaert"></A>
|
||
|
||
<P><B>(Ryckaert)</B> J.-P. Ryckaert, G. Ciccotti and H. J. C. Berendsen,
|
||
Journal of Computational Physics, 23, 327–341 (1977).
|
||
</P>
|
||
<A NAME = "Andersen"></A>
|
||
|
||
<P><B>(Andersen)</B> H. Andersen,
|
||
Journal of Computational Physics, 52, 24-34 (1983).
|
||
</P>
|
||
</HTML>
|