Add Kokkos version of compute orientorder/atom

This commit is contained in:
Stan Moore
2020-02-24 13:27:40 -07:00
parent f0935feabe
commit 674781fe0e
322 changed files with 3229 additions and 2663 deletions

View File

@ -42,23 +42,25 @@ Description
"""""""""""
Define a computation that calculates a set of bond-orientational
order parameters *Ql* for each atom in a group. These order parameters
order parameters :math:`Q_l` 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, *Ql* is a real number defined as follows:
For each atom, :math:`Q_l` is a real number defined as follows:
.. image:: Eqs/orientorder.jpg
:align: center
.. 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}}
The first equation defines the spherical harmonic order parameters.
These are complex number components of the 3D analog of the 2D order
parameter *qn*\ , which is implemented as LAMMPS compute
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 theta and phi are the standard spherical polar angles
defining the direction of the bond vector *rij*\ .
The second equation defines *Ql*\ , which is a
defining the direction of the bond vector :math:`r_{ij}`.
The second equation defines :math:`Q_l`, which is a
rotationally invariant non-negative amplitude obtained by summing
over all the components of degree *l*\ .
@ -68,42 +70,45 @@ 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 *Ql*\ . The default value is 12.
neighbors used to calculate :math:`Q_l`. The default value is 12.
If the value is NULL, then all neighbors up to the
specified distance cutoff are used.
The optional keyword *degrees* defines the list of order parameters to
be computed. The first argument *nlvalues* is the number of order
parameters. This is followed by that number of non-negative integers giving the
degree of each order parameter. Because *Q*\ 2 and all odd-degree order
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 *Q*\ 4,
*Q*\ 6, *Q*\ 8, *Q*\ 10, and *Q*\ 12. For the FCC crystal with *nnn* =12, *Q*\ 4
= sqrt(7/3)/8 = 0.19094.... The numerical values of all order
parameters up to *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
: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...`.
The numerical values of all order
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 *Wl*
The optional keyword *wl* will output the third-order invariants :math:`W_l`
(see Eq. 1.4 in :ref:`Steinhardt <Steinhardt>`) for the same degrees as
for the *Ql* parameters. For the FCC crystal with *nnn* =12,
*W*\ 4 = -sqrt(14/143).(49/4096)/Pi\^1.5 = -0.0006722136...
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...
The optional keyword *wl/hat* will output the normalized third-order
invariants *Wlhat* (see Eq. 2.2 in :ref:`Steinhardt <Steinhardt>`)
for the same degrees as for the *Ql* parameters. For the FCC crystal
with *nnn* =12, *W*\ 4hat = -7/3\*sqrt(2/429) = -0.159317...The numerical
values of *Wlhat* for a range of commonly encountered high-symmetry
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.
The optional keyword *components* will output the components of the
normalized complex vector *Ybar\_lm* of degree *ldegree*\ , which must be
normalized complex vector :math:`\bar{Y}_{lm}` of degree *ldegree*\ , which must be
explicitly included in the keyword *degrees*\ . 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 value of *Ql* is set to zero for atoms not in the
The value of :math:`Q_l` 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.
@ -130,19 +135,19 @@ too frequently.
**Output info:**
This compute calculates a per-atom array with *nlvalues* columns,
giving the *Ql* values for each atom, which are real numbers on the
range 0 <= *Ql* <= 1.
giving the :math:`Q_l` values for each atom, which are real numbers on the
range :math:`0 <= Q_l <= 1`.
If the keyword *wl* is set to yes, then the *Wl* values for each
If the keyword *wl* is set to yes, then the :math:`W_l` 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 *Wl\_hat*
If the keyword *wl/hat* is set to yes, then the :math:`\hat{W}_l`
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) *Ybar\_lm* will be added to the
output array in the following order: Re(*Ybar\_-m*) Im(*Ybar\_-m*)
Re(*Ybar\_-m+1*) Im(*Ybar\_-m+1*) ... Re(*Ybar\_m*) Im(*Ybar\_m*). This
of each component of (normalized) :math:`\bar{Y}_{lm}` will be added to the
output array in the following order: :math:`Re(\bar{Y}_{-m}) Im(\bar{Y}_{-m})
Re(\bar{Y}_{-m+1}) Im(\bar{Y}_{-m+1}) ... Re(\bar{Y}_m) Im(\bar{Y}_m)`. This
way, the per-atom array will have a total of *nlvalues*\ +2\*(2\ *l*\ +1)
columns.
@ -163,7 +168,7 @@ Default
"""""""
The option defaults are *cutoff* = pair style cutoff, *nnn* = 12,
*degrees* = 5 4 6 8 10 12 i.e. *Q*\ 4, *Q*\ 6, *Q*\ 8, *Q*\ 10, and *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, and *components* off
@ -172,21 +177,16 @@ The option defaults are *cutoff* = pair style cutoff, *nnn* = 12,
.. _Steinhardt:
**(Steinhardt)** P. Steinhardt, D. Nelson, and M. Ronchetti,
Phys. Rev. B 28, 784 (1983).
.. _Mickel:
**(Mickel)** W. Mickel, S. C. Kapfer, G. E. Schroeder-Turkand, K. Mecke,
J. Chem. Phys. 138, 044501 (2013).
.. _tenWolde2:
**(tenWolde)** P. R. ten Wolde, M. J. Ruiz-Montero, D. Frenkel,
J. Chem. Phys. 104, 9932 (1996).