MaddenParticle

class MaddenParticle(particleType, dipolePolarization, quadrupolePolarization, alpha, B, C, dipoleDistortion, quadrupoleDistortion, D, beta, zeta, eta, gamma)

Constructor of the potential.

Parameters:
  • particleType (ParticleType or ParticleIdentifier) – Identifier of the particle type.
  • dipolePolarization (bool) – Enable/disable dipole polarization (induced dipoles).
  • quadrupolePolarization (bool) – Enable/disable quadrupole polarization (induced quadrupoles).
  • alpha (PhysicalQuantity of type charge**2 * length**2 / energy) – Potential parameter for the electrostatic self-energy term.
  • B (PhysicalQuantity of type charge**3 * length**4 / energy**2) – Potential parameter for the electrostatic self-energy term.
  • C (PhysicalQuantity of type charge**2 * length**4 / energy) – Potential parameter for the electrostatic self-energy term.
  • dipoleDistortion (bool) – Enable/disable dipolar ion distortion.
  • qaudrupoleDistortion (bool) – Enable/disable quadrupole ion distortion.
  • D (PhysicalQuantity of type energy) – Potential parameter for the distortion self-energy term.
  • beta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.
  • zeta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.
  • eta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.
  • gamma (PhysicalQuantity of type energy) – Potential parameter for the distortion self-energy term.
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.

setAlpha(alpha)

Set the parameter alpha.

Parameters:alpha (PhysicalQuantity of type charge**2 * length**2 / energy) – Potential parameter for the electrostatic self-energy term.
setB(B)

Set the parameter B.

Parameters:B (PhysicalQuantity of type charge**3 * length**4 / energy**2) – Potential parameter for the electrostatic self-energy term.
setBeta(beta)

Set the parameter beta.

Parameters:beta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.
setC(C)

Set the parameter C.

Parameters:C (PhysicalQuantity of type charge**2 * length**4 / energy) – Potential parameter for the electrostatic self-energy term.
setD(D)

Set the parameter D.

Parameters:D (PhysicalQuantity of type energy) – Potential parameter for the distortion self-energy term.
setEta(eta)

Set the parameter eta.

Parameters:eta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.
setGamma(gamma)

Set the parameter gamma.

Parameters:gamma (PhysicalQuantity of type energy) – Potential parameter for the distortion self-energy term.
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.
setUseDipoleDistortion(dipoleDistortion)

Enable or disable dipolar ion distortion.

Parameters:dipoleDistortion (bool) – Enable/disable dipolar ion distortion.
setUseDipolePolarization(dipolePolarization)

Enable or disable dipole polarization (induced dipoles).

Parameters:dipolePolarization (bool) – Enable/disable dipole polarization (induced dipoles).
setUseQuadrupoleDistortion(quadrupoleDistortion)

Enable or disable quadrupolar ion distortion.

Parameters:qaudrupoleDistortion (bool) – Enable/disable quadrupole ion distortion.
setUseQuadrupolePolarization(quadrupolePolarization)

Enable or disable quadrupole polarization (induced quadrupoles).

Parameters:quadrupolePolarization (bool) – Enable/disable quadrupole polarization (induced quadrupoles).
setZeta(zeta)

Set the parameter zeta.

Parameters:zeta (PhysicalQuantity of type length**-1) – Potential parameter for the distortion self-energy term.

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.