Files
lammps/doc/src/fix_neb.rst

262 lines
10 KiB
ReStructuredText

.. index:: fix neb
fix neb command
===============
Syntax
""""""
.. parsed-literal::
fix ID group-ID neb Kspring keyword value
* ID, group-ID are documented in :doc:`fix <fix>` command
* neb = style name of this fix command
* Kspring = spring constant for parallel nudging force (force/distance units or force units, see parallel keyword)
* zero or more keyword/value pairs may be appended
* keyword = *parallel* or *perp* or *end*
.. parsed-literal::
*parallel* value = *neigh* or *ideal*
*neigh* = parallel nudging force based on distance to neighbor replicas (Kspring = force/distance units)
*ideal* = parallel nudging force based on interpolated ideal position (Kspring = force units)
*perp* value = *Kspring2*
*Kspring2* = spring constant for perpendicular nudging force (force/distance units)
*end* values = estyle Kspring3
*estyle* = *first* or *last* or *last/efirst* or *last/efirst/middle*
*first* = apply force to first replica
*last* = apply force to last replica
*last/efirst* = apply force to last replica and set its target energy to that of first replica
*last/efirst/middle* = same as *last/efirst* plus prevent middle replicas having lower energy than first replica
*Kspring3* = spring constant for target energy term (1/distance units)
Examples
""""""""
.. code-block:: LAMMPS
fix 1 active neb 10.0
fix 2 all neb 1.0 perp 1.0 end last
fix 2 all neb 1.0 perp 1.0 end first 1.0 end last 1.0
fix 1 all neb 1.0 parallel ideal end last/efirst 1
Description
"""""""""""
Add nudging forces to atoms in the group for a multi-replica
simulation run via the :doc:`neb <neb>` command to perform a nudged
elastic band (NEB) calculation for finding the transition state.
Hi-level explanations of NEB are given with the :doc:`neb <neb>` command
and on the :doc:`Howto replica <Howto_replica>` doc page. The fix neb
command must be used with the "neb" command and defines how
inter-replica nudging forces are computed. A NEB calculation is
divided in two stages. In the first stage n replicas are relaxed
toward a MEP until convergence. In the second stage, the climbing
image scheme (see :ref:`(Henkelman2) <Henkelman2>`) is enabled, so that the
replica having the highest energy relaxes toward the saddle point
(i.e. the point of highest energy along the MEP), and a second
relaxation is performed.
A key purpose of the nudging forces is to keep the replicas equally
spaced. During the NEB calculation, the 3N-length vector of
interatomic force Fi = -Grad(V) for each replica I is altered. For
all intermediate replicas (i.e. for 1 < I < N, except the climbing
replica) the force vector becomes:
.. parsed-literal::
Fi = -Grad(V) + (Grad(V) dot T') T' + Fnudge_parallel + Fnudge_perp
T' is the unit "tangent" vector for replica I and is a function of Ri,
Ri-1, Ri+1, and the potential energy of the 3 replicas; it points
roughly in the direction of (Ri+i - Ri-1); see the
:ref:`(Henkelman1) <Henkelman1>` paper for details. Ri are the atomic
coordinates of replica I; Ri-1 and Ri+1 are the coordinates of its
neighbor replicas. The term (Grad(V) dot T') is used to remove the
component of the gradient parallel to the path which would tend to
distribute the replica unevenly along the path. Fnudge_parallel is an
artificial nudging force which is applied only in the tangent
direction and which maintains the equal spacing between replicas (see
below for more information). Fnudge_perp is an optional artificial
spring which is applied in a direction perpendicular to the tangent
direction and which prevent the paths from forming acute kinks (see
below for more information).
In the second stage of the NEB calculation, the interatomic force Fi
for the climbing replica (the replica of highest energy after the
first stage) is changed to:
.. parsed-literal::
Fi = -Grad(V) + 2 (Grad(V) dot T') T'
and the relaxation procedure is continued to a new converged MEP.
----------
The keyword *parallel* specifies how the parallel nudging force is
computed. With a value of *neigh*\ , the parallel nudging force is
computed as in :ref:`(Henkelman1) <Henkelman1>` by connecting each
intermediate replica with the previous and the next image:
.. parsed-literal::
Fnudge_parallel = *Kspring* \* (\|Ri+1 - Ri\| - \|Ri - Ri-1\|)
Note that in this case the specified *Kspring* is in force/distance
units.
With a value of *ideal*\ , the spring force is computed as suggested in
ref`(WeinanE) <WeinanE>`
.. parsed-literal::
Fnudge_parallel = -\ *Kspring* \* (RD-RDideal) / (2 \* meanDist)
where RD is the "reaction coordinate" see :doc:`neb <neb>` section, and
RDideal is the ideal RD for which all the images are equally spaced.
I.e. RDideal = (I-1)\*meanDist when the climbing replica is off, where
I is the replica number). The meanDist is the average distance
between replicas. Note that in this case the specified *Kspring* is
in force units.
Note that the *ideal* form of nudging can often be more effective at
keeping the replicas equally spaced.
----------
The keyword *perp* specifies if and how a perpendicular nudging force
is computed. It adds a spring force perpendicular to the path in
order to prevent the path from becoming too strongly kinked. It can
significantly improve the convergence of the NEB calculation when the
resolution is poor. I.e. when few replicas are used; see
:ref:`(Maras) <Maras1>` for details.
The perpendicular spring force is given by
.. parsed-literal::
Fnudge_perp = *Kspring2* \* F(Ri-1,Ri,Ri+1) (Ri+1 + Ri-1 - 2 Ri)
where *Kspring2* is the specified value. F(Ri-1 Ri R+1) is a smooth
scalar function of the angle Ri-1 Ri Ri+1. It is equal to 0.0 when
the path is straight and is equal to 1 when the angle Ri-1 Ri Ri+1 is
acute. F(Ri-1 Ri R+1) is defined in :ref:`(Jonsson) <Jonsson>`.
If *Kspring2* is set to 0.0 (the default) then no perpendicular spring
force is added.
----------
By default, no additional forces act on the first and last replicas
during the NEB relaxation, so these replicas simply relax toward their
respective local minima. By using the key word *end*\ , additional
forces can be applied to the first and/or last replicas, to enable
them to relax toward a MEP while constraining their energy E to the
target energy ETarget.
If ETarget>E, the interatomic force Fi for the specified replica becomes:
.. parsed-literal::
Fi = -Grad(V) + (Grad(V) dot T' + (E-ETarget)\*Kspring3) T', *when* Grad(V) dot T' < 0
Fi = -Grad(V) + (Grad(V) dot T' + (ETarget- E)\*Kspring3) T', *when* Grad(V) dot T' > 0
The "spring" constant on the difference in energies is the specified
*Kspring3* value.
When *estyle* is specified as *first*\ , the force is applied to the
first replica. When *estyle* is specified as *last*\ , the force is
applied to the last replica. Note that the *end* keyword can be used
twice to add forces to both the first and last replicas.
For both these *estyle* settings, the target energy *ETarget* is set
to the initial energy of the replica (at the start of the NEB
calculation).
If the *estyle* is specified as *last/efirst* or *last/efirst/middle*\ ,
force is applied to the last replica, but the target energy *ETarget*
is continuously set to the energy of the first replica, as it evolves
during the NEB relaxation.
The difference between these two *estyle* options is as follows. When
*estyle* is specified as *last/efirst*\ , no change is made to the
inter-replica force applied to the intermediate replicas (neither
first or last). If the initial path is too far from the MEP, an
intermediate replica may relax "faster" and reach a lower energy than
the last replica. In this case the intermediate replica will be
relaxing toward its own local minima. This behavior can be prevented
by specifying *estyle* as *last/efirst/middle* which will alter the
inter-replica force applied to intermediate replicas by removing the
contribution of the gradient to the inter-replica force. This will
only be done if a particular intermediate replica has a lower energy
than the first replica. This should effectively prevent the
intermediate replicas from over-relaxing.
After converging a NEB calculation using an *estyle* of
*last/efirst/middle*\ , you should check that all intermediate replicas
have a larger energy than the first replica. If this is not the case,
the path is probably not a MEP.
Finally, note that the last replica may never reach the target energy
if it is stuck in a local minima which has a larger energy than the
target energy.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command.
The forces due to this fix are imposed during an energy minimization,
as invoked by the :doc:`minimize <minimize>` command via the
:doc:`neb <neb>` command.
Restrictions
""""""""""""
This command can only be used if LAMMPS was built with the REPLICA
package. See the :doc:`Build package <Build_package>` doc
page for more info.
Related commands
""""""""""""""""
:doc:`neb <neb>`
Default
"""""""
The option defaults are parallel = neigh, perp = 0.0, ends is not
specified (no inter-replica force on the end replicas).
----------
.. _Henkelman1:
**(Henkelman1)** Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000).
.. _Henkelman2:
**(Henkelman2)** Henkelman, Uberuaga, Jonsson, J Chem Phys, 113,
9901-9904 (2000).
.. _WeinanE:
**(WeinanE)** E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002).
.. _Jonsson:
**(Jonsson)** Jonsson, Mills and Jacobsen, in Classical and Quantum
Dynamics in Condensed Phase Simulations, edited by Berne, Ciccotti,
and Coker World Scientific, Singapore, 1998, p 385.
.. _Maras1:
**(Maras)** Maras, Trushin, Stukowski, Ala-Nissila, Jonsson,
Comp Phys Comm, 205, 13-21 (2016).