TersoffDiag2Potential

class TersoffDiag2Potential(particleType1, particleType2, A, B, R, S, l, mu, alpha, beta, omega, chi, chiR, m, n, c, d, h)

Constructor of the potential.

Parameters:
  • particleType1 (ParticleType or ParticleIdentifier) – Identifier of the first particle type.
  • particleType2 (ParticleType or ParticleIdentifier) – Identifier of the second particle type.
  • A (PhysicalQuantity of type energy) – Potential parameter.
  • B (PhysicalQuantity of type energy) – Potential parameter.
  • R (PhysicalQuantity of type length) – Potential parameter.
  • S (PhysicalQuantity of type length) – Potential parameter.
  • l (PhysicalQuantity of type length**-1) – Potential parameter.
  • mu (PhysicalQuantity of type length**-1) – Potential parameter.
  • alpha (PhysicalQuantity of type length**-1) – Potential parameter.
  • beta (float) – Potential parameter.
  • omega (float) – Potential parameter.
  • chi (float) – Potential parameter.
  • chiR (float) – Potential parameter.
  • m (int) – Potential parameter.
  • n (float) – Potential parameter.
  • c (float) – Potential parameter.
  • d (float) – Potential parameter.
  • h (float) – Potential parameter.
getAllParameterNames()

Return the names of all used parameters as a list.

getAllParameters()

Return all parameters of this potential and their current values as a <parameterName / parameterValue> dictionary.

static getDefaults()

Get the default parameters of this potential and return them in form of a dictionary of <parameter name, default value> key-value pairs.

getParameter(parameterName)

Get the current value of the parameter parameterName.

setA(A)

Set the parameter A.

Parameters:A (PhysicalQuantity of type energy) – Potential parameter.
setAlpha(alpha)

Set the parameter alpha.

Parameters:alpha (float) – Potential parameter.
setB(B)

Set the parameter B.

Parameters:B (PhysicalQuantity of type energy) – Potential parameter.
setBeta(beta)
Parameters:beta (float) – Potential parameter.
setChi(chi)

Set the parameter chi.

Parameters:chi (float) – Potential parameter.
setChiR(chiR)

Set the parameter chiR.

Parameters:chiR (float) – Potential parameter.
setCutoff(r_cut)

Set the cutoff radius for this potential.

Parameters:r_cut (PhysicalQuantity of type length) – The cutoff radius of this potential.
setLambda(l)

Set the parameter l.

Parameters:l (PhysicalQuantity of type length**-1) – Potential parameter.
setMu(mu)

Set the parameter mu.

Parameters:mu (PhysicalQuantity of type length**-1) – Potential parameter.
setOmega(omega)

Set the parameter omega.

Parameters:omega (float) – Potential parameter.
setParameter(parameterName, value)

Set the parameter parameterName to the given value.

Parameters:
  • parameterName (str) – The name of the parameter that will be modified.
  • value – The new value that will be assigned to the parameter parameterName.
setR(R)

Set the parameter R.

Parameters:R (PhysicalQuantity of type length) – Potential parameter.
setS(S)

Set the parameter S.

Parameters:S (PhysicalQuantity of type length) – Potential parameter.
setc(c)

Set the parameter c.

Parameters:c (float) – Potential parameter.
setd(d)

Set the parameter d.

Parameters:d (float) – Potential parameter.
seth(h)

Set the parameter h.

Parameters:h (float) – Potential parameter.
setm(m)

Set the parameter m.

Parameters:m (int) – Potential parameter.
setn(n)

Set the parameter n.

Parameters:n (float) – Potential parameter.

Usage Examples

Define a Tersoff potential for gallium arsenide by adding particle types and interaction functions to the TremoloXPotentialSet.

# -------------------------------------------------------------
# Bulk configuration for FCC GaAs
# -------------------------------------------------------------

# Set up lattice
lattice = FaceCenteredCubic(5.6537*Angstrom)

# Define elements
elements = [Gallium, Arsenic]

