SuttonChenPotential

class SuttonChenPotential(particleType1, particleType2, c, m, n, epsilon, sigma, 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.

  • c (float) – Potential parameter.

  • m (float) – Potential parameter.

  • n (float) – Potential parameter.

  • epsilon (PhysicalQuantity of type energy) – Potential parameter.

  • sigma (PhysicalQuantity of type length) – Potential parameter.

  • r_cut (PhysicalQuantity of type length) – Cutoff radius

static fromMixingRule(potential1, potential2, epsilon=None, sigma=None, c=None, m=None, n=None)

Generate a Sutton-Chen potential using a mixing rule.

Parameters:
  • potential1 (SuttonChenPotential) – Sutton-Chen potential with particleType1 == particleType2.

  • potential2 (SuttonChenPotential) – Sutton-Chen potential with particleType1 == particleType2.

:param epsilon Potential parameter. If this value is None, the corresponding

value in the new potential will be calculated using the mixing rule epsilon_new = sqrt(epsilon_1 * epsilon2). Otherwise the given value is used.

:param sigma Potential parameter. If this value is None, the corresponding

value in the new potential will be calculated using the mixing rule sigma_new = 0.5 * (sigma_1 + sigma_2). Otherwise the given value is used.

:param sigma Potential parameter. If this value is None, the corresponding

value in the new potential will be calculated using the mixing rule sigma_new = 0.5 * (sigma_1 + sigma_2). Otherwise the given value is used.

Returns:

Sutton-Chen potential with particleType1 = potential1.particleType1 and particleType2 = potential2.particleType1. All other values are created using a mixing rule.

Return type:

SuttonChenPotential

classmethod 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.

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.

Usage Examples

Define a Sutton-Chen potential for an alloy of aluminum and nickel by adding particle types and interaction functions to the TremoloXPotentialSet.

# -------------------------------------------------------------
# Bulk Al-Ni alloy configuration
# -------------------------------------------------------------

# Set up lattice
lattice = SimpleCubic(2.881*Angstrom)

# Define elements
elements = [Aluminium, Nickel]

# Define coordinates
fractional_coordinates = [[0.0, 0.0, 0.0],
                          [0.5, 0.5, 0.5]]

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

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

# Create a new potential set
potentialSet = TremoloXPotentialSet(name='SuttonChen_NiAl_2008')

# Add the particle types to the potential set
potentialSet.addParticleType(ParticleType(symbol='Ni',
                                          mass=58.6934*atomic_mass_unit))
potentialSet.addParticleType(ParticleType(symbol='Al',
                                          mass=26.9815*atomic_mass_unit))

# Add the Sutton-Chen potentials to the potential set
potentialSet.addPotential(SuttonChenPotential('Ni', 'Ni',
                                              r_cut=7.04*Angstrom,
                                              c=39.432000,
                                              m=6.0,
                                              n=9.0,
                                              sigma=3.52*Angstrom,
                                              epsilon=0.015707*eV))
potentialSet.addPotential(SuttonChenPotential('Al', 'Al',
                                              r_cut=8.1*Angstrom,
                                              c=16.399,
                                              m=6.0,
                                              n=7.0,
                                              sigma=4.05*Angstrom,
                                              epsilon=0.033147*eV))

# Add the Sutton-Chen potential between different types to the potential set
potentialSet.addPotential(SuttonChenPotential('Ni', 'Al',
                                              r_cut=7.57*Angstrom,
                                              c=39.432000,
                                              m=6.000000,
                                              n=8.000000,
                                              sigma=3.785*Angstrom,
                                              epsilon=0.0228175355593*eV))
calculator = TremoloXCalculator(parameters=potentialSet)

bulk_configuration.setCalculator(calculator)


Notes

The SuttonChenPotential is a many-body potential primarily designed for metals and alloys [1].

The potential energy is defined as

\[V = \sum_i \left[\sum_{j>i}\left(\frac{\epsilon_{ij} \sigma_{ij}}{r_{ij}}\right)^{n_{ij}} - \epsilon_{i} c_{i} \sqrt{\rho_i}\right ]\, ,\]

with

\[\rho_i = \sum_{j\neq i}\left(\frac{\sigma_{ij}}{r_{ij}}\right)^{m_{ij}} \, .\]

If the Sutton-Chen potential is supposed to act between different ParticleType, the parameters epsilon, sigma, m, and n should be chosen according to the native Sutton-Chen combination rules

\[\epsilon_{ij} = \sqrt{\epsilon_{i} \epsilon_{j}} \, ,\]
\[\sigma_{ij} = \frac{\sigma_i + \sigma_j}{2} \, ,\]
\[m_{ij} = \frac{m_i + m_j}{2} \, ,\]

and

\[n_{ij} = \frac{n_i + n_j}{2} \, ,\]

as done in the example script above.

The c parameter does not have an effect in this case.