Density Mixing
Pulay Mixing
The density is updated using Pulay-mixing [1], [2].
Pulay mixing (or direct inversion of the iterative subspace (DIIS)) attempts to find a good approximation of the final solution as a linear combination of a set of trial vectors \(\{n^i\}\) generated during an iterative solution of a problem. If the error associated with a given solution is given as \(\{R^i\}\) then Pulay mixing assumes that the error of a linear combination of the trail vectors is given as the same linear combination of errors
The norm \(R^{i+1}\) is thus given as
where elements of the matrix is given as \(\bar{\bar{R}}_{ij}=\langle R_{i}|R_{j}\rangle\). The norm can thus be minimized by solving
In density mixing the error of a given input density is given as
The original Pulay mixing only uses \(n_i^{out}\) to calculate the errors and thereby the mixing parameters. To more efficiently cover solution space it can be an advantage to include them with a certain weight, given as the input parameter \(\beta\).
Special Metric
Convergence is improved by an optimized metric \(\hat{M}\) for calculation of scalar products in the mixing scheme, \(\langle A | B \rangle _s = \langle A | \hat{M} | B \rangle\), where \(\langle \rangle _s\) is the scalar product with the special metric and \(\langle \rangle\) is the usual scalar product. The metric is based on the rationale that contributions for small wave vectors are more important than contributions for large wave vectors [2]. Using a metric that weighs short wave density changes more than long wave changes can reduce charge sloshing significantly.
It has been found [2] that the metric
is particularly useful (\(w\) is a suitably chosen weight).
This is easy to apply in plane wave codes, as it is local in reciprocal space. Expressed in real space, this metric is
As this is fully nonlocal in real space, it would be very costly to apply. Instead we use a semilocal stencil with only three nearest neighbors:
which corresponds to the reciprocal space metric
With the nice property that it is a monotonously decaying function from \(f_q = w + 1\) at \(q = 0\) to \(f_q = 1\) anywhere at the zone boundary in reciprocal space.
A comparison of the two metrics is displayed in the figure below
Specifying a Mixing Scheme in GPAW
Specifying the mixing scheme and metric is done using the mixer
keyword of the GPAW calculator:
from gpaw import GPAW, Mixer
calc = GPAW(..., mixer=Mixer(beta=0.05, nmaxold=5, weight=50.0), ...)
which is the recommended value if the default fails to converge.
The class Mixer
indicates one of the possible mixing schemes. The
Pulay mixing can be based on:
The spin densities separately,
Mixer
(This will not work for a spinpolarized system, unless the magnetic moment is fixed)The total density,
MixerSum2
Spin channels separately for the density matrices, and the summed channels for the pseudo electron density,
MixerSum
The total density and magnetization densities separately,
MixerDif
Where the magnetization density is the difference between the two spin densities.
All mixer classes takes the arguments (beta=0.25, nmaxold=3,
weight=50.0)
. In addition, the MixerDif
also takes
the arguments (beta_m=0.7, nmaxold_m=2,
weight_m=10.0)
which is the corresponding mixing parameters for the
magnetization density.
Here beta
is the linear mixing coefficient, nmaxold
is the
number of old densities used, and weight
is the
weight used by the metric, if any.
MixerDif seems to be a good choice for spin polarized molecules. MixerSum is sometimes better for bulk systems.