Name

iterationMixingParameters Controls the mixing at the end of a cycle in the self-consistent calculation.

Synopsis

Namespace: ATK.KohnSham or ATK.TwoProbe
dictionary iterationMixingParameters(
algorithm,
diagonal_mixing_parameter,
quantity,
history_steps
)

Description

This function returns a dictionary with parameters for controlling the mixing during the self-consistent iteration.

List of arguments

algorithm

Specifies the mixing algorithm. Possible choices are IterationMixing.Pulay and IterationMixing.Broyden.

Default: IterationMixing.Pulay

diagonal_mixing_parameter

The percentage of the output that is mixed into the input, to produce the input for the next step. A number between 0 and 1.

Default: 0.1

quantity

The quantity to be mixed. Possible choices are IterationMixing.Hamiltonian, IterationMixing.DensityMatrix, and IterationMixing.EffectivePotential.

Default: IterationMixing.Hamiltonian

history_steps

The number of previous steps that used in the mixing algorithm.

Default: 6

This function returns a dictionary with parameters for controlling the mixing during the self-consistent iteration.

Usage examples

Configure interaction parameters for calculation:

from ATK.KohnSham import *

iteration_mixing_param = iterationMixingParameters(
    algorithm = IterationMixing.Broyden,
    diagonal_mixing_parameter = 0.1,
    quantity = IterationMixing.DensityMatrix,
    history_steps = 10
    )

Notes

The density-functional methods used in ATK to solve the electronic structure problem requires access to the electron density in order to calculate the Hamiltonian. At the same time, the density can only be calculated once the Hamiltonian has been diagonalized. To resolve this paradox, ATK employs a self-consistent iteration scheme. Here, an initial guess based on the neutral atom density is first used to generate the Hamiltonian, which is diagonalized to produce the output density. After this, the output density is mixed with the input density in each iteration step producing a new input density for the next step. This is repeated until the difference between the input and the output is below a specified tolerance. Alternatively, the Hamiltonian itself can also be mixed in.

In the simplest case, the mixing will take a certain fraction \beta of the output O_n from step n, and the remaining fraction from the corresponding input O_n, to produce input for the next step:


          I_{n+1} = \beta O_n + (1 - \beta)I_n

The mixing methods used in ATK are however more sophisticated, and mix several steps using the so-called Broyden [3] or Pulay [10] algorithms.

In general, the Pulay mixing algorithm is more reliable and faster than the Broyden one.

The calculation usually converges faster and more smooth if more history_steps are used in the mixing. Using of the order 12 to 20 history steps are generally recommended - in particular for systems that converge poorly. At the same time, however, this also increases the memory consumption of the program, so a careful balance has to be found, especially for large systems.

The simplified formula for mixing presented above corresponds to using only a single history step (which is certainly not recommended). In that formula, β corresponds to the diagonal_mixing_parameter. If the value of this parameter is too large, quantities such as the Hamiltonian will oscillate, and the self-consistent loop will never converge. If, on the other hand, it is too small, the self-consistent loop will converge very slowly. Finding the optimal value for a particular system can be tricky, and is largely based on experience. For electrically insulated systems, larger values of the mixing parameter can be used (up to 0.5). For metallic systems, the value should usually be around 0.1. Two-probe systems in particular might require a lower value (0.01).

For closed systems with a fixed number of electrons, such as molecular or bulk geometries, density matrix mixing is usually the most efficient approach. For open two-probe systems, however, where the central region does not have a fixed number of electrons, Hamiltonian mixing provides, based on our experience, the most efficient mixing scheme.

See the section on iteration control parameters for a thorough description of the parameters that determine the convergence criteria of the self-consistent iteration.