Files
lammps/doc/src/compute_xrd.rst

261 lines
9.5 KiB
ReStructuredText

.. index:: compute xrd
compute xrd command
===================
Syntax
""""""
.. code-block:: LAMMPS
compute ID group-ID xrd lambda type1 type2 ... typeN keyword value ...
* ID, group-ID are documented in :doc:`compute <compute>` command
* xrd = style name of this compute command
* lambda = wavelength of incident radiation (length units)
* type1 type2 ... typeN = chemical symbol of each atom type (see valid options below)
* zero or more keyword/value pairs may be appended
* keyword = *2Theta* or *c* or *LP* or *manual* or *echo*
.. parsed-literal::
*2Theta* values = Min2Theta Max2Theta
Min2Theta,Max2Theta = minimum and maximum 2 theta range to explore
(radians or degrees)
*c* values = c1 c2 c3
c1,c2,c3 = parameters to adjust the spacing of the reciprocal
lattice nodes in the h, k, and l directions respectively
*LP* value = switch to apply Lorentz-polarization factor
0/1 = off/on
*manual* = flag to use manual spacing of reciprocal lattice points
based on the values of the *c* parameters
*echo* = flag to provide extra output for debugging purposes
Examples
""""""""
.. code-block:: LAMMPS
compute 1 all xrd 1.541838 Al O 2Theta 0.087 0.87 c 1 1 1 LP 1 echo
compute 2 all xrd 1.541838 Al O 2Theta 10 100 c 0.05 0.05 0.05 LP 1 manual
fix 1 all ave/histo/weight 1 1 1 0.087 0.87 250 c_1[1] c_1[2] mode vector file Rad2Theta.xrd
fix 2 all ave/histo/weight 1 1 1 10 100 250 c_2[1] c_2[2] mode vector file Deg2Theta.xrd
Description
"""""""""""
Define a computation that calculates X-ray diffraction intensity as described
in :ref:`(Coleman) <xrd-Coleman>` on a mesh of reciprocal lattice nodes defined
by the entire simulation domain (or manually) using a simulated radiation
of wavelength *lambda*.
The X-ray diffraction intensity, :math:`I`, at each reciprocal lattice point,
:math:`k`, is computed from the structure factor, :math:`F`, using the
equations:
.. math::
I &= L_p(\theta)\frac{F^{*}F}{N} \\
F(\mathbf{k}) &= \sum_{j=1}^{N}f_j(\theta)exp(2\pi i \mathbf{k}\cdot \mathbf{r}_j) \\
L_p(\theta) &= \frac{1+\cos^2(2\theta)}{\cos(\theta)\sin^2(\theta)} \\
\frac{\sin(\theta)}{\lambda} &= \frac{\left\lVert\mathbf{k}\right\rVert}{2}
Here, :math:`\mathbf{k}` is the location of the reciprocal lattice node,
:math:`r_j` is the position of each atom, :math:`f_j` are atomic
scattering factors, *Lp* is the Lorentz-polarization factor, and
:math:`\theta` is the scattering angle of diffraction. The
Lorentz-polarization factor can be turned off using the optional *LP*
keyword.
Diffraction intensities are calculated on a three-dimensional mesh of
reciprocal lattice nodes. The mesh spacing is defined either (a) by the
entire simulation domain or (b) manually using selected values as shown
in the 2D diagram below.
.. image:: img/xrd_mesh.png
:scale: 75%
:align: center
For a mesh defined by the simulation domain, a rectilinear grid is
constructed with spacing :math:`c A^{-1}` along each reciprocal lattice
axis, where :math:`A` is a matrix containing the vectors corresponding
to the edges of the simulation cell. If one or two directions has
non-periodic boundary conditions, then the spacing in these directions
is defined from the average of the (inversed) box lengths with periodic
boundary conditions. Meshes defined by the simulation domain must
contain at least one periodic boundary.
If the *manual* flag is included, the mesh of reciprocal lattice nodes
will be defined using the *c* values for the spacing along each
reciprocal lattice axis. Note that manual mapping of the reciprocal
space mesh is good for comparing diffraction results from multiple
simulations; however, it can reduce the likelihood that Bragg
reflections will be satisfied unless small spacing parameters
(:math:`< 0.05~\AA^{-1}`) are implemented.
Meshes with manual spacing do not require a periodic boundary.
The limits of the reciprocal lattice mesh are determined by range of
scattering angles explored. The *2Theta* parameter allows the user
to reduce the scattering angle range to only the region of interest
which reduces the cost of the computation.
The atomic scattering factor, :math:`f_j`, accounts for the reduction in
diffraction intensity due to Compton scattering. Compute xrd uses
analytical approximations of the atomic scattering factors that vary
for each atom type (type1 type2 ... typeN) and angle of diffraction.
The analytic approximation is computed using the formula
:ref:`(Colliex) <Colliex>`:
.. math::
f_j\left ( \frac{\sin(\theta)}{\lambda} \right )=\sum_{i=1}^{4}
a_i \exp\left ( -b_i \frac{\sin^{2}(\theta)}{\lambda^{2}} \right )+c
Coefficients parameterized by :ref:`(Peng) <Peng>` are assigned for each
atom type designating the chemical symbol and charge of each atom
type. Valid chemical symbols for compute xrd are:
+------+------+------+-------+------+
| H | He1- | He | Li | Li1+ |
+------+------+------+-------+------+
| Be | Be2+ | B | C | Cval |
+------+------+------+-------+------+
| N | O | O1- | F | F1- |
+------+------+------+-------+------+
| Ne | Na | Na1+ | Mg | Mg2+ |
+------+------+------+-------+------+
| Al | Al3+ | Si | Sival | Si4+ |
+------+------+------+-------+------+
| P | S | Cl | Cl1- | Ar |
+------+------+------+-------+------+
| K | Ca | Ca2+ | Sc | Sc3+ |
+------+------+------+-------+------+
| Ti | Ti2+ | Ti3+ | Ti4+ | V |
+------+------+------+-------+------+
| V2+ | V3+ | V5+ | Cr | Cr2+ |
+------+------+------+-------+------+
| Cr3+ | Mn | Mn2+ | Mn3+ | Mn4+ |
+------+------+------+-------+------+
| Fe | Fe2+ | Fe3+ | Co | Co2+ |
+------+------+------+-------+------+
| Co | Ni | Ni2+ | Ni3+ | Cu |
+------+------+------+-------+------+
| Cu1+ | Cu2+ | Zn | Zn2+ | Ga |
+------+------+------+-------+------+
| Ga3+ | Ge | Ge4+ | As | Se |
+------+------+------+-------+------+
| Br | Br1- | Kr | Rb | Rb1+ |
+------+------+------+-------+------+
| Sr | Sr2+ | Y | Y3+ | Zr |
+------+------+------+-------+------+
| Zr4+ | Nb | Nb3+ | Nb5+ | Mo |
+------+------+------+-------+------+
| Mo3+ | Mo5+ | Mo6+ | Tc | Ru |
+------+------+------+-------+------+
| Ru3+ | Ru4+ | Rh | Rh3+ | Rh4+ |
+------+------+------+-------+------+
| Pd | Pd2+ | Pd4+ | Ag | Ag1+ |
+------+------+------+-------+------+
| Ag2+ | Cd | Cd2+ | In | In3+ |
+------+------+------+-------+------+
| Sn | Sn2+ | Sn4+ | Sb | Sb3+ |
+------+------+------+-------+------+
| Sb5+ | Te | I | I1- | Xe |
+------+------+------+-------+------+
| Cs | Cs1+ | Ba | Ba2+ | La |
+------+------+------+-------+------+
| La3+ | Ce | Ce3+ | Ce4+ | Pr |
+------+------+------+-------+------+
| Pr3+ | Pr4+ | Nd | Nd3+ | Pm |
+------+------+------+-------+------+
| Pm3+ | Sm | Sm3+ | Eu | Eu2+ |
+------+------+------+-------+------+
| Eu3+ | Gd | Gd3+ | Tb | Tb3+ |
+------+------+------+-------+------+
| Dy | Dy3+ | Ho | Ho3+ | Er |
+------+------+------+-------+------+
| Er3+ | Tm | Tm3+ | Yb | Yb2+ |
+------+------+------+-------+------+
| Yb3+ | Lu | Lu3+ | Hf | Hf4+ |
+------+------+------+-------+------+
| Ta | Ta5+ | W | W6+ | Re |
+------+------+------+-------+------+
| Os | Os4+ | Ir | Ir3+ | Ir4+ |
+------+------+------+-------+------+
| Pt | Pt2+ | Pt4+ | Au | Au1+ |
+------+------+------+-------+------+
| Au3+ | Hg | Hg1+ | Hg2+ | Tl |
+------+------+------+-------+------+
| Tl1+ | Tl3+ | Pb | Pb2+ | Pb4+ |
+------+------+------+-------+------+
| Bi | Bi3+ | Bi5+ | Po | At |
+------+------+------+-------+------+
| Rn | Fr | Ra | Ra2+ | Ac |
+------+------+------+-------+------+
| Ac3+ | Th | Th4+ | Pa | U |
+------+------+------+-------+------+
| U3+ | U4+ | U6+ | Np | Np3+ |
+------+------+------+-------+------+
| Np4+ | Np6+ | Pu | Pu3+ | Pu4+ |
+------+------+------+-------+------+
| Pu6+ | Am | Cm | Bk | Cf |
+------+------+------+-------+------+
If the *echo* keyword is specified, compute xrd will provide extra
reporting information to the screen.
Output info
"""""""""""
This compute calculates a global array. The number of rows in the
array is the number of reciprocal lattice nodes that are explored
which by the mesh. The global array has two columns.
The first column contains the diffraction angle in the units (radians
or degrees) provided with the *2Theta* values. The second column contains
the computed diffraction intensities as described above.
The array can be accessed by any command that uses global values from
a compute as input. See the :doc:`Howto output <Howto_output>` doc page
for an overview of LAMMPS output options.
All array values calculated by this compute are "intensive".
Restrictions
""""""""""""
This compute is part of the DIFFRACTION package. It is only
enabled if LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info.
The compute_xrd command does not work for triclinic cells.
Related commands
""""""""""""""""
:doc:`fix ave/histo <fix_ave_histo>`,
:doc:`compute saed <compute_saed>`
Default
"""""""
The option defaults are *2Theta* = 1 179 (degrees), *c* = 1 1 1, *LP* = 1,
no manual flag, no echo flag.
----------
.. _xrd-Coleman:
**(Coleman)** Coleman, Spearot, Capolungo, MSMSE, 21, 055020
(2013).
.. _Colliex:
**(Colliex)** Colliex et al. International Tables for Crystallography
Volume C: Mathematical and Chemical Tables, 249-429 (2004).
.. _Peng:
**(Peng)** Peng, Ren, Dudarev, Whelan, Acta Crystallogr. A, 52, 257-76
(1996).