Next:
Bloch's Theorem Up:The Many Body Problem Previous:Density Functional TheoryContentsNature of problem: Evaluation of the exchange–correlation energy functional and its derivatives. This is a fundamental part of any atomic, molecular, or solid-state code that uses density-functional theory. Solution method: The values of the energy functional and its derivatives are given in a real grid of mesh points. Local-density approximations (LDA) are a class of approximations to the exchange–correlation (XC) energy functional in density functional theory (DFT) that depend solely upon the value of the electronic density at each point in space (and not, for example, derivatives of the density or the Kohn–Sham orbitals).
Towards A New Exchange-Correlation Density Functional for More Accurate Band Gap Predictions. Density-Functional Theory (DFT) offers a simplification to electronic structure prob- lems by using the electron density instead of the wave-function.
The Kohn-Sham equations in 2.30 are thus far exact: no approximations have yet been made; we have simply mapped the fully interacting system onto an auxiliary non-interacting system that yields the same groundstate density.
As mentioned earlier, the Kohn-Sham kinetic energy is not the true kinetic energy; we may use this to define formally the exchange-correlation energy as
where and are the exact kinetic and electron-electron interaction energies respectively. Physically, this term can be interpreted as containing the contributions of detailed correlation and exchange to the system energy. The definition above is such that it ensures that the Kohn-Sham formulation is exact. However, the actual form of is not known; thus we must introduce approximate functionals based upon the electron density to describe this term. There are two common approximations (in various forms) in use: the local density approximation (LDA) [47], and the generalised gradient approximation (GGA) [48]. The simplest approximation is the LDA: this assumes that the exchange-correlation energy at a point is simply equal to the exchange-correlation energy of a uniform electron gas that has the same density at the point . Thus we can write
(2.33) |
so that the exchange-correlation potential may be written
with
(2.35) |
where in the last equation the assumption is that the exchange-correlation energy is purely local. The most common parametrisation in use for is that of Perdew and Zunger [49], which is based upon the quantum Monte Carlo calculations of Ceperley and Alder [50] on homogeneous electron gases at various densities; the parametrisations provide interpolation formulae linking these results.
The LDA ignores corrections to the exchange-correlation energy due to inhomogeneities in the electron density about . It may seem surprising that this is as successful as it is given the severe nature of the approximation in use; to large extent, it appears [40] that this is due to the fact that the LDA respects the sum rule, that is, that exactly one electron is excluded from the immediate vicinity of a given electron at point . The LDA is known to overbind, particularly in molecules. It is for this reason that in this study we have neglected it in favour of the GGA.
The GGA attempts to incorporate the effects of inhomogeneities by including the gradient of the electron density; as such it is a semi-local method. The GGA XC functional can be written as
Libxc is a library of exchange-correlation and kinetic energy functionals for density-functional theory. The original aim was to provide a portable, well tested and reliable set of these functionals to be used by all the codes of the European Theoretical Spectroscopy Facility (ETSF), but the library has since grown to be used in several other types of codes as well; see below for a partial list.
Libxc is written in C, but it also comes with Fortran and Python bindings. It is released under the MPL license (v. 2.0). Contributions are welcome. Bug reports and patches should be submitted over gitlab.
To cite Libxc, the current reference is
The previous reference to the library was
In Libxc you can find various types of functionals: LDA, GGA, and meta-GGA (mGGA) functionals. LDAs, GGAs, and meta-GGAs depend on local information, in the sense that the value of the density functional part of the energy density at a given point depends only on the values of the density, the gradient of the density, and the kinetic energy density and/or the density laplacian, respectively, at the given point:
$$E^mathrm{LDA}_mathrm{xc} = E^mathrm{LDA}_mathrm{xc}[n(vec{r})],$$
$$E^mathrm{GGA}_mathrm{xc} = E^mathrm{GGA}_{xc}[n(vec{r}), vec{nabla}n(vec{r})],$$
$$E^mathrm{mGGA}_mathrm{xc} = E^mathrm{mGGA}_mathrm{xc}[n(vec{r}), vec{nabla}n(vec{r}), nabla^2 n(vec{r}), tau(vec{r})].$$
Libxc is designed to evaluate this energy density and its derivatives in a correct fashion. Because several functionals are complicated in form, Libxc is based on the use of computer algebra and automatic code generation to enable the generation of bug-free code. Libxc can calculate both the functional itself, as well as its first through fourth derivatives, satisfying even the stringest requirements for applications.
Global hybrid (GH) and range-separated hybrid (RSH) functionals are also supported by Libxc:$$E^mathrm{GH}_mathrm{xc} = c_x E^mathrm{EXX} + E^mathrm{DFT}_mathrm{xc}[n(vec{r}), dots],$$
$$E^mathrm{RSH}_mathrm{xc} = c_mathrm{sr} E^mathrm{EXX}_mathrm{sr} + c_mathrm{lr} E^mathrm{EXX}_mathrm{lr} + E^mathrm{DFT}_mathrm{xc}[n(vec{r}), dots].$$
For these functionals, Libxc only handles the local part (as above); the evaluation of the exact exchange components must be done in the calling program. Libxc, however, does contain all the information necessary to perform the calculations (fraction of exact exchange, range separation parameter(s)).
The same can be said about dispersion corrections: several functionals are available in Libxc that were parametrized with either semiclassical dispersion corrections à la Grimme, or various van der Waals functionals; neither of these can be evaluated with the local density information provided to Libxc, and must be handled by the calling program. The necessary parameters for VV10-type correlation kernels are, however, provided by Libxc as part of the functional definition.
At the moment, we are aware of Libxc being used in the following codes (in alphabetical order):