BuckinghamPotential

class BuckinghamPotential(particleType1, particleType2, A, rho, r_i=None, 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.

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

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

  • r_i (PhysicalQuantity of type length) – The inner cutoff radius where the smoothing of the potential starts. r_i must be smaller than r_cut.

  • r_cut (PhysicalQuantity of type length) – The cutoff radius of this potential.

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 potential for Quartz by adding particle types and interaction functions to the TremoloXPotentialSet.

# -------------------------------------------------------------
# Set up a SiO2 Quartz crystal
# -------------------------------------------------------------

# Set up lattice
lattice = Hexagonal(4.916*Angstrom, 5.4054*Angstrom)

# Define elements
elements = [Silicon, Silicon, Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen]

# Define coordinates
fractional_coordinates = [[ 0.4697,  0.0000,  0.0000    ],
                          [ 0.0000,  0.4697,  0.66666667],
                          [ 0.5303,  0.5303,  0.33333333],
                          [ 0.4135,  0.2669,  0.1191    ],
                          [ 0.2669,  0.4135,  0.547567  ],
                          [ 0.7331,  0.1466,  0.785767  ],
                          [ 0.5865,  0.8534,  0.214233  ],
                          [ 0.8534,  0.5865,  0.452433  ],
                          [ 0.1466,  0.7331,  0.8809    ]]

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

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

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

# Add the paricle types to the potential set
potentialSet.addParticleType(ParticleType(symbol='Si',
                                          mass=28.0855*atomic_mass_unit,
                                          charge=2.4))
potentialSet.addParticleType(ParticleType(symbol='O',
                                          mass=15.9994*atomic_mass_unit,
                                          charge=-1.2))

# Add the Buckingham potentials to the potential set
potentialSet.addPotential(BuckinghamPotential('O', 'O',
                                              A=1388.773*eV,
                                              rho=0.36231884*Angstrom,
                                              r_i=5.0*Angstrom,
                                              r_cut=5.5*Angstrom))
potentialSet.addPotential(BuckinghamPotential('Si', 'O',
                                              A=18003.7572*eV,
                                              rho=0.20520481*Angstrom,
                                              r_i=5.0*Angstrom,
                                              r_cut=5.5*Angstrom))

# Add the 6th-power dispersion term to the potential set
potentialSet.addPotential(LennardJonesMNPotential('O', 'O',
                                                  r_cut=9.0*Angstrom,
                                                  A=0.0*eV*Angstrom,
                                                  B=175.0*eV*Angstrom**6.0,
                                                  m=1.000000,
                                                  n=6.000000))
potentialSet.addPotential(LennardJonesMNPotential('Si', 'O',
                                                  r_cut=9.0*Angstrom,
                                                  A=0.0*eV*Angstrom,
                                                  B=133.5381*eV*Angstrom**6.0,
                                                  m=1.000000,
                                                  n=6.000000))

# Add the Coulomb solver to the potential set
potentialSet.setCoulombSolver(CoulombDSF(r_cut=9.0*Angstrom))
calculator = TremoloXCalculator(parameters=potentialSet)

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()


Notes

The BuckinghamPotential defines a pair potential of the form

\[V_{ij}(r) = A e^{-r/\rho} \, .\]

Note that this potential form uses a repulsive term only. In general, Buckingham potentials often also include an attractive dispersion term of the form \(-C/r^6\) .

We have not included such a term in the TremoloX BuckinghamPotential implementation, as this can easily be achieved by adding a LennardJonesMNPotential, for example, as shown in the example above.

This permits combinations of the BuckinghamPotential with all kinds of attractive terms avaliable in the TremoloXPotentialSet, providing extended flexibility.

At long distances this potential is brought smoothly to zero between the inner cutoff r_i and the outer cutoff r_cut, using a 5th order spline function. This ensures that there are no discontinuites in the forces as atoms are brought closer together, and that the energy is properly conserved. The applied potential \(U(r)\) is given as:

\[U(r) = V_{ij}(r) \times S(r)\]

where \(V_{ij}(r)\) is the pair potential and \(S(r)\) is the spline function. The values of the spline function are:

  • 1 when \(r \le r_i\)

  • In the range \([0,1]\) when \(r_i < r < r_{cut}\)

  • 0 when \(r \ge r_{cut}\)