Math replacements; code-block LAMMPS; clarity and parsing-friendly edits

This commit is contained in:
Karl Hammond
2022-08-16 20:29:12 -05:00
parent 953f63bb8f
commit fe8a7a3799
43 changed files with 702 additions and 567 deletions

View File

@ -9,7 +9,7 @@ Accelerator Variants: *orientorder/atom/kk*
Syntax
""""""
.. parsed-literal::
.. code-block:: LAMMPS
compute ID group-ID orientorder/atom keyword values ...
@ -42,30 +42,30 @@ Description
"""""""""""
Define a computation that calculates a set of bond-orientational
order parameters :math:`Q_l` for each atom in a group. These order parameters
order parameters :math:`Q_\ell` for each atom in a group. These order parameters
were introduced by :ref:`Steinhardt et al. <Steinhardt>` as a way to
characterize the local orientational order in atomic structures.
For each atom, :math:`Q_l` is a real number defined as follows:
For each atom, :math:`Q_\ell` is a real number defined as follows:
.. math::
\bar{Y}_{lm} = & \frac{1}{nnn}\sum_{j = 1}^{nnn} Y_{lm}( \theta( {\bf r}_{ij} ), \phi( {\bf r}_{ij} ) ) \\
Q_l = & \sqrt{\frac{4 \pi}{2 l + 1} \sum_{m = -l}^{m = l} \bar{Y}_{lm} \bar{Y}^*_{lm}}
\bar{Y}_{\ell m} = & \frac{1}{nnn}\sum_{j = 1}^{nnn} Y_{\ell m}\bigl( \theta( {\bf r}_{ij} ), \phi( {\bf r}_{ij} ) \bigr) \\
Q_\ell = & \sqrt{\frac{4 \pi}{2 \ell + 1} \sum_{m = -\ell }^{m = \ell } \bar{Y}_{\ell m} \bar{Y}^*_{\ell m}}
The first equation defines the local order parameters as averages
of the spherical harmonics :math:`Y_{lm}` for each neighbor.
of the spherical harmonics :math:`Y_{\ell m}` for each neighbor.
These are complex number components of the 3D analog of the 2D order
parameter :math:`q_n`, which is implemented as LAMMPS compute
:doc:`hexorder/atom <compute_hexorder_atom>`.
The summation is over the *nnn* nearest
neighbors of the central atom.
The angles :math:`theta` and :math:`phi` are the standard spherical polar angles
neighbors of the central atom. The angles :math:`\theta` and :math:`\phi` are
the standard spherical polar angles
defining the direction of the bond vector :math:`r_{ij}`.
The phase and sign of :math:`Y_{lm}` follow the standard conventions,
so that :math:`{\rm sign}(Y_{ll}(0,0)) = (-1)^l`.
The second equation defines :math:`Q_l`, which is a
The phase and sign of :math:`Y_{\ell m}` follow the standard conventions,
so that :math:`\mathrm{sign}(Y_{\ell\ell}(0,0)) = (-1)^\ell`.
The second equation defines :math:`Q_\ell`, which is a
rotationally invariant non-negative amplitude obtained by summing
over all the components of degree *l*\ .
over all the components of degree :math:`\ell`.
The optional keyword *cutoff* defines the distance cutoff
used when searching for neighbors. The default value, also
@ -73,7 +73,7 @@ the maximum allowable value, is the cutoff specified
by the pair style.
The optional keyword *nnn* defines the number of nearest
neighbors used to calculate :math:`Q_l`. The default value is 12.
neighbors used to calculate :math:`Q_\ell`. The default value is 12.
If the value is NULL, then all neighbors up to the
specified distance cutoff are used.
@ -84,32 +84,45 @@ degree of each order parameter. Because :math:`Q_2` and all odd-degree order
parameters are zero for atoms in cubic crystals (see
:ref:`Steinhardt <Steinhardt>`), the default order parameters are :math:`Q_4`,
:math:`Q_6`, :math:`Q_8`, :math:`Q_{10}`, and :math:`Q_{12}`. For the FCC
crystal with *nnn* =12, :math:`Q_4 = \sqrt{\frac{7}{192}} = 0.19094...`.
crystal with *nnn* =12,
.. math::
Q_4 = \sqrt{\frac{7}{192}} \approx 0.19094
The numerical values of all order
parameters up to :math:`Q_12` for a range of commonly encountered
parameters up to :math:`Q_{12}` for a range of commonly encountered
high-symmetry structures are given in Table I of :ref:`Mickel et al. <Mickel>`,
and these can be reproduced with this compute.
The optional keyword *wl* will output the third-order invariants :math:`W_l`
The optional keyword *wl* will output the third-order invariants :math:`W_\ell`
(see Eq. 1.4 in :ref:`Steinhardt <Steinhardt>`) for the same degrees as
for the :math:`Q_l` parameters. For the FCC crystal with *nnn* =12,
:math:`W_4` = -sqrt(14/143).(49/4096)/Pi\^1.5 = -0.0006722136...
for the :math:`Q_\ell` parameters. For the FCC crystal with *nnn* = 12,
.. math::
W_4 = -\sqrt{\frac{14}{143}} \left(\frac{49}{4096}\right) \pi^{-3/2} \approx -0.0006722136
The optional keyword *wl/hat* will output the normalized third-order
invariants :math:`\hat{W}_l` (see Eq. 2.2 in :ref:`Steinhardt <Steinhardt>`)
for the same degrees as for the :math:`Q_l` parameters. For the FCC crystal
with *nnn* =12, :math:`\hat{W}_4 = -\frac{7}{3} \sqrt{\frac{2}{429}} = -0.159317...`
The numerical
values of :math:`\hat{W}_l` for a range of commonly encountered high-symmetry
structures are given in Table I of :ref:`Steinhardt <Steinhardt>`, and these
can be reproduced with this keyword.
invariants :math:`\hat{W}_\ell` (see Eq. 2.2 in :ref:`Steinhardt <Steinhardt>`)
for the same degrees as for the :math:`Q_\ell` parameters. For the FCC crystal
with *nnn* =12,
.. math::
\hat{W}_4 = -\frac{7}{3} \sqrt{\frac{2}{429}} \approx -0.159317
The numerical values of :math:`\hat{W}_\ell` for a range of commonly
encountered high-symmetry structures are given in Table I of
:ref:`Steinhardt <Steinhardt>`, and these can be reproduced with this keyword.
The optional keyword *components* will output the components of the
*normalized* complex vector :math:`\hat{Y}_{lm} = \bar{Y}_{lm}/|\bar{Y}_{lm}|` of degree *ldegree*\,
which must be included in the list of order parameters to be computed. This option can be used
in conjunction with :doc:`compute coord_atom <compute_coord_atom>` to
calculate the ten Wolde's criterion to identify crystal-like
particles, as discussed in :ref:`ten Wolde <tenWolde2>`.
*normalized* complex vector
:math:`\hat{Y}_{\ell m} = \bar{Y}_{\ell m}/|\bar{Y}_{\ell m}|`
of degree *ldegree*\, which must be included in the list of order parameters to
be computed. This option can be used in conjunction with
:doc:`compute coord_atom <compute_coord_atom>` to calculate the ten Wolde's
criterion to identify crystal-like particles, as discussed in
:ref:`ten Wolde <tenWolde2>`.
The optional keyword *chunksize* is only applicable when using the
the KOKKOS package and is ignored otherwise. This keyword controls
@ -119,12 +132,12 @@ if there are 32768 atoms in the simulation and the *chunksize*
is set to 16384, the parameter calculation will be broken up
into two passes.
The value of :math:`Q_l` is set to zero for atoms not in the
The value of :math:`Q_\ell` is set to zero for atoms not in the
specified compute group, as well as for atoms that have less than
*nnn* neighbors within the distance cutoff, unless *nnn* is NULL.
The neighbor list needed to compute this quantity is constructed each
time the calculation is performed (i.e. each time a snapshot of atoms
time the calculation is performed (i.e., each time a snapshot of atoms
is dumped). Thus it can be inefficient to compute/dump this quantity
too frequently.
@ -155,19 +168,21 @@ Output info
"""""""""""
This compute calculates a per-atom array with *nlvalues* columns,
giving the :math:`Q_l` values for each atom, which are real numbers on the
range :math:`0 <= Q_l <= 1`.
giving the :math:`Q_\ell` values for each atom, which are real numbers in the
range :math:`0 \le Q_\ell \le 1`.
If the keyword *wl* is set to yes, then the :math:`W_l` values for each
If the keyword *wl* is set to yes, then the :math:`W_\ell` values for each
atom will be added to the output array, which are real numbers.
If the keyword *wl/hat* is set to yes, then the :math:`\hat{W}_l`
If the keyword *wl/hat* is set to yes, then the :math:`\hat{W}_\ell`
values for each atom will be added to the output array, which are real numbers.
If the keyword *components* is set, then the real and imaginary parts
of each component of *normalized* :math:`\hat{Y}_{lm}` will be added to the
output array in the following order: :math:`{\rm Re}(\hat{Y}_{-m}), {\rm Im}(\hat{Y}_{-m}),
{\rm Re}(\hat{Y}_{-m+1}), {\rm Im}(\hat{Y}_{-m+1}), \dots , {\rm Re}(\hat{Y}_m), {\rm Im}(\hat{Y}_m)`.
of each component of *normalized* :math:`\hat{Y}_{\ell m}` will be added to the
output array in the following order:
:math:`\Re(\hat{Y}_{-m}),` :math:`\Im(\hat{Y}_{-m}),`
:math:`\Re(\hat{Y}_{-m+1}),` :math:`\Im(\hat{Y}_{-m+1}), \dotsc,`
:math:`\Re(\hat{Y}_m),` :math:`\Im(\hat{Y}_m).`
In summary, the per-atom array will contain *nlvalues* columns, followed by
an additional *nlvalues* columns if *wl* is set to yes, followed by
@ -193,7 +208,7 @@ Default
"""""""
The option defaults are *cutoff* = pair style cutoff, *nnn* = 12,
*degrees* = 5 4 6 8 10 12 i.e. :math:`Q_4`, :math:`Q_6`, :math:`Q_8`, :math:`Q_{10}`, and :math:`Q_{12}`,
*degrees* = 5 4 6 8 10 12 (i.e., :math:`Q_4`, :math:`Q_6`, :math:`Q_8`, :math:`Q_{10}`, and :math:`Q_{12}`),
*wl* = no, *wl/hat* = no, *components* off, and *chunksize* = 16384
----------