352 lines
14 KiB
ReStructuredText
352 lines
14 KiB
ReStructuredText
.. index:: pair_style tersoff
|
|
.. index:: pair_style tersoff/table
|
|
.. index:: pair_style tersoff/gpu
|
|
.. index:: pair_style tersoff/intel
|
|
.. index:: pair_style tersoff/kk
|
|
.. index:: pair_style tersoff/omp
|
|
.. index:: pair_style tersoff/table/omp
|
|
|
|
pair_style tersoff command
|
|
==========================
|
|
|
|
Accelerator Variants: *tersoff/gpu*, *tersoff/intel*, *tersoff/kk*, *tersoff/omp*
|
|
|
|
pair_style tersoff/table command
|
|
================================
|
|
|
|
Accelerator Variants: *tersoff/table/omp*
|
|
|
|
Syntax
|
|
""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
pair_style style keywords values
|
|
|
|
* style = *tersoff* or *tersoff/table*
|
|
* keyword = *shift*
|
|
|
|
.. parsed-literal::
|
|
|
|
*shift* value = delta
|
|
delta = negative shift in equilibrium bond length
|
|
|
|
Examples
|
|
""""""""
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
pair_style tersoff
|
|
pair_coeff * * Si.tersoff Si
|
|
pair_coeff * * SiC.tersoff Si C Si
|
|
|
|
pair_style tersoff/table
|
|
pair_coeff * * SiCGe.tersoff Si(D)
|
|
|
|
pair_style tersoff shift 0.05
|
|
pair_coeff * * Si.tersoff Si
|
|
|
|
Description
|
|
"""""""""""
|
|
|
|
The *tersoff* style computes a 3-body Tersoff potential
|
|
:ref:`(Tersoff_1) <Tersoff_11>` for the energy E of a system of atoms as
|
|
|
|
.. math::
|
|
|
|
E & = \frac{1}{2} \sum_i \sum_{j \neq i} V_{ij} \\
|
|
V_{ij} & = f_C(r_{ij} + \delta) \left[ f_R(r_{ij} + \delta) + b_{ij} f_A(r_{ij} + \delta) \right] \\
|
|
f_C(r) & = \left\{ \begin{array} {r@{\quad:\quad}l}
|
|
1 & r < R - D \\
|
|
\frac{1}{2} - \frac{1}{2} \sin \left( \frac{\pi}{2} \frac{r-R}{D} \right) &
|
|
R-D < r < R + D \\
|
|
0 & r > R + D
|
|
\end{array} \right. \\
|
|
f_R(r) & = A \exp (-\lambda_1 r) \\
|
|
f_A(r) & = -B \exp (-\lambda_2 r) \\
|
|
b_{ij} & = \left( 1 + \beta^n {\zeta_{ij}}^n \right)^{-\frac{1}{2n}} \\
|
|
\zeta_{ij} & = \sum_{k \neq i,j} f_C(r_{ik} + \delta) g \left[ \theta_{ijk}(r_{ij}, r_{ik}) \right]
|
|
\exp \left[ {\lambda_3}^m (r_{ij} - r_{ik})^m \right] \\
|
|
g(\theta) & = \gamma_{ijk} \left( 1 + \frac{c^2}{d^2} -
|
|
\frac{c^2}{\left[ d^2 + (\cos \theta - \cos \theta_0)^2\right]} \right)
|
|
|
|
where :math:`f_R` is a two-body term and :math:`f_A` includes three-body
|
|
interactions. The summations in the formula are over all neighbors
|
|
J and K of atom I within a cutoff distance = R + D. :math:`\delta` is
|
|
an optional negative shift of the equilibrium bond length, as described below.
|
|
|
|
The *tersoff/table* style uses tabulated forms for the two-body,
|
|
environment and angular functions. Linear interpolation is performed
|
|
between adjacent table entries. The table length is chosen to be
|
|
accurate within 10\^-6 with respect to the *tersoff* style energy.
|
|
The *tersoff/table* should give better performance in terms of speed.
|
|
|
|
Only a single pair_coeff command is used with the *tersoff* style
|
|
which specifies a Tersoff potential file with parameters for all
|
|
needed elements. These are mapped to LAMMPS atom types by specifying
|
|
N additional arguments after the filename in the pair_coeff command,
|
|
where N is the number of LAMMPS atom types:
|
|
|
|
* filename
|
|
* N element names = mapping of Tersoff elements to atom types
|
|
|
|
See the :doc:`pair_coeff <pair_coeff>` page for alternate ways
|
|
to specify the path for the potential file.
|
|
|
|
As an example, imagine the SiC.tersoff file has Tersoff values for Si
|
|
and C. If your LAMMPS simulation has 4 atoms types and you want the
|
|
first 3 to be Si, and the fourth to be C, you would use the following
|
|
pair_coeff command:
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
pair_coeff * * SiC.tersoff Si Si Si C
|
|
|
|
The first 2 arguments must be \* \* so as to span all LAMMPS atom types.
|
|
The first three Si arguments map LAMMPS atom types 1,2,3 to the Si
|
|
element in the Tersoff file. The final C argument maps LAMMPS atom
|
|
type 4 to the C element in the Tersoff file. If a mapping value is
|
|
specified as NULL, the mapping is not performed. This can be used
|
|
when a *tersoff* potential is used as part of the *hybrid* pair style.
|
|
The NULL values are placeholders for atom types that will be used with
|
|
other potentials.
|
|
|
|
Tersoff files in the *potentials* directory of the LAMMPS distribution
|
|
have a ".tersoff" suffix. Lines that are not blank or comments
|
|
(starting with #) define parameters for a triplet of elements. The
|
|
parameters in a single entry correspond to coefficients in the formula
|
|
above:
|
|
|
|
* element 1 (the center atom in a 3-body interaction)
|
|
* element 2 (the atom bonded to the center atom)
|
|
* element 3 (the atom influencing the 1-2 bond in a bond-order sense)
|
|
* m
|
|
* :math:`\gamma`
|
|
* :math:`\lambda_3` (1/distance units)
|
|
* c
|
|
* d
|
|
* :math:`\cos\theta_0` (can be a value < -1 or > 1)
|
|
* n
|
|
* :math:`\beta`
|
|
* :math:`\lambda_2` (1/distance units)
|
|
* B (energy units)
|
|
* R (distance units)
|
|
* D (distance units)
|
|
* :math:`\lambda_1` (1/distance units)
|
|
* A (energy units)
|
|
|
|
The n, :math:`\beta`, :math:`\lambda_2`, B, :math:`\lambda_1`, and A
|
|
parameters are only used for
|
|
two-body interactions. The m, :math:`\gamma`, :math:`\lambda_3`, c, d,
|
|
and :math:`\cos\theta_0`
|
|
parameters are only used for three-body interactions. The R and D
|
|
parameters are used for both two-body and three-body interactions. The
|
|
non-annotated parameters are unitless. The value of m must be 3 or 1.
|
|
|
|
The Tersoff potential file must contain entries for all the elements
|
|
listed in the pair_coeff command. It can also contain entries for
|
|
additional elements not being used in a particular simulation; LAMMPS
|
|
ignores those entries.
|
|
|
|
For a single-element simulation, only a single entry is required
|
|
(e.g. SiSiSi). For a two-element simulation, the file must contain 8
|
|
entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
|
|
specify Tersoff parameters for all permutations of the two elements
|
|
interacting in three-body configurations. Thus for 3 elements, 27
|
|
entries would be required, etc.
|
|
|
|
As annotated above, the first element in the entry is the center atom
|
|
in a three-body interaction and it is bonded to the second atom and the
|
|
bond is influenced by the third atom. Thus an entry for SiCC means Si
|
|
bonded to a C with another C atom influencing the bond. Thus
|
|
three-body parameters for SiCSi and SiSiC entries will not, in
|
|
general, be the same. The parameters used for the two-body
|
|
interaction come from the entry where the second element is repeated.
|
|
Thus the two-body parameters for Si interacting with C, comes from the
|
|
SiCC entry.
|
|
|
|
The parameters used for a particular
|
|
three-body interaction come from the entry with the corresponding
|
|
three elements. The parameters used only for two-body interactions
|
|
(n, :math:`\beta`, :math:`\lambda_2`, B, :math:`\lambda_1`, and A)
|
|
in entries whose second and third
|
|
element are different (e.g. SiCSi) are not used for anything and can
|
|
be set to 0.0 if desired.
|
|
|
|
Note that the twobody parameters in entries such as SiCC and CSiSi
|
|
are often the same, due to the common use of symmetric mixing rules,
|
|
but this is not always the case. For example, the beta and n parameters in
|
|
Tersoff_2 :ref:`(Tersoff_2) <Tersoff_21>` are not symmetric.
|
|
Similarly, the threebody parameters in entries such as SiCSi and SiSiC
|
|
are often the same, but this is not always the case, particularly
|
|
the value of R, which is sometimes typed on the
|
|
first and second elements, sometimes on the first and third elements.
|
|
Hence the need to specify R and D explicitly for all element triples.
|
|
For example, while Tersoff's notation
|
|
in Tersoff_2 :ref:`(Tersoff_2) <Tersoff_21>` is ambiguous on this point,
|
|
and properties of the zincblende lattice are the same for either choice,
|
|
Tersoff's results for rocksalt are consistent with typing on the first
|
|
and third elements. :ref:`Albe et al. <Albe>` adopts the same convention.
|
|
Conversely, the potential for B/N/C from the Cagin group
|
|
uses the opposite convention, typing on the first and second elements.
|
|
|
|
We chose the above form so as to enable users to define all commonly
|
|
used variants of the Tersoff potential. In particular, our form
|
|
reduces to the original Tersoff form when m = 3 and gamma = 1, while
|
|
it reduces to the form of :ref:`Albe et al. <Albe>` when beta = 1 and m = 1.
|
|
Note that in the current Tersoff implementation in LAMMPS, m must be
|
|
specified as either 3 or 1. Tersoff used a slightly different but
|
|
equivalent form for alloys, which we will refer to as Tersoff_2
|
|
potential :ref:`(Tersoff_2) <Tersoff_21>`.
|
|
The *tersoff/table* style implements
|
|
Tersoff_2 parameterization only.
|
|
|
|
LAMMPS parameter values for Tersoff_2 can be obtained as follows:
|
|
:math:`\gamma_{ijk} = \omega_{ik}`, :math:`\lambda_3 = 0` and the value of
|
|
m has no effect. The parameters for species i and j can be calculated
|
|
using the Tersoff_2 mixing rules:
|
|
|
|
.. math::
|
|
|
|
\lambda_1^{i,j} & = \frac{1}{2}(\lambda_1^i + \lambda_1^j)\\
|
|
\lambda_2^{i,j} & = \frac{1}{2}(\lambda_2^i + \lambda_2^j)\\
|
|
A_{i,j} & = (A_{i}A_{j})^{1/2}\\
|
|
B_{i,j} & = \chi_{ij}(B_{i}B_{j})^{1/2}\\
|
|
R_{i,j} & = (R_{i}R_{j})^{1/2}\\
|
|
S_{i,j} & = (S_{i}S_{j})^{1/2}
|
|
|
|
Tersoff_2 parameters R and S must be converted to the LAMMPS
|
|
parameters R and D (R is different in both forms), using the following
|
|
relations: R=(R'+S')/2 and D=(S'-R')/2, where the primes indicate the
|
|
Tersoff_2 parameters.
|
|
|
|
In the potentials directory, the file SiCGe.tersoff provides the
|
|
LAMMPS parameters for Tersoff's various versions of Si, as well as his
|
|
alloy parameters for Si, C, and Ge. This file can be used for pure Si,
|
|
(three different versions), pure C, pure Ge, binary SiC, and binary
|
|
SiGe. LAMMPS will generate an error if this file is used with any
|
|
combination involving C and Ge, since there are no entries for the GeC
|
|
interactions (Tersoff did not publish parameters for this
|
|
cross-interaction.) Tersoff files are also provided for the SiC alloy
|
|
(SiC.tersoff) and the GaN (GaN.tersoff) alloys.
|
|
|
|
Many thanks to Rutuparna Narulkar, David Farrell, and Xiaowang Zhou
|
|
for helping clarify how Tersoff parameters for alloys have been
|
|
defined in various papers.
|
|
|
|
The *shift* keyword computes the energy E of a system of atoms, whose
|
|
formula is the same as the Tersoff potential. The only modification is
|
|
that the original equilibrium bond length ( :math:`r_0`) of the system
|
|
is shifted to :math:`r_0-\delta`. The minus sign arises because each
|
|
radial distance :math:`r` is replaced by :math:`r+\delta`.
|
|
|
|
The *shift* keyword is designed for simulations of closely matched van
|
|
der Waals heterostructures. For instance, consider the case of a system
|
|
with few-layers graphene atop a thick hexagonal boron nitride (h-BN)
|
|
substrate simulated using periodic boundary conditions. The experimental
|
|
lattice mismatch of ~1.8% between graphene and h-BN is not well captured
|
|
by the equilibrium lattice constants of available potentials, thus a
|
|
small in-plane strain will be introduced in the system when building a
|
|
periodic supercell. To minimize the effect of strain on simulation
|
|
results, the *shift* keyword allows adjusting the equilibrium bond
|
|
length of one of the two materials (e.g., h-BN). Validation, benchmark
|
|
tests, and applications of the *shift* keyword can be found in
|
|
:ref:`(Mandelli_1) <Mandelli1>` and :ref:`(Ouyang_1) <Ouyang5>`.
|
|
|
|
For the specific case discussed above, the force field can be defined as
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
pair_style hybrid/overlay rebo tersoff shift -0.00407 ilp/graphene/hbn 16.0 coul/shield 16.0
|
|
pair_coeff * * rebo CH.rebo NULL NULL C
|
|
pair_coeff * * tersoff BNC.tersoff B N NULL
|
|
pair_coeff * * ilp/graphene/hbn BNCH.ILP B N C
|
|
pair_coeff 1 1 coul/shield 0.70
|
|
pair_coeff 1 2 coul/shield 0.695
|
|
pair_coeff 2 2 coul/shield 0.69
|
|
|
|
----------
|
|
|
|
.. include:: accel_styles.rst
|
|
|
|
----------
|
|
|
|
Mixing, shift, table, tail correction, restart, rRESPA info
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
For atom type pairs I,J and I != J, where types I and J correspond to
|
|
two different element types, mixing is performed by LAMMPS as
|
|
described above from values in the potential file.
|
|
|
|
This pair style does not support the :doc:`pair_modify <pair_modify>`
|
|
shift, table, and tail options.
|
|
|
|
This pair style does not write its information to :doc:`binary restart
|
|
files <restart>`, since it is stored in potential files. Thus, you need
|
|
to re-specify the pair_style and pair_coeff commands in an input script
|
|
that reads a restart file.
|
|
|
|
This pair style can only be used via the *pair* keyword of the
|
|
:doc:`run_style respa <run_style>` command. It does not support the
|
|
*inner*, *middle*, *outer* keywords.
|
|
|
|
----------
|
|
|
|
Restrictions
|
|
""""""""""""
|
|
|
|
This pair style is part of the MANYBODY package. It is only enabled if
|
|
LAMMPS was built with that package. See the :doc:`Build package
|
|
<Build_package>` page for more info.
|
|
|
|
This pair style requires the :doc:`newton <newton>` setting to be "on"
|
|
for pair interactions.
|
|
|
|
The *shift* keyword is not supported by the *tersoff/gpu*,
|
|
*tersoff/intel*, *tersoff/kk*, *tersoff/table* or *tersoff/table/omp*
|
|
variants.
|
|
|
|
The *tersoff/intel* pair style is only available when compiling LAMMPS
|
|
with the Intel compilers.
|
|
|
|
The Tersoff potential files provided with LAMMPS (see the potentials
|
|
directory) are parameterized for :doc:`"metal" units <units>`. In addition
|
|
the pair style supports converting potential parameters on-the-fly between
|
|
"metal" and "real" units. You can use the *tersoff* pair style variants
|
|
with any LAMMPS units setting, but you would need to
|
|
create your own Tersoff potential file with coefficients listed in the
|
|
appropriate units if your simulation does not use "metal" or "real" units.
|
|
|
|
Related commands
|
|
""""""""""""""""
|
|
|
|
:doc:`pair_coeff <pair_coeff>`
|
|
|
|
Default
|
|
"""""""
|
|
|
|
shift delta = 0.0
|
|
|
|
----------
|
|
|
|
.. _Tersoff_11:
|
|
|
|
**(Tersoff_1)** J. Tersoff, Phys Rev B, 37, 6991 (1988).
|
|
|
|
.. _Albe:
|
|
|
|
**(Albe)** J. Nord, K. Albe, P. Erhart, and K. Nordlund, J. Phys.:
|
|
Condens. Matter, 15, 5649(2003).
|
|
|
|
.. _Tersoff_21:
|
|
|
|
**(Tersoff_2)** J. Tersoff, Phys Rev B, 39, 5566 (1989); errata (PRB 41, 3248)
|
|
|
|
.. _Mandelli1:
|
|
|
|
**(Mandelli_1)** D. Mandelli, W. Ouyang, M. Urbakh, and O. Hod, ACS Nano 13(7), 7603-7609 (2019).
|
|
|
|
.. _Ouyang5:
|
|
|
|
**(Ouyang_1)** W. Ouyang et al., J. Chem. Theory Comput. 16(1), 666-676 (2020).
|