<p>The position of a neighbor atom <em>i’</em> relative to a central atom <em>i</em> is
a point within the 3D ball of radius <em>R_ii’ = rcutfac*(R_i + R_i’)</em></p>
<p>Bartok et al. <aclass="reference internal"href="pair_snap.html#bartok2010"><spanclass="std std-ref">(Bartok)</span></a>, proposed mapping this 3D ball
onto the 3-sphere, the surface of the unit ball in a four-dimensional
space. The radial distance <em>r</em> within <em>R_ii’</em> is mapped on to a third
<p>The expansion coefficients <em>u^j_m,m’</em> 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 <aclass="reference internal"href="pair_snap.html#bartok2010"><spanclass="std std-ref">(Bartok)</span></a>.</p>
<p>Again, the sum is over all atoms <em>i’</em> of atom type <em>I</em>. For each atom
<em>i</em>, 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.</p>
<p>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.</p>
<p>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.</p>
<p>The argument <em>rcutfac</em> is a scale factor that controls the ratio of
atomic radius to radial cutoff distance.</p>
<p>The argument <em>rfac0</em> and the optional keyword <em>rmin0</em> define the
linear mapping from radial distance to polar angle <em>theta0</em> on the
3-sphere.</p>
<p>The argument <em>twojmax</em> and the keyword <em>diagonal</em> 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</p>
<p>The keyword <em>switchflag</em> can be used to turn off the switching
function.</p>
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="last">If you have a bonded system, then the settings of
<aclass="reference internal"href="special_bonds.html"><spanclass="doc">special_bonds</span></a> command can remove pairwise
interactions between atoms in the same bond, angle, or dihedral. This
is the default setting for the <aclass="reference internal"href="special_bonds.html"><spanclass="doc">special_bonds</span></a>
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 <aclass="reference internal"href="rerun.html"><spanclass="doc">rerun</span></a>
command to compute the bispectrum components for snapshots in the dump
file. The rerun script can use a <aclass="reference internal"href="special_bonds.html"><spanclass="doc">special_bonds</span></a>
command that includes all pairs in the neighbor list.</p>
</div>
<p>;line</p>
<p><strong>Output info:</strong></p>
<p>Compute <em>sna/atom</em> 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 <em>twojmax</em> and <em>diagonal</em>, as
described by the following piece of python code:</p>
<preclass="literal-block">
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>
<p>Compute <em>snad/atom</em> evaluates a per-atom array. The columns are
arranged into <em>ntypes</em> blocks, listed in order of atom type <em>I</em>. Each
block contains three sub-blocks corresponding to the <em>x</em>, <em>y</em>, and <em>z</em>
components of the atom position. Each of these sub-blocks contains
one column for each bispectrum component, the same as for compute
<em>sna/atom</em></p>
<p>Compute <em>snav/atom</em> evaluates a per-atom array. The columns are
arranged into <em>ntypes</em> blocks, listed in order of atom type <em>I</em>. Each
block contains six sub-blocks corresponding to the <em>xx</em>, <em>yy</em>, <em>zz</em>,
<em>yz</em>, <em>xz</em>, and <em>xy</em> 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 <em>sna/atom</em></p>
<p>These values can be accessed by any command that uses per-atom values
from a compute as input. See <aclass="reference internal"href="Section_howto.html#howto-15"><spanclass="std std-ref">Section 6.15</span></a> for an overview of LAMMPS output
options.</p>
</div>
<divclass="section"id="restrictions">
<h2>Restrictions</h2>
<p>These computes are part of the SNAP package. They are only enabled if
LAMMPS was built with that package. See the <aclass="reference internal"href="Section_start.html#start-3"><spanclass="std std-ref">Making LAMMPS</span></a> section for more info.</p>
Built with <ahref="http://sphinx-doc.org/">Sphinx</a> using a <ahref="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <ahref="https://readthedocs.org">Read the Docs</a>.