Stiwe2Potential

class Stiwe2Potential(particleType1, particleType2, p, A, B, gamma, r_cut=None)

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.
  • p (float) – Potential parameter.
  • A (PhysicalQuantity of type energy) – Potential parameter.
  • B (PhysicalQuantity of type length**p) – Potential parameter.
  • gamma (PhysicalQuantity of type length) – Potential parameter.
  • r_cut (PhysicalQuantity of type length) – Cutoff radius
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.
setB(B)

Set the parameter B.

Parameters:B (PhysicalQuantity of type length**p) – 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.
setGamma(gamma)

Set the parameter gamma.

Parameters:gamma (PhysicalQuantity of type length) – 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.
setp(p)

Set the parameter p.

Parameters:p (float) – Potential parameter.

Usage Examples

Define a potential for silicon by adding particle types and interaction functions to the TremoloXPotentialSet.

# -------------------------------------------------------------
# Bulk silicon configuration
# -------------------------------------------------------------

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

# Define elements
elements = [Silicon, Silicon]

# 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 a new potential set
potentialSet = TremoloXPotentialSet(name = 'StillingerWeber_Si_1985')

# Add the particle type to the potential set
potentialSet.addParticleType(ParticleType(symbol='Si', mass=28.0855*atomic_mass_unit))

# Add the Stillinger-Weber two-body potential to the potential set
potentialSet.addPotential(Stiwe2Potential('Si', 'Si',
                                          r_cut=3.77118*Angstrom,
                                          p=4.0,
                                          A = 15.2855528754*eV,
                                          B = 11.6031922834*Ang**4,
                                          gamma = 2.0951*Angstrom))

# Add the Stillinger-Weber three-body potential to the potential set
potentialSet.addPotential(Stiwe3Potential('Si', 'Si', 'Si',
                                          gamma0=2.51412*Angstrom,
                                          gamma1=2.51412*Angstrom,
                                          l=45.5343*eV,
                                          cosTheta0=-0.333333333333,
                                          type=1,
                                          r_0=3.77118*Angstrom,
                                          r_1=3.77118*Angstrom,
                                          r_13=-1.0*Angstrom))

# Create the TremoloX calculator from the potential set
calculator = TremoloXCalculator(parameters=potentialSet)

Notes

The Stiwe2Potential represents the two-body contribution of the Stillinger-Weber potential [cSW85].

The Stillinger-Weber potential can be written as:

\[\begin{split}V = \sum_{i<j} v_2^{ij}(r_{ij}) + \sum_{i<j<k} [v_3^{ijk}(r_{ji}, r_{jk}, \theta_{ijk}) + v_3^{jik}(r_{ij}, r_{ik}, \theta_{jik}) + v_3^{ikj}(r_{ki}, r_{kj}, \theta_{ikj}) ] \, .\end{split}\]

The two-body part is calculated as

\[v_2^{ij}(r) = A\cdot(B\cdot r^{-p} -1) \cdot \exp\left[\frac{\gamma}{r-r_\mathrm{cut}} \right] \, .\]

For a more general form of the two-body term, see generalstiwe3potential_c.

For the three-body part two types are available, which can be selected by the type argument.

Type 1:

\[v_3^{ijk}(r_{ji}, r_{jk}, \theta) = \lambda \exp\left[\frac{\gamma_0}{r_{ji} - r_0} + \frac{\gamma_1}{r_{jk} - r_1} \right] \cdot \left( \cos(\theta) - cos(\theta_0) \right)^\alpha \, .\]

If not specified otherwise, \(\alpha\) is set to 2, as in the original Stillinger-Weber potential [cSW85].

Type 2:

\[v_3^{ijk}(r_{ji}, r_{jk}, \theta) = \lambda \exp\left[\frac{\gamma_0}{r_{ji} - r_0} + \frac{\gamma_1}{r_{jk} - r_1} \right] \cdot \left( \cos(\theta) - cos(\theta_0) \right) \sin(\theta) \cos(\theta) \, .\]

[cSW85](1, 2) F. H. Stillinger and T. A. Weber. Computer simulation of local order in condensed phases of silicon. Phys. Rev. B, 31:5262–5271, Apr 1985. doi:10.1103/PhysRevB.31.5262.