git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@13185 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -407,12 +407,12 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_nh.html">npt (co)</A></TD><TD ><A HREF = "fix_npt_asphere.html">npt/asphere (o)</A></TD><TD ><A HREF = "fix_npt_sphere.html">npt/sphere (o)</A></TD><TD ><A HREF = "fix_nve.html">nve (cko)</A></TD><TD ><A HREF = "fix_nve_asphere.html">nve/asphere</A></TD><TD ><A HREF = "fix_nve_asphere_noforce.html">nve/asphere/noforce</A></TD><TD ><A HREF = "fix_nve_body.html">nve/body</A></TD><TD ><A HREF = "fix_nve_limit.html">nve/limit</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_nve_line.html">nve/line</A></TD><TD ><A HREF = "fix_nve_noforce.html">nve/noforce</A></TD><TD ><A HREF = "fix_nve_sphere.html">nve/sphere (o)</A></TD><TD ><A HREF = "fix_nve_tri.html">nve/tri</A></TD><TD ><A HREF = "fix_nh.html">nvt (co)</A></TD><TD ><A HREF = "fix_nvt_asphere.html">nvt/asphere (o)</A></TD><TD ><A HREF = "fix_nvt_sllod.html">nvt/sllod (o)</A></TD><TD ><A HREF = "fix_nvt_sphere.html">nvt/sphere (o)</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_oneway.html">oneway</A></TD><TD ><A HREF = "fix_orient_fcc.html">orient/fcc</A></TD><TD ><A HREF = "fix_planeforce.html">planeforce</A></TD><TD ><A HREF = "fix_poems.html">poems</A></TD><TD ><A HREF = "fix_pour.html">pour</A></TD><TD ><A HREF = "fix_press_berendsen.html">press/berendsen</A></TD><TD ><A HREF = "fix_print.html">print</A></TD><TD ><A HREF = "fix_property_atom.html">property/atom</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_qeq_comb.html">qeq/comb (o)</A></TD><TD ><A HREF = "fix_qeq.html">qeq/dynamic</A></TD><TD ><A HREF = "fix_qeq.html">qeq/point</A></TD><TD ><A HREF = "fix_qeq.html">qeq/shielded</A></TD><TD ><A HREF = "fix_qeq.html">qeq/slater</A></TD><TD ><A HREF = "fix_reax_bonds.html">reax/bonds</A></TD><TD ><A HREF = "fix_recenter.html">recenter</A></TD><TD ><A HREF = "fix_restrain.html">restrain</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_rigid.html">rigid (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nph (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/npt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nve (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nvt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nph</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/npt</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_rigid.html">rigid/small/nve</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nvt</A></TD><TD ><A HREF = "fix_setforce.html">setforce (c)</A></TD><TD ><A HREF = "fix_shake.html">shake (c)</A></TD><TD ><A HREF = "fix_spring.html">spring</A></TD><TD ><A HREF = "fix_spring_rg.html">spring/rg</A></TD><TD ><A HREF = "fix_spring_self.html">spring/self</A></TD><TD ><A HREF = "fix_srd.html">srd</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_store_force.html">store/force</A></TD><TD ><A HREF = "fix_store_state.html">store/state</A></TD><TD ><A HREF = "fix_temp_berendsen.html">temp/berendsen (c)</A></TD><TD ><A HREF = "fix_temp_csvr.html">temp/csvr</A></TD><TD ><A HREF = "fix_temp_rescale.html">temp/rescale (c)</A></TD><TD ><A HREF = "fix_tfmc.html">tfmc</A></TD><TD ><A HREF = "fix_thermal_conductivity.html">thermal/conductivity</A></TD><TD ><A HREF = "fix_tmd.html">tmd</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_ttm.html">ttm</A></TD><TD ><A HREF = "fix_tune_kspace.html">tune/kspace</A></TD><TD ><A HREF = "fix_vector.html">vector</A></TD><TD ><A HREF = "fix_viscosity.html">viscosity</A></TD><TD ><A HREF = "fix_viscous.html">viscous (c)</A></TD><TD ><A HREF = "fix_wall.html">wall/colloid</A></TD><TD ><A HREF = "fix_wall_gran.html">wall/gran</A></TD><TD ><A HREF = "fix_wall.html">wall/harmonic</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_wall.html">wall/lj1043</A></TD><TD ><A HREF = "fix_wall.html">wall/lj126</A></TD><TD ><A HREF = "fix_wall.html">wall/lj93</A></TD><TD ><A HREF = "fix_wall_piston.html">wall/piston</A></TD><TD ><A HREF = "fix_wall_reflect.html">wall/reflect</A></TD><TD ><A HREF = "fix_wall_region.html">wall/region</A></TD><TD ><A HREF = "fix_wall_srd.html">wall/srd</A>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_qeq_comb.html">qeq/comb (o)</A></TD><TD ><A HREF = "fix_qeq.html">qeq/dynamic</A></TD><TD ><A HREF = "fix_qeq.html">qeq/point</A></TD><TD ><A HREF = "fix_qeq.html">qeq/shielded</A></TD><TD ><A HREF = "fix_qeq.html">qeq/slater</A></TD><TD ><A HREF = "fix_shake.html">rattle</A></TD><TD ><A HREF = "fix_reax_bonds.html">reax/bonds</A></TD><TD ><A HREF = "fix_recenter.html">recenter</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_restrain.html">restrain</A></TD><TD ><A HREF = "fix_rigid.html">rigid (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nph (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/npt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nve (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nvt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nph</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_rigid.html">rigid/small/npt</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nve</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nvt</A></TD><TD ><A HREF = "fix_setforce.html">setforce (c)</A></TD><TD ><A HREF = "fix_shake.html">shake (c)</A></TD><TD ><A HREF = "fix_spring.html">spring</A></TD><TD ><A HREF = "fix_spring_rg.html">spring/rg</A></TD><TD ><A HREF = "fix_spring_self.html">spring/self</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_srd.html">srd</A></TD><TD ><A HREF = "fix_store_force.html">store/force</A></TD><TD ><A HREF = "fix_store_state.html">store/state</A></TD><TD ><A HREF = "fix_temp_berendsen.html">temp/berendsen (c)</A></TD><TD ><A HREF = "fix_temp_csvr.html">temp/csvr</A></TD><TD ><A HREF = "fix_temp_rescale.html">temp/rescale (c)</A></TD><TD ><A HREF = "fix_tfmc.html">tfmc</A></TD><TD ><A HREF = "fix_thermal_conductivity.html">thermal/conductivity</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_tmd.html">tmd</A></TD><TD ><A HREF = "fix_ttm.html">ttm</A></TD><TD ><A HREF = "fix_tune_kspace.html">tune/kspace</A></TD><TD ><A HREF = "fix_vector.html">vector</A></TD><TD ><A HREF = "fix_viscosity.html">viscosity</A></TD><TD ><A HREF = "fix_viscous.html">viscous (c)</A></TD><TD ><A HREF = "fix_wall.html">wall/colloid</A></TD><TD ><A HREF = "fix_wall_gran.html">wall/gran</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "fix_wall.html">wall/harmonic</A></TD><TD ><A HREF = "fix_wall.html">wall/lj1043</A></TD><TD ><A HREF = "fix_wall.html">wall/lj126</A></TD><TD ><A HREF = "fix_wall.html">wall/lj93</A></TD><TD ><A HREF = "fix_wall_piston.html">wall/piston</A></TD><TD ><A HREF = "fix_wall_reflect.html">wall/reflect</A></TD><TD ><A HREF = "fix_wall_region.html">wall/region</A></TD><TD ><A HREF = "fix_wall_srd.html">wall/srd</A>
|
||||
</TD></TR></TABLE></DIV>
|
||||
|
||||
<P>These are additional fix styles in USER packages, which can be used if
|
||||
|
||||
@ -535,6 +535,7 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
|
||||
"qeq/point"_fix_qeq.html,
|
||||
"qeq/shielded"_fix_qeq.html,
|
||||
"qeq/slater"_fix_qeq.html,
|
||||
"rattle"_fix_shake.html,
|
||||
"reax/bonds"_fix_reax_bonds.html,
|
||||
"recenter"_fix_recenter.html,
|
||||
"restrain"_fix_restrain.html,
|
||||
|
||||
@ -13,13 +13,15 @@
|
||||
</H3>
|
||||
<H3>fix shake/cuda command
|
||||
</H3>
|
||||
<H3>fix rattle command
|
||||
</H3>
|
||||
<P><B>Syntax:</B>
|
||||
</P>
|
||||
<PRE>fix ID group-ID <I>shake/rattle</I> tol iter N constraint values ... keyword value ...
|
||||
<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>shake or rattle = style name of this fix command
|
||||
<LI>style = shake or rattle = style name of this fix command
|
||||
|
||||
<LI>tol = accuracy tolerance of SHAKE solution
|
||||
|
||||
@ -49,45 +51,60 @@
|
||||
</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
|
||||
</PRE>
|
||||
<PRE>fix 1 sub rattle 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. This typically enables a longer timestep.
|
||||
simulation by either the SHAKE or RATTLE algorithms. This typically
|
||||
enables a longer timestep.
|
||||
</P>
|
||||
<P><B>SHAKE vs. RATTLE:</B>
|
||||
<P><B>SHAKE vs RATTLE:</B>
|
||||
</P>
|
||||
<P>The SHAKE algorithm was invented for schemes such as Verlet, 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, for example with velocity Verlet,
|
||||
a second set of constraining forces is required in order to eliminate velocity components along the bonds (<A HREF = "#Andersen">Andersen (1983)</A>).
|
||||
<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 the individual constraints for SHAKE and RATTLE, let us focus on a single molecule whose
|
||||
bonds are to be constrained. Let image(Eqs/fix_rattle_ri.jpg) and image(Eqs/fix_rattle_vi.jpg) 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 image(Eqs/fix_rattle_rij.jpg). The constraints can then be formulated as
|
||||
<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 image(Eqs/fix_rattle_dij.jpg) 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 and fix rattle is implemented in a way that it uses fix shake for dealing with the coordinate constraints. Therefore all the information about SHAKE below is also relevant for RATTLE.
|
||||
<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 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 well-known SHAKE
|
||||
algorithm. 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.
|
||||
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
|
||||
@ -168,39 +185,39 @@ more instructions on how to use the accelerated styles effectively.
|
||||
<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>.
|
||||
can be solved analytically. The implementation of the algorithm in
|
||||
LAMMPS closely follows <A HREF = "#Andersen">Andersen (1983)</A>.
|
||||
</P>
|
||||
<P>IMPORTANT NOTE: This command modifies forces and velocities and
|
||||
it has to come after all other integration fixes. If you define other
|
||||
fixes that modify velocities or forces after fix rattle operates,
|
||||
then this fix will not take them into account and the 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 fix_rattle.cpp
|
||||
to 1 and recompiling LAMMPS.
|
||||
</P>
|
||||
<P>IMPORTANT NOTE: RATTLE does not support cuda at the moment.
|
||||
<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 this fix is written to <A HREF = "restart.html">binary restart
|
||||
<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 this fix. No global or per-atom quantities are stored
|
||||
by this fix for access by various <A HREF = "Section_howto.html#howto_15">output
|
||||
commands</A>. No parameter of this fix can
|
||||
be used with the <I>start/stop</I> keywords of the <A HREF = "run.html">run</A> command.
|
||||
This fix is not invoked during <A HREF = "minimize.html">energy minimization</A>.
|
||||
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>This fix is part of the RIGID package. It is only enabled if LAMMPS
|
||||
was built with that package. See the <A HREF = "Section_start.html#start_3">Making
|
||||
<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 fix defined
|
||||
in a simulation.
|
||||
<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,
|
||||
|
||||
@ -8,13 +8,14 @@
|
||||
|
||||
fix shake command :h3
|
||||
fix shake/cuda command :h3
|
||||
fix rattle command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
fix ID group-ID {shake/rattle} tol iter N constraint values ... keyword value ... :pre
|
||||
fix ID group-ID style tol iter N constraint values ... keyword value ... :pre
|
||||
|
||||
ID, group-ID are documented in "fix"_fix.html command :ulb,l
|
||||
shake or rattle = style name of this fix command :l
|
||||
style = shake or rattle = style name of this fix command :l
|
||||
tol = accuracy tolerance of SHAKE solution :l
|
||||
iter = max # of iterations in each SHAKE solution :l
|
||||
N = print SHAKE statistics every this many timesteps (0 = never) :l
|
||||
@ -34,46 +35,60 @@ keyword = {mol} :l
|
||||
|
||||
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 :pre
|
||||
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
|
||||
|
||||
[Description:]
|
||||
|
||||
Apply bond and angle constraints to specified bonds and angles in the
|
||||
simulation. This typically enables a longer timestep.
|
||||
simulation by either the SHAKE or RATTLE algorithms. This typically
|
||||
enables a longer timestep.
|
||||
|
||||
[SHAKE vs RATTLE:]
|
||||
|
||||
[SHAKE vs. RATTLE:]
|
||||
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
|
||||
("Ryckaert et al. (1977)"_#Ryckaert). 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
|
||||
("Andersen (1983)"_#Andersen).
|
||||
|
||||
The SHAKE algorithm was invented for schemes such as Verlet, where only the coordinates
|
||||
are integrated and the velocities are approximated as finite differences to the trajectories ("Ryckaert et al. (1977)"_#Ryckaert).
|
||||
If the velocities are integrated explicitly, for example with velocity Verlet,
|
||||
a second set of constraining forces is required in order to eliminate velocity components along the bonds ("Andersen (1983)"_#Andersen).
|
||||
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} at time {n}, for
|
||||
{i}=1,...,{N}, where {N} is the number of sites of our reference
|
||||
molecule. The distance vector between sites {i} and {j} is given by
|
||||
|
||||
In order to formulate the individual constraints for SHAKE and RATTLE, let us focus on a single molecule whose
|
||||
bonds are to be constrained. Let image(Eqs/fix_rattle_ri.jpg) and image(Eqs/fix_rattle_vi.jpg) be the position and velocity of atom {i} at time {n}, for {i}=1,...,{N}, where {N} is the number of sites of our reference molecule. The distance vector between sites {i} and {j} is given by image(Eqs/fix_rattle_rij.jpg). The constraints can then be formulated as
|
||||
:c,image(Eqs/fix_rattle_rij.jpg)
|
||||
|
||||
The constraints can then be formulated as
|
||||
|
||||
:c,image(Eqs/fix_rattle_constraints.jpg)
|
||||
|
||||
The SHAKE algorithm satisfies the first condition, i.e. the sites at time {n+1} will have the desired separations image(Eqs/fix_rattle_dij.jpg) 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 and fix rattle is implemented in a way that it uses fix shake for dealing with the coordinate constraints. Therefore all the information about SHAKE below is also relevant for RATTLE.
|
||||
The SHAKE algorithm satisfies the first condition, i.e. the sites at
|
||||
time {n+1} 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 all the
|
||||
information below about SHAKE is also relevant for RATTLE.
|
||||
|
||||
[SHAKE:]
|
||||
|
||||
|
||||
Each timestep the specified bonds and angles are reset to their
|
||||
equilibrium lengths and angular values via the well-known SHAKE
|
||||
algorithm. 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.
|
||||
equilibrium lengths and angular values via the SHAKE algorithm
|
||||
("Ryckaert et al. (1977)"_#Ryckaert). 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.
|
||||
|
||||
In LAMMPS, only small clusters of atoms can be constrained. This is
|
||||
so the constraint calculation for a cluster can be performed by a
|
||||
@ -114,7 +129,6 @@ 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).
|
||||
|
||||
|
||||
:line
|
||||
|
||||
The {mol} keyword should be used when other commands, such as "fix
|
||||
@ -152,45 +166,42 @@ more instructions on how to use the accelerated styles effectively.
|
||||
|
||||
:line
|
||||
|
||||
|
||||
[RATTLE:]
|
||||
|
||||
|
||||
The velocity constraints lead to a linear system of equations which
|
||||
can be solved analytically. The implementation of the algorithm in LAMMPS
|
||||
closely follows "Andersen (1983)"_#Andersen.
|
||||
can be solved analytically. The implementation of the algorithm in
|
||||
LAMMPS closely follows "Andersen (1983)"_#Andersen.
|
||||
|
||||
IMPORTANT NOTE: This command modifies forces and velocities and
|
||||
it has to come after all other integration fixes. If you define other
|
||||
fixes that modify velocities or forces after fix rattle operates,
|
||||
then this fix will not take them into account and the 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 fix_rattle.cpp
|
||||
to 1 and recompiling LAMMPS.
|
||||
|
||||
IMPORTANT NOTE: RATTLE does not support cuda at the moment.
|
||||
|
||||
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.
|
||||
|
||||
:line
|
||||
|
||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||
|
||||
No information about this fix is written to "binary restart
|
||||
No information about these fixes is written to "binary restart
|
||||
files"_restart.html. None of the "fix_modify"_fix_modify.html options
|
||||
are relevant to this fix. No global or per-atom quantities are stored
|
||||
by this fix for access by various "output
|
||||
commands"_Section_howto.html#howto_15. No parameter of this fix can
|
||||
be used with the {start/stop} keywords of the "run"_run.html command.
|
||||
This fix is not invoked during "energy minimization"_minimize.html.
|
||||
are relevant to these fixes. No global or per-atom quantities are
|
||||
stored by these fixes for access by various "output
|
||||
commands"_Section_howto.html#howto_15. No parameter of these fixes
|
||||
can be used with the {start/stop} keywords of the "run"_run.html
|
||||
command. These fixes are not invoked during "energy
|
||||
minimization"_minimize.html.
|
||||
|
||||
[Restrictions:]
|
||||
|
||||
This fix is part of the RIGID package. It is only enabled if LAMMPS
|
||||
was built with that package. See the "Making
|
||||
These fixes are part of the RIGID package. They are only enabled if
|
||||
LAMMPS was built with that package. See the "Making
|
||||
LAMMPS"_Section_start.html#start_3 section for more info.
|
||||
|
||||
For computational efficiency, there can only be one shake fix defined
|
||||
in a simulation.
|
||||
For computational efficiency, there can only be one shake or rattle
|
||||
fix defined in a simulation.
|
||||
|
||||
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,
|
||||
@ -211,5 +222,3 @@ Journal of Computational Physics, 23, 327–341 (1977).
|
||||
:link(Andersen)
|
||||
[(Andersen)] H. Andersen,
|
||||
Journal of Computational Physics, 52, 24-34 (1983).
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user