# Define coordinates
fractional_coordinates = [[ 0.00,  0.00,  0.00],
                          [ 0.25,  0.25,  0.25]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------

# Create the new potential set
potentialSet = TremoloXPotentialSet(name='Tersoff_Powell_2007')

# Add the particle types to the potential set
potentialSet.addParticleType(ParticleType(symbol='As',
                                          mass=74.9216*atomic_mass_unit))
potentialSet.addParticleType(ParticleType(symbol='Ga',
                                          mass=69.723*atomic_mass_unit))

# Add the single type potentials to the potential set
potentialSet.addPotential(TersoffSingleTypePotential('Ga',
                                                     A=0.0*eV,
                                                     B=0.0*eV,
                                                     R=0.0*Angstrom,
                                                     S=0.0*Angstrom,
                                                     l=0.0/Angstrom,
                                                     mu=0.0/Angstrom,
                                                     alpha=0.0/Angstrom,
                                                     beta=0.0,
                                                     omega=0.0,
                                                     chi=0.0,
                                                     chiR=0.0,
                                                     m=0,
                                                     n=0.0,
                                                     c=0.0,
                                                     d=0.0,
                                                     h=0.0))
potentialSet.addPotential(TersoffSingleTypePotential('As',
                                                     A=0.0*eV,
                                                     B=0.0*eV,
                                                     R=0.0*Angstrom,
                                                     S=0.0*Angstrom,
                                                     l=0.0/Angstrom,
                                                     mu=0.0/Angstrom,
                                                     alpha=0.0/Angstrom,
                                                     beta=0.0,
                                                     omega=0.0,
                                                     chi=0.0,
                                                     chiR=0.0,
                                                     m=0,
                                                     n=0.0,
                                                     c=0.0,
                                                     d=0.0,
                                                     h=0.0))

# Add the diagonal type potentials to the potential set
potentialSet.addPotential(TersoffDiag2Potential('Ga', 'As',
                                                A=446079.331668*eV,
                                                B=16.0304697869*eV,
                                                R=3.4*Angstrom,
                                                S=3.6*Angstrom,
                                                l=5.84464068024/Angstrom,
                                                mu=0.839717061922/Angstrom,
                                                alpha=0.244341/Angstrom,
                                                beta=0.257183,
                                                omega=1.0,
                                                chi=1.0,
                                                chiR=1.0,
                                                m=3,
                                                n=3.55586,
                                                c=2.16345,
                                                d=0.750147,
                                                h=-0.448899))

calculator = TremoloXCalculator(parameters=potentialSet)

bulk_configuration.setCalculator(calculator)

Notes

In general, Tersoff type potentials are bond-order potentials [Ter88]. They are typically used to describe covalent crystals, such as silicon, carbon, or germanium. The potential includes two-body and three-body terms. The TremoloX implementation of the Tersoff potential is

\[\begin{split}V = \sum_{i < j} f_C(r_{ij})(\chi_{Rij}f_R(r_{ij}) + \frac{(b_{ij} + b_{ji}}{2} f_A(r_{ij})) \, ,\end{split}\]

which is a sum of a repulsive and attractive terms

\[f_R(r_{ij}) = A_{ij} \exp(-\lambda_{ij} r_{ij}) \, ,\]

and

\[f_A(r_{ij}) = -B_{ij} \exp(-\mu_{ij} r_{ij}) \, ,\]

as well as a cutoff function

\[\begin{split}f_C(r) = \begin{cases} 1 &r < R_{ij} \\ \frac{1}{2} + \frac{1}{2} \cos\left(\frac{\pi (r - R_{ij})}{S_{ij} - R_{ij}} \right ) &R_{ij} \leq r < S_{ij} \\ 0 &r \geq S_{ij} \end{cases}\end{split}\]

The term

\[b_{ij} = \chi_{ij} (1 + \beta_{ij}^{n_{ij}} \zeta_{ij}^{n_{ij}})^{-\frac{1}{2n_{ij}}} \, ,\]

with

\[\zeta_{ij} = \sum_{k \neq i,j} f_C(r_{ik}) \omega_{ijk} \exp \left (\alpha_{ijk}^{m_{ijk}} (r_{ij} - r_{ik})^{m_{ijk}} \right) g(\theta_{ijk})\]

and

\[g_{ijk}(\theta_{ijk}) = 1 + \frac{c_{ik}^2}{d_{ik}^2} - \frac{c_{ik}^2}{d_{ik}^2 + (h_{ik} - \cos(\theta_{ijk}))^2} \, ,\]

represents the bond order of the bond between atoms \(i\) and \(j\).

Note

Some publications use the form \(g_{ijk}(\theta_{ijk}) = 1 + \frac{c_{ik}^2}{d_{ik}^2} - \frac{c_{ik}^2}{d_{ik}^2 + (h_{ik} + \cos(\theta_{ijk}))^2}\), which differs in the sign in the cos term. If you want to use parameters given in this form in QuantumATK, you have to flip the sign of the h value, e.g. if the paper says h=1.0 the potential has to be constructed with h=-1.0.

The parameters for a single particle type can be specified in TersoffSingleTypePotential.

For more than one particle type, the following mixing rules are available:

  1. \[\lambda_{ij} = \frac{\lambda_i + \lambda_j}{2} \, , \, \mu_{ij} = \frac{\mu_i + \mu_j}{2} \, , \, A_{ij} = \sqrt{A_i A_j}\]
    \[B_{ij} = \sqrt{B_i B_j} \, , \, R_{ij} = \sqrt{R_i R_j} \, , \mathrm{and} \, S_{ij} = \sqrt{S_i S_j}\]
  2. \[\beta_{ij} = \beta_i \, , \, n_{ij} = n_i \, , \, c_{ij} = c_{i} \, , \, d_{ij} = d_i \, , \mathrm{and} \, h_{ij} = h_i\]
  3. \[\omega_{ijk} = \omega_{ij} \, , \, \alpha_{ijk} = \alpha_{ij} \, , \mathrm{and} \, m_{ijk} = m_{ij}\]

Using TersoffMixitPotential to specify the interaction between two particle types enables all three combination rules listed above.

TersoffDiagPotential employs only the latter two mixing rules, while the remaining parameters have to be specified separately.

TersoffDiag2Potential uses only the last of the above mixing rules, while the remaining parameters have to be specified separately.

In addition, TersoffTriplePotential permits the manual specification of the three body parameters \(\omega_{ijk}\), \(\alpha_{ijk}\), and \(m_{ijk}\).

For high-energy simulations one can modify the repulsive behavior by mixing the Tersoff potential with the universal Ziegler-Biersack-Littmark repulsive potential \(V^{\rm ZBL}\) [ZB85].

Two mixing types are available:

  • Type 1:
    \[\overline{f}_{R}(r) = (1- F(r)) V^{\rm ZBL}(r) + F(r)f_R(r)\]
  • Type 2:
    \[\overline{V}_{ij}(r) = (1- F(r)) V^{\rm ZBL}(r) + F(r)V_{ij}(r)\]

where \(F(r)\) is the Fermi function:

\[F(r)=\frac{1}{1+\exp(-b_f(r-r_f))} \, .\]

This option can be enabled via TersoffZBLPotential. The mixing type (1 or 2) can be selected with the type argument.

[Ter88]J. Tersoff. New empirical approach for the structure and energy of covalent systems. Phys. Rev. B, 37:6991–7000, Apr 1988. doi:10.1103/PhysRevB.37.6991.
[ZB85]James F. Ziegler and Jochen P. Biersack. Treatise on Heavy-Ion Science: Volume 6: Astrophysics, Chemistry, and Condensed Matter., chapter The Stopping and Range of Ions in Matter, pages 93–129. Springer US, Boston, MA, 1985. doi:10.1007/978-1-4615-8103-1_3.