CoulombERFCPotential

class CoulombERFCPotential(particleType1, particleType2, beta, 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.
  • beta (PhysicalQuantity of type length) – Potential Parameter.
  • 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.

setBeta(beta)

Set the parameter beta.

Parameters:beta (PhysicalQuantity of type length) – 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.
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 the Pedone_2006Fe2 potential by hand, by adding the individual components

potentialSet = TremoloXPotentialSet(name='Pedone_CoulombERFC')

# Add the particle 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 pair potentials to the potential set
potentialSet.addPotential(MorsePotential('Si', 'O', r_0=2.1*Angstrom, k=2.0067*1/Ang, E_0=0.340554*eV, r_i=6.0*Angstrom, r_cut=7.5*Angstrom))
potentialSet.addPotential(Repulsive12Potential('Si', 'O', r_cut=7.5*Angstrom, c=1.0*Ang**12*eV))
potentialSet.addPotential(MorsePotential('O', 'O', r_0=3.618701*Angstrom, k=1.379316*1/Ang, E_0=0.042395*eV, r_i=6.0*Angstrom, r_cut=7.5*Angstrom))
potentialSet.addPotential(Repulsive12Potential('O', 'O', r_cut=7.5*Angstrom, c=22.0*Ang**12*eV))

# Add the coulomb pair potentials to the potential set
potentialSet.addPotential(CoulombERFCPotential('Si', 'Si', beta=2.3*Angstrom, r_cut=9.0*Angstrom))
potentialSet.addPotential(CoulombERFCPotential('Si',  'O', beta=2.3*Angstrom, r_cut=9.0*Angstrom))
potentialSet.addPotential(CoulombERFCPotential( 'O',  'O', beta=2.3*Angstrom, r_cut=9.0*Angstrom))

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

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

Notes

The CoulombERFCPotential potential can be used to approximately calculate pairwise electrostatic interactions between particles with partial charges, as defined in the ParticleType.

The Coulomb interactions between two particles \(i\) and \(j\) are screened by a complementary error function, similar to the real-space part of the CoulombSPME method:

\[V_{ij}(r) = \frac{q_i q_j}{r} \, {\rm erfc}(r/\beta_{ij})\, .\]

In contrast to the Coulomb solver classes, which calculate the interactions between all charged particles, this method calculates only the interactions between the specified particle type pairs.