MaddenEwaldOption

class MaddenEwaldOption(kappa, r_cut)

Constructor of the option.

Parameters:
  • kappa (PhysicalQuantity of type length**-1) – Splitting parameter of the Ewald summation.
  • r_cut (PhysicalQuantity of type length) – Real-space cutoff of the Ewald summation.
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 Madden-Potential potential for an MgSiO3 perovskite structure by adding particle types and interaction functions to the TremoloXPotentialSet.

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

# 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.25  ],
                          [ 0.0144,  0.9436,  0.75  ],
                          [ 0.4856,  0.4436,  0.75  ],
                          [ 0.5144,  0.5564,  0.25  ],
                          [ 0.    ,  0.5   ,  0.    ],
                          [ 0.    ,  0.5   ,  0.5   ],
                          [ 0.5   ,  0.    ,  0.5   ],
                          [ 0.5   ,  0.    ,  0.    ],
                          [ 0.1015,  0.4673,  0.25  ],
                          [ 0.8985,  0.5327,  0.75  ],
                          [ 0.6015,  0.0327,  0.75  ],
                          [ 0.3985,  0.9673,  0.25  ],
                          [ 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
# -------------------------------------------------------------

potential_set = TremoloXPotentialSet(name = 'Jahn_AlCaMgOSi_2007')

# Define and add the general particle types.
potential_set.addParticleType(
    ParticleType(
        symbol='Si',
        mass=28.0855*atomic_mass_unit,
        charge=4.0,
        sigma=None,
        sigma14=None,
        epsilon=None,
        epsilon14=None
    )
)
potential_set.addParticleType(
    ParticleType(
        symbol='Mg',
        mass=24.305*atomic_mass_unit,
        charge=2.0,
        sigma=None,
        sigma14=None,
        epsilon=None,
        epsilon14=None
    )
)
potential_set.addParticleType(
    ParticleType(
        symbol='O',
        mass=15.9994 * atomic_mass_unit,
        charge=-2.0,
        sigma=None,
        sigma14=None,
        epsilon=None,
        epsilon14=None
    )
)

# Define and add the Madden-Ewald-option.
option = MaddenEwaldOption(kappa=0.5, r_cut=7.5*Angstrom)
potential_set.addOption(option)

# Define and add the dispersive potential.
potential = MaddenDispersivePotential(
    particleType1='Mg',
    particleType2='O',
    b=4.1681689*1/Ang,
    C6=1.3021902*eV*Ang**6,
    C8=4.2341478*eV*Ang**8,
    kmax6=6,
    kmax8=8,
    r_cut=12.5*Angstrom
)
potential_set.addPotential(potential)
potential = MaddenDispersivePotential(
    particleType1='Si',
    particleType2='O',
    b=4.1681689*1/Ang,
    C6=1.3021902*eV*Ang**6,
    C8=4.2341478*eV*Ang**8,
    kmax6=6,
    kmax8=8,
    r_cut=12.5*Angstrom
)
potential_set.addPotential(potential)
potential = MaddenDispersivePotential(
    particleType1='O',
    particleType2='O',
    b=2.718371*1/Ang,
    C6=26.51346*eV*Ang**6,
    C8=142.77637*eV*Ang**8,
    kmax6=6,
    kmax8=8,
    r_cut=12.5*Angstrom
)
potential_set.addPotential(potential)

# Define and add the Madden particle type for oxygen.
potential = MaddenParticle(
    particleType='O',
    dipolePolarization=True,
    quadrupolePolarization=True,
    alpha=8.7671*elementary_charge**2*Bohr**2 / Hartree,
    B=0*elementary_charge**3*Bohr**4 / Hartree**2,
    C=11.5124*elementary_charge**2*Bohr**4 / Hartree ,
    dipoleDistortion=True,
    quadrupoleDistortion=True,
    D=0.49566*Hartree,
    beta=1.2325*Bohr**-1,
    zeta=0.89219*Bohr**-1,
    eta=4.3646*Bohr**-1,
    gamma=1*Hartree
)
potential_set.addPotential(potential)

# Define and add the repulsive potential.
potential = MaddenRepulsivePotential(
    particleType1='O',
    particleType2='Mg',
    A=1127.6125*eV,
    a=3.1346777*1/Ang,
    B=1615675.9*eV,
    b=7.3914748*1/Ang,
    C=170982.73*eV,
    c=8.0190528*1/Ang,
    r_cut=6.0*Angstrom
)
potential_set.addPotential(potential)
potential = MaddenRepulsivePotential(
    particleType1='O',
    particleType2='Si',
    A=1177.627*eV,
    a=2.9135798*1/Ang,
    B=1196266.8*eV,
    b=7.5233777*1/Ang,
    C=170982.73*eV,
    c=8.0190528*1/Ang,
    r_cut=6.0*Angstrom
)
potential_set.addPotential(potential)
potential = MaddenRepulsivePotential(
    particleType1='O',
    particleType2='O',
    A=0.0*eV,
    a=0.0*1/Ang,
    B=0.0*eV,
    b=0.0*1/Ang,
    C=14530.879*eV,
    c=5.03763186568*1/Ang,
    r_cut=6.0*Angstrom
)
potential_set.addPotential(potential)

# Define and add the polarization damping potential.
potential = MaddenPolarizationDampingPotential(
    particleType1='O',
    particleType2='Mg',
    bD=4.1853654*1/Ang,
    cD=2.828,
    kmaxD=4,
    bQ=3.6471714*1/Ang,
    cQ=1.3317,
    kmaxQ=6,
    r_cut=6.0*Angstrom
)
potential_set.addPotential(potential)
potential = MaddenPolarizationDampingPotential(
    particleType1='O',
    particleType2='Si',
    bD=4.015668*1/Ang,
    cD=1.5933,
    kmaxD=4,
    bQ=3.6974382*1/Ang,
    cQ=1.0592,
    kmaxQ=6,
    r_cut=6.0*Angstrom
)
potential_set.addPotential(potential)

# Set the Coulomb solver.
potential_set.setCoulombSolver(
  CoulombDSF(r_cut=9.0*Angstrom, alpha=0.2)
)

# Set up the TremoloX-calculator with the constructed Madden-potential.
calculator = TremoloXCalculator(parameters=potential_set)

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# Optimize the structure and the cell.
bulk_configuration = OptimizeGeometry(
        bulk_configuration,
        max_forces=0.01*eV/Ang,
        max_stress=0.001*eV/Ang**3,
        max_steps=200,
        max_step_length=0.2*Ang,
        trajectory_filename=None,
        optimizer_method=LBFGS(),
        )
nlprint(bulk_configuration)

Notes

The Madden potential is an aspherical ion potential, that accounts for the shape and polarization of the atoms.

The implementation of the Madden potential class in ATK-ForceField is taken from Ref. [JM07].

The potential energy consists of the following four contributions:

\[V^{\rm Madden} = V^{\rm Coulomb} + V^{\rm Dispersion} + V^{\rm Repulsion} + V^{\rm Polarization} \, ,\]

where \(V^{\rm Coulomb}\) is the normal Coulomb potential, which is based on the charges specified in the ParticleType and which can be calculated using one of the Coulomb solvers (e.g., CoulombDSF).

The dispersion potential MaddenDispersivePotential between two particles is given by

\[V_{ij}^{\rm Dispersion}(r) = - \left[(1 - TT^{6} (r)) \frac{C_{ij}^6}{r^6} + (1 - TT^{8} (r))\frac{C_{ij}^8}{r^8} \right] \, ,\]

where \(TT^n\) is the Tang–Toennis damping function:

\[TT^n(r) = c_{ij} e^{-b_{ij} r} \sum_{k=0}^{k_n^{max}} \frac{(b_{ij} r_{ij})^k}{k!}\, .\]

In the current implementation, \(c_{ij}\) is fixed to 1.

The Madden potential implements anisotropic shape deformation and polarization of selected particles. Both deformation and polarization consist of a self-energy term and an inter-particle contribution.

The self-energy term of the repulsive potential is given by

\[V_i^{\rm Repulsion} = D_i (e^{\beta_i \sigma_i} + e^{-\beta_i \sigma_i}) + \gamma_i (e^{\zeta_i^2 \lvert \nu_i \rvert ^2} + e^{\eta_i^2 \lvert \kappa_i \rvert ^2} - 2) \, .\]

The variables \(\sigma\), \(\nu\), and \(\kappa\) represent the deviation in the particle radius from the default value, the dipole-like shape distortion, and the quadrupole-like shape distortion. The particle-specific parameters can be given in MaddenParticle.

The inter-particle term is given by

\[V_{ij}^{\rm Repulsion} = A_{ij} e^{-a_{ij} \rho_{ij}} + B_{ij} e^{-b_{ij} \rho_{ij}} + C_{ij} e^{-c_{ij} \rho_{ij}} \, ,\]

with

\[\rho_{ij} = r_{ij} - \sigma_i - \sum_{\alpha} \frac{r_{ij}^{\alpha}}{r_{ij}} \nu_i^{\alpha} - \sum_{\alpha, \beta}\frac{r_{ij}^{\alpha}r_{ij}^{\beta}}{r_{ij}^2}\kappa_i^{\alpha\beta} \, .\]

The pair dependent parameters are specified in MaddenRepulsivePotential.

Finally, the contributions arising from all Madden particles are added

\[V^{\rm Repulsion} = \sum V_i^{\rm Repulsion} + \sum_{i \neq j} V_{ij}^{\rm Repulsion} \, .\]

The polarization contribution contains a self-energy which is given by

\[V_{i}^{\rm Polarization} = \frac{1}{2\alpha_i} | \mu_i |^2 + \sum_{\beta, \gamma}\frac{1}{6 C_i} \theta_i^{\beta\gamma} \theta_i^{\beta\gamma} \, .\]

The electrostatic contribution between all polarizable particles is given by

\[V_{ij}^{\rm Polarization} = -\sum_{\alpha} q_j \mu_i^{\alpha} T^{\alpha} + \sum_{\alpha, \beta} \left(\frac{q_j \theta_i^{\alpha\beta}}{3} - \frac{1}{2}\mu_i^{\alpha}\mu_j^{\beta} \right) T^{\alpha\beta}\]
\[+ \sum_{\alpha, \beta, \gamma} \frac{1}{3} \mu_j^{\alpha}\theta_i^{\beta\gamma} T^{\alpha\beta\gamma} + \sum_{\alpha, \beta, \gamma, \delta} \frac{1}{18}\theta_i^{\alpha\beta}\theta_j^{\gamma\delta} T^{\alpha\beta\gamma\delta} \, ,\]

whereas the interaction between a polarizable particle \(i\) and a non-polarizable particle \(j\) is given by

\[-q_j \mu_i^{\alpha} T^{\alpha} + \sum_{\alpha, \beta} \frac{q_j \theta_i^{\alpha\beta}}{3} T^{\alpha\beta} \, .\]

The variables \(\mu\) and \(\theta\) denote dipole and quadrupole polarization of a particle. The \(T_{\alpha\beta..}\) symbols denote multipole-interaction tensors (see [JM07] for details). The particle-specific parameter values are again set in MaddenParticle

The electrostatic interaction between two particles can be modified by damping functions \(TT_D(r)\) and \(TT_{Q}(r)\) (see [JM07]) yielding

\[V_{ij}^{\rm Polarization-damping}(r) = \sum_{\alpha} q_j \mu_i^{\alpha} TT_{D}(r) T^{\alpha} - \sum_{\alpha, \beta} \frac{TT_{Q}(r)}{3} q_j \theta_i^{\alpha\beta} T^{\alpha\beta} \, .\]

The corresponding parameters are specified in MaddenPolarizationDampingPotential.

Similar to the repulsion potential, the total polarization energy is calculated by adding the contributions of all polarizable particles, and between polarizable and non-polarizable particle pairs.

The long-range contributions of the electrostatic interactions in the Madden potential can be evaluated using the Ewald summation technique. The corresponding parameters are set in MaddenEwaldOption.

[JM07](1, 2, 3) S. Jahn and P. A. Madden. Modeling Earth materials from crustal to lower mantle conditions: A transferable set of interaction potentials for the CMAS system. Physics of the Earth and Planetary Interiors, 162(1–2):129–139, 2007. doi:10.1016/j.pepi.2007.04.002.