typeset hyperdynamics fix docs with embedded math
This commit is contained in:
@ -58,65 +58,67 @@ Fichthorn as described in :ref:`(Miron) <Mironghd>`. In LAMMPS we use a
|
||||
simplified version of bond-boost GHD where a single bond in the system
|
||||
is biased at any one timestep.
|
||||
|
||||
Bonds are defined between each pair of I,J atoms whose R0ij distance
|
||||
is less than *cutbond*\ , when the system is in a quenched state
|
||||
Bonds are defined between each pair of atoms *ij*\ , whose :math:`R^0_{ij}`
|
||||
distance is less than *cutbond*\ , when the system is in a quenched state
|
||||
(minimum) energy. Note that these are not "bonds" in a covalent
|
||||
sense. A bond is simply any pair of atoms that meet the distance
|
||||
criterion. *Cutbond* is an argument to this fix; it is discussed
|
||||
below. A bond is only formed if one or both of the I.J atoms are in
|
||||
below. A bond is only formed if one or both of the *ij* atoms are in
|
||||
the specified group.
|
||||
|
||||
The current strain of bond IJ (when running dynamics) is defined as
|
||||
The current strain of bond *ij* (when running dynamics) is defined as
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Eij = (Rij - R0ij) / R0ij
|
||||
E_{ij} = \frac{R_{ij} - R^0_{ij}}{R^0_{ij}}
|
||||
|
||||
where Rij is the current distance between atoms I,J, and R0ij is the
|
||||
equilibrium distance in the quenched state.
|
||||
where :math:`R_{ij}` is the current distance between atoms *i* and *j*\ ,
|
||||
and :math:`R^0_{ij}` is the equilibrium distance in the quenched state.
|
||||
|
||||
The bias energy Vij of any bond IJ is defined as
|
||||
The bias energy :math:`V_{ij}` of any bond between atoms *i* and *j*
|
||||
is defined as
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Vij = Vmax \* (1 - (Eij/q)\^2) for abs(Eij) < qfactor
|
||||
= 0 otherwise
|
||||
V_{ij} = V^{max} \cdot \left( 1 - \left(\frac{E_{ij}}{q}\right)^2 \right) \textrm{ for } \left|E_{ij}\right| < qfactor \textrm{ or } 0 \textrm{ otherwise}
|
||||
|
||||
where the prefactor *Vmax* and the cutoff *qfactor* are arguments to
|
||||
where the prefactor :math:`V^{max}` and the cutoff *qfactor* are arguments to
|
||||
this fix; they are discussed below. This functional form is an
|
||||
inverse parabola centered at 0.0 with height Vmax and which goes to
|
||||
0.0 at +/- qfactor.
|
||||
inverse parabola centered at 0.0 with height :math:`V^{max}` and
|
||||
which goes to 0.0 at +/- qfactor.
|
||||
|
||||
Let Emax = the maximum of abs(Eij) for all IJ bonds in the system on a
|
||||
given timestep. On that step, Vij is added as a bias potential to
|
||||
only the single bond with strain Emax, call it Vij(max). Note that
|
||||
Vij(max) will be 0.0 if Emax >= qfactor on that timestep. Also note
|
||||
that Vij(max) is added to the normal interatomic potential that is
|
||||
computed between all atoms in the system at every step.
|
||||
Let :math:`E^{max}` be the maximum of :math:`\left| E_{ij} \right|`
|
||||
for all *ij* bonds in the system on a
|
||||
given timestep. On that step, :math:`V_{ij}` is added as a bias potential
|
||||
to only the single bond with strain :math:`E^{max}`, call it
|
||||
:math:`V^{max}_{ij}`. Note that :math:`V^{max}_{ij}` will be 0.0
|
||||
if :math:`E^{max} >= \textrm{qfactor}` on that timestep. Also note
|
||||
that :math:`V^{max}_{ij}` is added to the normal interatomic potential
|
||||
that is computed between all atoms in the system at every step.
|
||||
|
||||
The derivative of Vij(max) with respect to the position of each atom
|
||||
in the Emax bond gives a bias force Fij(max) acting on the bond as
|
||||
The derivative of :math:`V^{max}_{ij}` with respect to the position of
|
||||
each atom in the :math:`E^{max}` bond gives a bias force
|
||||
:math:`F^{max}_{ij}` acting on the bond as
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Fij(max) = - dVij(max)/dEij = 2 Vmax Eij / qfactor\^2 for abs(Eij) < qfactor
|
||||
= 0 otherwise
|
||||
F^{max}_{ij} = - \frac{dV^{max}_{ij}}{dE_{ij}} = \frac{2 V^{max} E-{ij}}{\textrm{qfactor}^2} \textrm{ for } \left|E_{ij}\right| < \textrm{qfactor} \textrm{ or } 0 \textrm{ otherwise}
|
||||
|
||||
which can be decomposed into an equal and opposite force acting on
|
||||
only the two I,J atoms in the Emax bond.
|
||||
only the two *ij* atoms in the :math:`E^{max}` bond.
|
||||
|
||||
The time boost factor for the system is given each timestep I by
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Bi = exp(beta \* Vij(max))
|
||||
B_i = e^{\beta V^{max}_{ij}}
|
||||
|
||||
where beta = 1/kTequil, and *Tequil* is the temperature of the system
|
||||
and an argument to this fix. Note that Bi >= 1 at every step.
|
||||
where :math:`\beta = \frac{1}{kT_{equil}}`, and :math:`T_{equil}` is the temperature of the system
|
||||
and an argument to this fix. Note that :math:`B_i >= 1` at every step.
|
||||
|
||||
.. note::
|
||||
|
||||
@ -125,21 +127,21 @@ and an argument to this fix. Note that Bi >= 1 at every step.
|
||||
constant-temperature (NVT) dynamics. LAMMPS does not check that this
|
||||
is done.
|
||||
|
||||
The elapsed time t\_hyper for a GHD simulation running for *N*
|
||||
The elapsed time :math:`t_{hyper}` for a GHD simulation running for *N*
|
||||
timesteps is simply
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
t_hyper = Sum (i = 1 to N) Bi \* dt
|
||||
t_{hyper} = \sum_{i=1,N} B-i \cdot dt
|
||||
|
||||
where dt is the timestep size defined by the :doc:`timestep <timestep>`
|
||||
where *dt* is the timestep size defined by the :doc:`timestep <timestep>`
|
||||
command. The effective time acceleration due to GHD is thus t\_hyper /
|
||||
N\*dt, where N\*dt is elapsed time for a normal MD run of N timesteps.
|
||||
|
||||
Note that in GHD, the boost factor varies from timestep to timestep.
|
||||
Likewise, which bond has Emax strain and thus which pair of atoms the
|
||||
bias potential is added to, will also vary from timestep to timestep.
|
||||
Likewise, which bond has :math:`E^{max}` strain and thus which pair of
|
||||
atoms the bias potential is added to, will also vary from timestep to timestep.
|
||||
This is in contrast to local hyperdynamics (LHD) where the boost
|
||||
factor is an input parameter; see the :doc:`fix hyper/local <fix_hyper_local>` doc page for details.
|
||||
|
||||
@ -150,9 +152,9 @@ factor is an input parameter; see the :doc:`fix hyper/local <fix_hyper_local>` d
|
||||
Here is additional information on the input parameters for GHD.
|
||||
|
||||
The *cutbond* argument is the cutoff distance for defining bonds
|
||||
between pairs of nearby atoms. A pair of I,J atoms in their
|
||||
between pairs of nearby atoms. A pair of *ij* atoms in their
|
||||
equilibrium, minimum-energy configuration, which are separated by a
|
||||
distance Rij < *cutbond*\ , are flagged as a bonded pair. Setting
|
||||
distance :math:`R_{ij} < cutbond`, are flagged as a bonded pair. Setting
|
||||
*cubond* to be ~25% larger than the nearest-neighbor distance in a
|
||||
crystalline lattice is a typical choice for solids, so that bonds
|
||||
exist only between nearest neighbor pairs.
|
||||
@ -166,7 +168,7 @@ could still experience a non-zero bias force.
|
||||
If *qfactor* is set too large, then transitions from one energy basin
|
||||
to another are affected because the bias potential is non-zero at the
|
||||
transition state (e.g. saddle point). If *qfactor* is set too small
|
||||
than little boost is achieved because the Eij strain of some bond in
|
||||
than little boost is achieved because the :math:`E_{ij}` strain of some bond in
|
||||
the system will (nearly) always exceed *qfactor*\ . A value of 0.3 for
|
||||
*qfactor* is typically reasonable.
|
||||
|
||||
@ -220,7 +222,7 @@ scalar is the magnitude of the bias potential (energy units) applied on
|
||||
the current timestep. The vector stores the following quantities:
|
||||
|
||||
* 1 = boost factor on this step (unitless)
|
||||
* 2 = max strain Eij of any bond on this step (absolute value, unitless)
|
||||
* 2 = max strain :math:`E_{ij}` of any bond on this step (absolute value, unitless)
|
||||
* 3 = ID of first atom in the max-strain bond
|
||||
* 4 = ID of second atom in the max-strain bond
|
||||
* 5 = average # of bonds/atom on this step
|
||||
|
||||
@ -77,66 +77,66 @@ To understand this description, you should first read the description
|
||||
of the GHD algorithm on the :doc:`fix hyper/global <fix_hyper_global>`
|
||||
doc page. This description of LHD builds on the GHD description.
|
||||
|
||||
The definition of bonds and Eij are the same for GHD and LHD. The
|
||||
formulas for Vij(max) and Fij(max) are also the same except for a
|
||||
pre-factor Cij, explained below.
|
||||
The definition of bonds and :math:`E_{ij}` are the same for GHD and LHD.
|
||||
The formulas for :math:`V^{max}_{ij}` and :math:`F^{max}_{ij}` are also
|
||||
the same except for a pre-factor :math:`C_{ij}`, explained below.
|
||||
|
||||
The bias energy Vij applied to a bond IJ with maximum strain is
|
||||
The bias energy :math:`V_{ij}` applied to a bond *ij* with maximum strain is
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Vij(max) = Cij \* Vmax \* (1 - (Eij/q)\^2) for abs(Eij) < qfactor
|
||||
= 0 otherwise
|
||||
V^{max}_{ij} = C_{ij} \cdot V^{max} \cdot \left(1 - \left(\frac{E_{ij}}{q}\right)^2\right) \textrm{ for } \left|E_{ij}\right| < qfactor \textrm{ or } 0 \textrm{ otherwise}
|
||||
|
||||
The derivative of Vij(max) with respect to the position of each atom
|
||||
in the IJ bond gives a bias force Fij(max) acting on the bond as
|
||||
The derivative of :math:`V^{max}_{ij}` with respect to the position of
|
||||
each atom in the *ij* bond gives a bias force :math:`F^{max}_{ij}` acting
|
||||
on the bond as
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Fij(max) = - dVij(max)/dEij = 2 Cij Vmax Eij / qfactor\^2 for abs(Eij) < qfactor
|
||||
= 0 otherwise
|
||||
F^{max}_{ij} = - \frac{dV^{max}_{ij}}{dE_{ij}} = 2 C_{ij} V^{max} \frac{E_{ij}}{qfactor^2} \textrm{ for } \left|E_{ij}\right| < qfactor \textrm{ or } 0 \textrm{ otherwise}
|
||||
|
||||
which can be decomposed into an equal and opposite force acting on
|
||||
only the two I,J atoms in the IJ bond.
|
||||
only the two atoms *i* and *j* in the *ij* bond.
|
||||
|
||||
The key difference is that in GHD a bias energy and force is added (on
|
||||
a particular timestep) to only one bond (pair of atoms) in the system,
|
||||
which is the bond with maximum strain Emax.
|
||||
which is the bond with maximum strain :math:`E^{max}`.
|
||||
|
||||
In LHD, a bias energy and force can be added to multiple bonds
|
||||
separated by the specified *Dcut* distance or more. A bond IJ is
|
||||
separated by the specified *Dcut* distance or more. A bond *ij* is
|
||||
biased if it is the maximum strain bond within its local
|
||||
"neighborhood", which is defined as the bond IJ plus any neighbor
|
||||
bonds within a distance *Dcut* from IJ. The "distance" between bond
|
||||
IJ and bond KL is the minimum distance between any of the IK, IL, JK,
|
||||
JL pairs of atoms.
|
||||
"neighborhood", which is defined as the bond *ij* plus any neighbor
|
||||
bonds within a distance *Dcut* from *ij*. The "distance" between bond
|
||||
*ij* and bond *kl* is the minimum distance between any of the *ik*, *il*,
|
||||
*jk*, and *jl* pairs of atoms.
|
||||
|
||||
For a large system, multiple bonds will typically meet this
|
||||
requirement, and thus a bias potential Vij(max) will be applied to
|
||||
many bonds on the same timestep.
|
||||
requirement, and thus a bias potential :math:`V^{max}_{ij}` will be
|
||||
applied to many bonds on the same timestep.
|
||||
|
||||
In LHD, all bonds store a Cij prefactor which appears in the Vij(max)
|
||||
and Fij(max) equations above. Note that the Cij factor scales the
|
||||
strength of the bias energy and forces whenever bond IJ is the maximum
|
||||
strain bond in its neighborhood.
|
||||
In LHD, all bonds store a :math:`C_{ij}` prefactor which appears in
|
||||
the :math:`V^{max}_{ij}` and :math:`F^{max}_{ij}equations above. Note
|
||||
that the :math:`C_{ij}` factor scales the strength of the bias energy
|
||||
and forces whenever bond *ij* is the maximum strain bond in its neighborhood.
|
||||
|
||||
Cij is initialized to 1.0 when a bond between the I,J atoms is first
|
||||
defined. The specified *Btarget* factor is then used to adjust the
|
||||
Cij prefactors for each bond every timestep in the following manner.
|
||||
:math:`C_{ij}` is initialized to 1.0 when a bond between the *ij* atoms
|
||||
is first defined. The specified *Btarget* factor is then used to adjust the
|
||||
:math:`C_{ij}` prefactors for each bond every timestep in the following manner.
|
||||
|
||||
An instantaneous boost factor Bij is computed each timestep
|
||||
An instantaneous boost factor :math:`B_{ij}` is computed each timestep
|
||||
for each bond, as
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Bij = exp(beta \* Vkl(max))
|
||||
B_{ij} = e^{\beta V^{max}_{kl}}
|
||||
|
||||
where Vkl(max) is the bias energy of the maxstrain bond KL within bond
|
||||
IJ's neighborhood, beta = 1/kTequil, and *Tequil* is the temperature
|
||||
of the system and an argument to this fix.
|
||||
where :math:`V^{max}_{kl}` is the bias energy of the maxstrain bond *kl*
|
||||
within bond *ij*\ 's neighborhood, :math:`\beta = \frac{1}{kT_{equil}}`,
|
||||
and :math:`T_{equil}` is the temperature of the system and an argument
|
||||
to this fix.
|
||||
|
||||
.. note::
|
||||
|
||||
@ -146,28 +146,32 @@ of the system and an argument to this fix.
|
||||
running constant-temperature (NVT) dynamics. LAMMPS does not check
|
||||
that this is done.
|
||||
|
||||
Note that if IJ = KL, then bond IJ is a biased bond on that timestep,
|
||||
otherwise it is not. But regardless, the boost factor Bij can be
|
||||
thought of an estimate of time boost currently being applied within a
|
||||
local region centered on bond IJ. For LHD, we want this to be the
|
||||
specified *Btarget* value everywhere in the simulation domain.
|
||||
Note that if *ij*\ == *kl*\ , then bond *ij* is a biased bond on that
|
||||
timestep, otherwise it is not. But regardless, the boost factor
|
||||
:math:`B_{ij}` can be thought of an estimate of time boost currently
|
||||
being applied within a local region centered on bond *ij*. For LHD,
|
||||
we want this to be the specified *Btarget* value everywhere in the
|
||||
simulation domain.
|
||||
|
||||
To accomplish this, if Bij < Btarget, the Cij prefactor for bond IJ is
|
||||
incremented on the current timestep by an amount proportional to the
|
||||
inverse of the specified *alpha* and the difference (Bij - Btarget).
|
||||
Conversely if Bij > Btarget, Cij is decremented by the same amount.
|
||||
This procedure is termed "boostostatting" in
|
||||
:ref:`(Voter2013) <Voter2013lhd>`. It drives all of the individual Cij to
|
||||
values such that when Vij\ *max* is applied as a bias to bond IJ, the
|
||||
resulting boost factor Bij will be close to *Btarget* on average.
|
||||
To accomplish this, if :math:`B_{ij} < B_{target}`, the :math:`C_{ij}`
|
||||
prefactor for bond *ij* is incremented on the current timestep by an
|
||||
amount proportional to the inverse of the specified *alpha* and the
|
||||
difference (:math:`B_{ij} - B_{target}`).
|
||||
Conversely if :math:`B_{ij} > B_{target}`, :math:`C_{ij}` is decremented
|
||||
by the same amount.
|
||||
This procedure is termed "boostostatting" in :ref:`(Voter2013) <Voter2013lhd>`.
|
||||
It drives all of the individual :math:`C_{ij}` to
|
||||
values such that when :math:`V^{max}_{ij}` is applied as a bias to
|
||||
bond *ij*, the resulting boost factor :math:`B_{ij}` will be close
|
||||
to :math:`B_{target}` on average.
|
||||
Thus the LHD time acceleration factor for the overall system is
|
||||
effectively *Btarget*\ .
|
||||
|
||||
Note that in LHD, the boost factor *Btarget* is specified by the user.
|
||||
Note that in LHD, the boost factor :math:`B_{target}` is specified by the user.
|
||||
This is in contrast to global hyperdynamics (GHD) where the boost
|
||||
factor varies each timestep and is computed as a function of *Vmax*\ ,
|
||||
Emax, and *Tequil*\ ; see the :doc:`fix hyper/global <fix_hyper_global>`
|
||||
doc page for details.
|
||||
factor varies each timestep and is computed as a function of :math:`V_{max}`,
|
||||
:math:`E_{max}`, and :math:`T_{equil}`; see the
|
||||
:doc:`fix hyper/global <fix_hyper_global>` doc page for details.
|
||||
|
||||
|
||||
----------
|
||||
@ -182,7 +186,7 @@ The *Dcut*\ , *alpha*\ , and *Btarget* parameters are unique to LHD.
|
||||
The *cutbond* argument is the cutoff distance for defining bonds
|
||||
between pairs of nearby atoms. A pair of I,J atoms in their
|
||||
equilibrium, minimum-energy configuration, which are separated by a
|
||||
distance Rij < *cutbond*\ , are flagged as a bonded pair. Setting
|
||||
distance :math:`R_{ij} < cutbond`, are flagged as a bonded pair. Setting
|
||||
*cubond* to be ~25% larger than the nearest-neighbor distance in a
|
||||
crystalline lattice is a typical choice for solids, so that bonds
|
||||
exist only between nearest neighbor pairs.
|
||||
@ -190,37 +194,40 @@ exist only between nearest neighbor pairs.
|
||||
The *qfactor* argument is the limiting strain at which the bias
|
||||
potential goes to 0.0. It is dimensionless, so a value of 0.3 means a
|
||||
bond distance can be up to 30% larger or 30% smaller than the
|
||||
equilibrium (quenched) R0ij distance and the two atoms in the bond
|
||||
equilibrium (quenched) :math:`R^0_{ij}` distance and the two atoms in the bond
|
||||
could still experience a non-zero bias force.
|
||||
|
||||
If *qfactor* is set too large, then transitions from one energy basin
|
||||
to another are affected because the bias potential is non-zero at the
|
||||
transition state (e.g. saddle point). If *qfactor* is set too small
|
||||
than little boost can be achieved because the Eij strain of some bond in
|
||||
than little boost can be achieved because the :math:`E_{ij}` strain of
|
||||
some bond in
|
||||
the system will (nearly) always exceed *qfactor*\ . A value of 0.3 for
|
||||
*qfactor* is typically a reasonable value.
|
||||
|
||||
The *Vmax* argument is a fixed prefactor on the bias potential. There
|
||||
is a also a dynamic prefactor Cij, driven by the choice of *Btarget*
|
||||
as discussed above. The product of these should be a value less than
|
||||
is a also a dynamic prefactor :math:`C_{ij}`, driven by the choice of
|
||||
*Btarget* as discussed above. The product of these should be a value less than
|
||||
the smallest barrier height for an event to occur. Otherwise the
|
||||
applied bias potential may be large enough (when added to the
|
||||
interatomic potential) to produce a local energy basin with a maxima
|
||||
in the center. This can produce artificial energy minima in the same
|
||||
basin that trap an atom. Or if Cij\*\ *Vmax* is even larger, it may
|
||||
basin that trap an atom. Or if :math:`C_{ij} \cdot V^{max}` is even
|
||||
larger, it may
|
||||
induce an atom(s) to rapidly transition to another energy basin. Both
|
||||
cases are "bad dynamics" which violate the assumptions of LHD that
|
||||
guarantee an accelerated time-accurate trajectory of the system.
|
||||
|
||||
.. note::
|
||||
|
||||
It may seem that *Vmax* can be set to any value, and Cij will
|
||||
compensate to reduce the overall prefactor if necessary. However the
|
||||
Cij are initialized to 1.0 and the boostostatting procedure typically
|
||||
operates slowly enough that there can be a time period of bad dynamics
|
||||
if *Vmax* is set too large. A better strategy is to set *Vmax* to the
|
||||
It may seem that :math:`V^{max}` can be set to any value, and
|
||||
:math:`C_{ij}` will compensate to reduce the overall prefactor
|
||||
if necessary. However the :math:`C_{ij}` are initialized to 1.0
|
||||
and the boostostatting procedure typically operates slowly enough
|
||||
that there can be a time period of bad dynamics if :math:`V^{max}`
|
||||
is set too large. A better strategy is to set :math:`V^{max}` to the
|
||||
slightly smaller than the lowest barrier height for an event (the same
|
||||
as for GHD), so that the Cij remain near unity.
|
||||
as for GHD), so that the :math:`C_{ij}` remain near unity.
|
||||
|
||||
The *Tequil* argument is the temperature at which the system is
|
||||
simulated; see the comment above about the :doc:`fix langevin <fix_langevin>` thermostatting. It is also part of the
|
||||
@ -262,11 +269,11 @@ half the *cutbond* parameter as an estimate to warn if the ghost
|
||||
cutoff is not long enough.
|
||||
|
||||
As described above the *alpha* argument is a pre-factor in the
|
||||
boostostat update equation for each bond's Cij prefactor. *Alpha* is
|
||||
specified in time units, similar to other thermostat or barostat
|
||||
boostostat update equation for each bond's :math:`C_{ij}` prefactor.
|
||||
*Alpha* is specified in time units, similar to other thermostat or barostat
|
||||
damping parameters. It is roughly the physical time it will take the
|
||||
boostostat to adjust a Cij value from a too high (or too low) value to
|
||||
a correct one. An *alpha* setting of a few ps is typically good for
|
||||
boostostat to adjust a :math:`C_{ij}` value from a too high (or too low)
|
||||
value to a correct one. An *alpha* setting of a few ps is typically good for
|
||||
solid-state systems. Note that the *alpha* argument here is the
|
||||
inverse of the alpha parameter discussed in
|
||||
:ref:`(Voter2013) <Voter2013lhd>`.
|
||||
@ -276,25 +283,26 @@ that all the atoms in the system will experience. The elapsed time
|
||||
t\_hyper for an LHD simulation running for *N* timesteps is simply
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
t_hyper = Btarget \* N\*dt
|
||||
t_{hyper} = B_{target} \cdot N \cdot dt
|
||||
|
||||
where dt is the timestep size defined by the :doc:`timestep <timestep>`
|
||||
command. The effective time acceleration due to LHD is thus t\_hyper /
|
||||
N\*dt = Btarget, where N\*dt is elapsed time for a normal MD run
|
||||
of N timesteps.
|
||||
where *dt* is the timestep size defined by the :doc:`timestep <timestep>`
|
||||
command. The effective time acceleration due to LHD is thus
|
||||
:math:`\frac{t_{hyper}}{N\cdot dt} = B_{target}`, where :math:`N\cdot dt`
|
||||
is the elapsed time for a normal MD run of N timesteps.
|
||||
|
||||
You cannot choose an arbitrarily large setting for *Btarget*\ . The
|
||||
maximum value you should choose is
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. math::
|
||||
|
||||
Btarget = exp(beta \* Vsmall)
|
||||
B_{target} = e^{\beta V_{small}}
|
||||
|
||||
where Vsmall is the smallest event barrier height in your system, beta
|
||||
= 1/kTequil, and *Tequil* is the specified temperature of the system
|
||||
where :math:`V_{small}` is the smallest event barrier height in your
|
||||
system, :math:`\beta = \frac{1}{kT_{equil}}`, and :math:`T_{equil}`
|
||||
is the specified temperature of the system
|
||||
(both by this fix and the Langevin thermostat).
|
||||
|
||||
Note that if *Btarget* is set smaller than this, the LHD simulation
|
||||
@ -315,41 +323,42 @@ time (t\_hyper equation above) will be shorter.
|
||||
|
||||
Here is additional information on the optional keywords for this fix.
|
||||
|
||||
The *bound* keyword turns on min/max bounds for bias coefficients Cij
|
||||
for all bonds. Cij is a prefactor for each bond on the bias potential
|
||||
of maximum strength Vmax. Depending on the choice of *alpha* and
|
||||
*Btarget* and *Vmax*\ , the boostostatting can cause individual Cij
|
||||
values to fluctuate. If the fluctuations are too large Cij\*Vmax can
|
||||
exceed low barrier heights and induce bad event dynamics. Bounding
|
||||
the Cij values is a way to prevent this. If *Bfrac* is set to -1 or
|
||||
any negative value (the default) then no bounds are enforced on Cij
|
||||
values (except they must always be >= 0.0). A *Bfrac* setting >= 0.0
|
||||
sets a lower bound of 1.0 - Bfrac and upper bound of 1.0 + Bfrac on
|
||||
each Cij value. Note that all Cij values are initialized to 1.0 when
|
||||
a bond is created for the first time. Thus *Bfrac* limits the bias
|
||||
potential height to *Vmax* +/- *Bfrac*\ \*\ *Vmax*\ .
|
||||
The *bound* keyword turns on min/max bounds for bias coefficients
|
||||
:math:`C_{ij}` for all bonds. :math:`C_{ij}` is a prefactor for each bond on
|
||||
the bias potential of maximum strength :math:`V^{max}`. Depending on the
|
||||
choice of *alpha* and *Btarget* and *Vmax*\ , the boostostatting can cause
|
||||
individual :math:`C_{ij}` values to fluctuate. If the fluctuations are too
|
||||
large :math:`C_{ij} \cdot V^{max}` can exceed low barrier heights and induce
|
||||
bad event dynamics. Bounding the :math:`C_{ij}` values is a way to prevent
|
||||
this. If *Bfrac* is set to -1 or any negative value (the default) then no
|
||||
bounds are enforced on :math:`C_{ij}` values (except they must always
|
||||
be >= 0.0). A *Bfrac* setting >= 0.0
|
||||
sets a lower bound of 1.0 - Bfrac and upper bound of 1.0 + Bfrac on each
|
||||
:math:`C_{ij}` value. Note that all :math:`C_{ij}` values are initialized
|
||||
to 1.0 when a bond is created for the first time. Thus *Bfrac* limits the
|
||||
bias potential height to *Vmax* +/- *Bfrac*\ \*\ *Vmax*\ .
|
||||
|
||||
The *reset* keyword allow *Vmax* to be adjusted dynamically depending
|
||||
on the average value of all Cij prefactors. This can be useful if you
|
||||
The *reset* keyword allow *Vmax* to be adjusted dynamically depending on the
|
||||
average value of all :math:`C_{ij}` prefactors. This can be useful if you
|
||||
are unsure what value of *Vmax* will match the *Btarget* boost for the
|
||||
system. The Cij values will then adjust in aggregate (up or down) so
|
||||
that Cij\*Vmax produces a boost of *Btarget*\ , but this may conflict
|
||||
with the *bound* keyword settings. By using *bound* and *reset*
|
||||
together, *Vmax* itself can be reset, and desired bounds still applied
|
||||
to the Cij values.
|
||||
system. The :math:`C_{ij}` values will then adjust in aggregate (up or down)
|
||||
so that :math:`C_{ij} \cdot V^{max}` produces a boost of *Btarget*\ , but this
|
||||
may conflict with the *bound* keyword settings. By using *bound* and *reset*
|
||||
together, :math:`V^{max}` itself can be reset, and desired bounds still applied
|
||||
to the :math:`C_{ij}` values.
|
||||
|
||||
A setting for *Rfreq* of -1 (the default) means *Vmax* never changes.
|
||||
A setting of 0 means *Vmax* is adjusted every time an event occurs and
|
||||
A setting of 0 means :math:`V^{max}` is adjusted every time an event occurs and
|
||||
bond pairs are recalculated. A setting of N > 0 timesteps means
|
||||
*Vmax* is adjusted on the first time an event occurs on a timestep >=
|
||||
N steps after the previous adjustment. The adjustment to *Vmax* is
|
||||
computed as follows. The current average of all Cij\*Vmax values is
|
||||
computed and the *Vmax* is reset to that value. All Cij values are
|
||||
changed to new prefactors such the new Cij\*Vmax is the same as it was
|
||||
previously. If the *bound* keyword was used, those bounds are
|
||||
enforced on the new Cij values. Henceforth, new bonds are assigned a
|
||||
Cij = 1.0, which means their bias potential magnitude is the new
|
||||
*Vmax*\ .
|
||||
:math:`V^{max}` is adjusted on the first time an event occurs on a timestep >=
|
||||
N steps after the previous adjustment. The adjustment to :math:`V^{max}` is
|
||||
computed as follows. The current average of all :math:`C_{ij} \cdot V^{max}`
|
||||
values is computed and the :math:`V^{max}` is reset to that value. All
|
||||
:math:`C_{ij}` values are changed to new prefactors such the new
|
||||
:math:`C_{ij} \cdot V^{max}` is the same as it was previously. If the
|
||||
*bound* keyword was used, those bounds are enforced on the new :math:`C_{ij}`
|
||||
values. Henceforth, new bonds are assigned a :math:`C_{ij} = 1.0`, which
|
||||
means their bias potential magnitude is the new :math:`V^{max}`.
|
||||
|
||||
The *check/ghost* keyword turns on extra computation each timestep to
|
||||
compute statistics about ghost atoms used to determine which bonds to
|
||||
@ -390,8 +399,8 @@ vector stores the following quantities:
|
||||
|
||||
* 1 = average boost for all bonds on this step (unitless)
|
||||
* 2 = # of biased bonds on this step
|
||||
* 3 = max strain Eij of any bond on this step (absolute value, unitless)
|
||||
* 4 = value of Vmax on this step (energy units)
|
||||
* 3 = max strain :math:`E_{ij}` of any bond on this step (absolute value, unitless)
|
||||
* 4 = value of :math:`V^{max}` on this step (energy units)
|
||||
* 5 = average bias coeff for all bonds on this step (unitless)
|
||||
* 6 = min bias coeff for all bonds on this step (unitless)
|
||||
* 7 = max bias coeff for all bonds on this step (unitless)
|
||||
@ -428,12 +437,12 @@ multiple runs (since the point in the input script the fix was
|
||||
defined).
|
||||
|
||||
For value 10, each bond instantaneous boost factor is given by the
|
||||
equation for Bij above. The total system boost (average across all
|
||||
equation for :math:`B_{ij}` above. The total system boost (average across all
|
||||
bonds) fluctuates, but should average to a value close to the
|
||||
specified Btarget.
|
||||
specified :math:`B_{target}`.
|
||||
|
||||
For value 12, the numerator is a count of all biased bonds on each
|
||||
timestep whose bias energy = 0.0 due to Eij >= *qfactor*\ . The
|
||||
timestep whose bias energy = 0.0 due to :math:`E_{ij} >= qfactor`. The
|
||||
denominator is the count of all biased bonds on all timesteps.
|
||||
|
||||
For value 13, the numerator is a count of all biased bonds on each
|
||||
@ -522,12 +531,12 @@ The scalar and vector values calculated by this fix are all
|
||||
"intensive".
|
||||
|
||||
This fix also computes a local vector of length the number of bonds
|
||||
currently in the system. The value for each bond is its Cij prefactor
|
||||
(bias coefficient). These values can be can be accessed by various
|
||||
currently in the system. The value for each bond is its :math:`C_{ij}`
|
||||
prefactor (bias coefficient). These values can be can be accessed by various
|
||||
:doc:`output commands <Howto_output>`. A particularly useful one is the
|
||||
:doc:`fix ave/histo <fix_ave_histo>` command which can be used to
|
||||
histogram the Cij values to see if they are distributed reasonably
|
||||
close to 1.0, which indicates a good choice of *Vmax*\ .
|
||||
close to 1.0, which indicates a good choice of :math:`V^{max}`.
|
||||
|
||||
The local values calculated by this fix are unitless.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user