forked from lijiext/lammps
242 lines
9.6 KiB
Plaintext
242 lines
9.6 KiB
Plaintext
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
|
|
:link(lws,http://lammps.sandia.gov)
|
|
:link(ld,Manual.html)
|
|
:link(lc,Section_commands.html#comm)
|
|
|
|
:line
|
|
|
|
compute sna/atom command :h3
|
|
compute snad/atom command :h3
|
|
compute snav/atom command :h3
|
|
|
|
[Syntax:]
|
|
|
|
compute ID group-ID sna/atom ntypes rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
|
|
compute ID group-ID snad/atom ntypes rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
|
|
compute ID group-ID snav/atom ntypes rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ... :pre
|
|
|
|
ID, group-ID are documented in "compute"_compute.html command :ulb,l
|
|
sna/atom = style name of this compute command :l
|
|
rcutfac = scale factor applied to all cutoff radii (positive real) :l
|
|
rfac0 = parameter in distance to angle conversion (0 < rcutfac < 1) :l
|
|
twojmax = band limit for bispectrum components (non-negative integer) :l
|
|
R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l
|
|
w_1, w_2,... = list of neighbor weights, one for each type :l
|
|
zero or more keyword/value pairs may be appended :l
|
|
keyword = {diagonal} or {rmin0} or {switchflag} :l
|
|
{diagonal} value = {0} or {1} or {2} or {3}
|
|
{0} = all j1, j2, j <= twojmax, j2 <= j1
|
|
{1} = subset satisfying j1 == j2
|
|
{2} = subset satisfying j1 == j2 == j3
|
|
{3} = subset satisfying j2 <= j1 <= j
|
|
{rmin0} value = parameter in distance to angle conversion (distance units)
|
|
{switchflag} value = {0} or {1}
|
|
{0} = do not use switching function
|
|
{1} = use switching function :pre
|
|
:ule
|
|
|
|
[Examples:]
|
|
|
|
compute b all sna/atom 1.4 0.99363 6 2.0 2.4 0.75 1.0 diagonal 3 rmin0 0.0
|
|
compute db all sna/atom 1.4 0.95 6 2.0 1.0
|
|
compute vb all sna/atom 1.4 0.95 6 2.0 1.0 :pre
|
|
|
|
[Description:]
|
|
|
|
Define a computation that calculates a set of bispectrum components
|
|
for each atom in a group.
|
|
|
|
Bispectrum components of an atom are order parameters characterizing
|
|
the radial and angular distribution of neighbor atoms. The detailed
|
|
mathematical definition is given in the paper by Thompson et
|
|
al. "(Thompson)"_#Thompson2014
|
|
|
|
The position of a neighbor atom {i'} relative to a central atom {i} is
|
|
a point within the 3D ball of radius {R_ii' = rcutfac*(R_i + R_i')}
|
|
|
|
Bartok et al. "(Bartok)"_#Bartok2010, proposed mapping this 3D ball
|
|
onto the 3-sphere, the surface of the unit ball in a four-dimensional
|
|
space. The radial distance {r} within {R_ii'} is mapped on to a third
|
|
polar angle {theta0} defined by,
|
|
|
|
:c,image(Eqs/compute_sna_atom1.jpg)
|
|
|
|
In this way, all possible neighbor positions are mapped on to a subset
|
|
of the 3-sphere. Points south of the latitude {theta0max=rfac0*Pi}
|
|
are excluded.
|
|
|
|
The natural basis for functions on the 3-sphere is formed by the 4D
|
|
hyperspherical harmonics {U^j_m,m'(theta, phi, theta0).} These
|
|
functions are better known as {D^j_m,m',} the elements of the Wigner
|
|
{D}-matrices "(Meremianin"_#Meremianin2006,
|
|
"Varshalovich)"_#Varshalovich1987.
|
|
|
|
The density of neighbors on the 3-sphere can be written as a sum of
|
|
Dirac-delta functions, one for each neighbor, weighted by species and
|
|
radial distance. Expanding this density function as a generalized
|
|
Fourier series in the basis functions, we can write each Fourier
|
|
coefficient as
|
|
|
|
:c,image(Eqs/compute_sna_atom2.jpg)
|
|
|
|
The {w_i'} neighbor weights are dimensionless numbers that are chosen
|
|
to distinguish atoms of different types, while the central atom is
|
|
arbitrarily assigned a unit weight. The function {fc(r)} ensures that
|
|
the contribution of each neighbor atom goes smoothly to zero at
|
|
{R_ii'}:
|
|
|
|
:c,image(Eqs/compute_sna_atom4.jpg)
|
|
|
|
The expansion coefficients {u^j_m,m'} are complex-valued and they are
|
|
not directly useful as descriptors, because they are not invariant
|
|
under rotation of the polar coordinate frame. However, the following
|
|
scalar triple products of expansion coefficients can be shown to be
|
|
real-valued and invariant under rotation "(Bartok)"_#Bartok2010.
|
|
|
|
:c,image(Eqs/compute_sna_atom3.jpg)
|
|
|
|
The constants {H^jmm'_j1m1m1'_j2m2m2'} are coupling coefficients,
|
|
analogous to Clebsch-Gordan coefficients for rotations on the
|
|
2-sphere. These invariants are the components of the bispectrum and
|
|
these are the quantities calculated by the compute {sna/atom}. They
|
|
characterize the strength of density correlations at three points on
|
|
the 3-sphere. The j2=0 subset form the power spectrum, which
|
|
characterizes the correlations of two points. The lowest-order
|
|
components describe the coarsest features of the density function,
|
|
while higher-order components reflect finer detail. Note that the
|
|
central atom is included in the expansion, so three point-correlations
|
|
can be either due to three neighbors, or two neighbors and the central
|
|
atom.
|
|
|
|
Compute {snad/atom} calculates the derivative of the bispectrum components
|
|
summed separately for each atom type:
|
|
|
|
:c,image(Eqs/compute_sna_atom5.jpg)
|
|
|
|
The sum is over all atoms {i'} of atom type {I}. For each atom {i},
|
|
this compute evaluates the above expression for each direction, each
|
|
atom type, and each bispectrum component. See section below on output
|
|
for a detailed explanation.
|
|
|
|
Compute {snav/atom} calculates the virial contribution due to the
|
|
derivatives:
|
|
|
|
:c,image(Eqs/compute_sna_atom6.jpg)
|
|
|
|
Again, the sum is over all atoms {i'} of atom type {I}. For each atom
|
|
{i}, this compute evaluates the above expression for each of the six
|
|
virial components, each atom type, and each bispectrum component. See
|
|
section below on output for a detailed explanation.
|
|
|
|
The value of all bispectrum components will be zero for atoms not in
|
|
the group. Neighbor atoms not in the group do not contribute to the
|
|
bispectrum of atoms in the group.
|
|
|
|
The neighbor list needed to compute this quantity is constructed each
|
|
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.
|
|
|
|
The argument {rcutfac} is a scale factor that controls the ratio of
|
|
atomic radius to radial cutoff distance.
|
|
|
|
The argument {rfac0} and the optional keyword {rmin0} define the
|
|
linear mapping from radial distance to polar angle {theta0} on the
|
|
3-sphere.
|
|
|
|
The argument {twojmax} and the keyword {diagonal} define which
|
|
bispectrum components are generated. See section below on output for a
|
|
detailed explanation of the number of bispectrum components and the
|
|
ordered in which they are listed
|
|
|
|
The keyword {switchflag} can be used to turn off the switching
|
|
function.
|
|
|
|
NOTE: If you have a bonded system, then the settings of
|
|
"special_bonds"_special_bonds.html command can remove pairwise
|
|
interactions between atoms in the same bond, angle, or dihedral. This
|
|
is the default setting for the "special_bonds"_special_bonds.html
|
|
command, and means those pairwise interactions do not appear in the
|
|
neighbor list. Because this fix uses the neighbor list, it also means
|
|
those pairs will not be included in the calculation. One way to get
|
|
around this, is to write a dump file, and use the "rerun"_rerun.html
|
|
command to compute the bispectrum components for snapshots in the dump
|
|
file. The rerun script can use a "special_bonds"_special_bonds.html
|
|
command that includes all pairs in the neighbor list.
|
|
|
|
;line
|
|
|
|
[Output info:]
|
|
|
|
Compute {sna/atom} calculates a per-atom array, each column
|
|
corresponding to a particular bispectrum component. The total number
|
|
of columns and the identities of the bispectrum component contained in
|
|
each column depend on the values of {twojmax} and {diagonal}, as
|
|
described by the following piece of python code:
|
|
|
|
for j1 in range(0,twojmax+1):
|
|
if(diagonal==2):
|
|
print j1/2,j1/2,j1/2
|
|
elif(diagonal==1):
|
|
for j in range(0,min(twojmax,2*j1)+1,2):
|
|
print j1/2,j1/2,j/2
|
|
elif(diagonal==0):
|
|
for j2 in range(0,j1+1):
|
|
for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
|
|
print j1/2,j2/2,j/2
|
|
elif(diagonal==3):
|
|
for j2 in range(0,j1+1):
|
|
for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
|
|
if (j>=j1): print j1/2,j2/2,j/2 :pre
|
|
|
|
Compute {snad/atom} evaluates a per-atom array. The columns are
|
|
arranged into {ntypes} blocks, listed in order of atom type {I}. Each
|
|
block contains three sub-blocks corresponding to the {x}, {y}, and {z}
|
|
components of the atom position. Each of these sub-blocks contains
|
|
one column for each bispectrum component, the same as for compute
|
|
{sna/atom}
|
|
|
|
Compute {snav/atom} evaluates a per-atom array. The columns are
|
|
arranged into {ntypes} blocks, listed in order of atom type {I}. Each
|
|
block contains six sub-blocks corresponding to the {xx}, {yy}, {zz},
|
|
{yz}, {xz}, and {xy} components of the virial tensor in Voigt
|
|
notation. Each of these sub-blocks contains one column for each
|
|
bispectrum component, the same as for compute {sna/atom}
|
|
|
|
These values can be accessed by any command that uses per-atom values
|
|
from a compute as input. See "Section_howto
|
|
15"_Section_howto.html#howto_15 for an overview of LAMMPS output
|
|
options.
|
|
|
|
[Restrictions:]
|
|
|
|
These computes are part of the SNAP package. They are only enabled if
|
|
LAMMPS was built with that package. See the "Making
|
|
LAMMPS"_Section_start.html#start_3 section for more info.
|
|
|
|
[Related commands:]
|
|
|
|
"pair_style snap"_pair_snap.html
|
|
|
|
[Default:]
|
|
|
|
The optional keyword defaults are {diagonal} = 0, {rmin0} = 0,
|
|
{switchflag} = 1.
|
|
|
|
:line
|
|
|
|
:link(Thompson2014)
|
|
[(Thompson)] Thompson, Swiler, Trott, Foiles, Tucker, under review, preprint
|
|
available at "arXiv:1409.3880"_http://arxiv.org/abs/1409.3880
|
|
|
|
:link(Bartok2010)
|
|
[(Bartok)] Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010).
|
|
|
|
:link(Meremianin2006)
|
|
[(Meremianin)] Meremianin, J. Phys. A, 39, 3099 (2006).
|
|
|
|
:link(Varshalovich1987)
|
|
[(Varshalovich)] Varshalovich, Moskalev, Khersonskii, Quantum Theory
|
|
of Angular Momentum, World Scientific, Singapore (1987).
|