TosiFumiPotential

class TosiFumiPotential(particleType1, particleType2, A, B, C, D, sigma, r_i=None, r_cut=None)

Constructor of the potential.

Parameters:
  • particleType1 (ParticleType) – Identifier of the first particle type.
  • particleType2 (ParticleType) – Identifier of the second particle type.
  • A (PhysicalQuantity of type energy) – Potential parameter.
  • B (PhysicalQuantity of type length**-1) – Potential parameter.
  • C (PhysicalQuantity of type length**6 * energy) – Potential parameter.
  • D (PhysicalQuantity of type length**8 * energy) – Potential parameter.
  • sigma (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.
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**-1) – Potential parameter.
setC(C)

Set the parameter C.

Parameters:C (PhysicalQuantity of type length**6 * energy) – 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.
setD(D)

Set the parameter D.

Parameters:D (PhysicalQuantity of type length**8 * energy) – Potential parameter.
setInnerCutoff(r_i)

Set the inner cutoff radius for this potential.

Parameters:r_i (PhysicalQuantity of type length) – The inner cutoff radius (distance where the spline-smoothing starts).
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.
setSigma(sigma)

Set the parameter sigma.

Parameters:sigma (PhysicalQuantity of type length) – Potential parameter.

Usage Examples

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

# -------------------------------------------------------------
# Bulk configuration for the MgSiO3 perovskite structure
# -------------------------------------------------------------

# Set up lattice
lattice = SimpleOrthorhombic(4.7786*Angstrom, 4.9293*Angstrom, 6.9003*Angstrom)

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

# Define coordinates
fractional_coordinates = [[ 0.9856,  0.0564,  0.2500],
                          [ 0.0144,  0.9436,  0.7500],
                          [ 0.4856,  0.4436,  0.7500],
                          [ 0.5144,  0.5564,  0.2500],
                          [ 0.0000,  0.500 ,  0.0000],
                          [ 0.0000,  0.500 ,  0.5000],
                          [ 0.5000,  0.0000,  0.5000],
                          [ 0.5000,  0.0000,  0.0000],
                          [ 0.1015,  0.4673,  0.2500],
                          [ 0.8985,  0.5327,  0.7500],
                          [ 0.6015,  0.0327,  0.7500],
                          [ 0.3985,  0.9673,  0.2500],
                          [ 0.6962,  0.2983,  0.0524],
                          [ 0.6962,  0.2983,  0.4476],
                          [ 0.3038,  0.7017,  0.5524],
                          [ 0.1962,  0.2017,  0.5524],
                          [ 0.8038,  0.7983,  0.4476],
                          [ 0.8038,  0.7983,  0.0524],
                          [ 0.1962,  0.2017,  0.9476],
                          [ 0.3038,  0.7017,  0.9476]]

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

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

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

# Add the particle types to the potential set
potentialSet.addParticleType(ParticleType(symbol='Mg',
                                          mass=24.305*atomic_mass_unit,
                                          charge=1.565))
potentialSet.addParticleType(ParticleType(symbol='Si',
                                          mass=28.0855*atomic_mass_unit,
                                          charge=2.329))
potentialSet.addParticleType(ParticleType(symbol='O',
                                          mass=15.9994*atomic_mass_unit,
                                          charge=-1.298))

# Add the Tosi-Fumi type pair potentials to the potential set
potentialSet.addPotential(TosiFumiPotential('Mg', 'Mg',
                                            A=0.0045098664*eV,
                                            B=9.6153846*1/Ang,
                                            C=0.0*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=2.0534*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential('Si', 'Si',
                                            A=0.003469128*eV,
                                            B=12.5*1/Ang,
                                            C=0.0*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=1.7058*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential('O', 'O',
                                            A=0.01300923*eV,
                                            B=3.3333333*1/Ang,
                                            C=30.222207*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=3.5304*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential('Mg', 'Si',
                                            A=0.0039894972*eV,
                                            B=10.869565*1/Ang,
                                            C=0.0*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=1.8796*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential('Mg', 'O',
                                            A=0.0087595482*eV,
                                            B=4.950495*1/Ang,
                                            C=0.0*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=2.7919*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential('Si', 'O',
                                            A=0.008239179*eV,
                                            B=5.2631579*1/Ang,
                                            C=0.0*Ang**6*eV,
                                            D=0.0*Ang**8*eV,
                                            sigma=2.6181*Angstrom,
                                            r_i=6.0*Angstrom,
                                            r_cut=7.5*Angstrom))

# Add the Coulomb solver to the potential set
potentialSet.setCoulombSolver(CoulombDSF(r_cut=9.0*Angstrom, alpha=0.200000))

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

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()


Notes

The TosiFumiPotential [TF64] defines a pair potential of the form

\[V_{ij}(r) = A e^{B(\sigma - r)} - \frac{C}{r^6} - \frac{D}{r^8} \, .\]

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}\)

[TF64]M. P. Tosi and F. G. Fumi. Ionic sizes and born repulsive parameters in the NaCl-type alkali halides—II. J. Phys. Chem. Solids, 25(1):45–52, jan 1964. doi:10.1016/0022-3697(64)90160-X.