Density Functional

The starting point for the XC functional is usually the result for the homogeneous electron gas, after which the so called non-local or generalized gradient approximation (GGA) can be added.

XC functionals

The density functional approximation is controlled by the XC key.

XC (block-type)

Three classes of XC functionals are supported: LDA, GGA, meta-GGA, and range-separated hybrid functionals. There is also the option to add an empirical dispersion correction. The only ingredient of the LDA energy density is the (local) density, the GGA depends additionally on the gradient of the density, and the meta-GGA has an extra dependency on the kinetic energy density. The range-separated hybrids are explained below in the section Range-Separated Hybrids.

In principle you may specify different functionals to be used for the potential, which determines the self-consistent charge density, and for the energy expression that is used to evaluate the (XC part of the) energy of the charge density. The energy functional is used for the nuclear gradients (geometry optimization), too. To be consistent, one should generally apply the same functional to evaluate the potential and energy respectively. Two reasons, however, may lead one to do otherwise:

  1. The evaluation of the GGA part (especially for meta-GGAs) in the potential is rather time-consuming. The effect of the GGA term in the potential on the self-consistent charge density is often not very large. From the point of view of computational efficiency it may, therefore, be attractive to solve the SCF equations at the LDA level (i.e. not including GGA terms in the potential), and to apply the full expression, including GGA terms, to the energy evaluation a posteriori: post-SCF.
  2. A particular XC functional may have only an implementation for the potential, but not for the energy (or vice versa). This is a rather special case, intended primarily for fundamental research of Density Functional Theory, rather than for run-of-the-mill production runs.

All subkeys of XC are optional and may occur twice in the data block: if one wants to specify different functionals for potential and energy evaluations respectively, see above.

   {LDA  {Apply}   LDA {Stoll}}
   {GGA  {Apply}   GGA}
   {DiracGGA  GGA}
   {MetaGGA  {Apply}   GGA}
   {Dispersion {s6scaling} {RSCALE=r0scaling} {Grimme3} {BJDAMP} {PAR1=par1} {PAR2=par2} {PAR3=par3} {PAR4=par4}}
   {SpinOrbitMagnetization [None|NonCollinear|CollinearX|CollinearY|CollinearZ]}
   {LibXC {Functional}}

The common use is to specify either an LDA or a (meta)GGA line. (Technically it is possible to have an LDA line and a GGA line, in which case the LDA part of the GGA functional (if applicable) is replaced by what is specified by the LDA line.)

States whether the functional defined on the pertaining line will be used self-consistently (in the SCF-potential), or only post-SCF, i.e. to evaluate the XC energy corresponding to the charge density. The value of apply must be SCF or POSTSCF. (default=SCF)



Defines the LDA part of the XC functional and can be any of the following:

Xonly: The pure-exchange electron gas formula. Technically this is identical to the Xalpha form with a value 2/3 for the X-alpha parameter.

Xalpha: the scaled (parameterized) exchange-only formula. When this option is used you may (optionally) specify the X-alpha parameter by typing a numerical value after the string Xalpha (Default: 0.7).

VWN: the parameterization of electron gas data given by Vosko, Wilk and Nusair (ref [1], formula version V). Among the available LDA options this is the more advanced one, including correlation effects to a fair extent.

Stoll: For the VWN or GL variety of the LDA form you may include Stoll’s correction [2] by typing Stoll on the same line, after the main LDA specification. You must not use Stoll’s correction in combination with the Xonly or the Xalpha form for the Local Density functional.


Specifies the GGA part of the XC Functional. It uses derivatives (gradients) of the charge density. Separate choices can be made for the GGA exchange correction and the GGA correlation correction respectively. Both specifications must be typed (if at all) on the same line, after the GGA subkey.

For the exchange part the options are:

  • Becke: the gradient correction proposed in 1988 by Becke [3]
  • PW86x: the correction advocated in 1986 by Perdew-Wang [4]
  • PW91x: the exchange correction proposed in 1991 by Perdew-Wang [5]
  • mPWx: the modified PW91 exchange correction proposed in 1998 by Adamo-Barone [27]
  • PBEx: the exchange correction proposed in 1996 by Perdew-Burke-Ernzerhof [12]
  • HTBSx: the HTBS exchange functional [43]
  • RPBEx: the revised PBE exchange correction proposed in 1999 by Hammer-Hansen-Norskov [13]
  • revPBEx: the revised PBE exchange correction proposed in 1998 by Zhang-Yang [28]
  • mPBEx: the modified PBE exchange correction proposed in 2002 by Adamo-Barone [29]
  • OPTX: the OPTX exchange correction proposed in 2001 by Handy-Cohen [30]

For the correlation part the options are:

  • Perdew: the correlation term presented in 1986 by Perdew [6]
  • PBEc: the correlation term presented in 1996 by Perdew-Burke-Ernzerhof [12]
  • PW91c: the correlation correction of Perdew-Wang (1991), see [5], [8], [9]
  • LYP: the Lee-Yang-Parr 1988 correlation correction [7]

Some GGA options define the exchange and correlation parts in one stroke. These are:

  • BP86: this is equivalent to Becke + Perdew together
  • PW91: this is equivalent to pw91x + pw91c together
  • mPW: this is equivalent to mPWx + pw91c together
  • PBE: this is equivalent to PBEx + PBEc together
  • HTBS: this is equivalent to HTBSx + PBEc together
  • RPBE: this is equivalent to RPBEx + PBEc together
  • revPBE: this is equivalent to revPBEx + PBEc together
  • mPBE: this is equivalent to mPBEx + PBEc together
  • BLYP: this is equivalent to Becke (exchange) + LYP (correlation)
  • OLYP: this is equivalent to OPTX (exchange) + LYP (correlation)
  • OPBE: this is equivalent to OPTX (exchange) + PBEc (correlation) [31]

(Expert option!) This key handles which XC functional is used during the Dirac calculations of the reference atoms. A string is expected which is not restricted to names of GGAs but can be LDA-like functionals, too.

Note: In some cases using a GGA functional leads to slow convergence of matrix elements of the kinetic energy operator w. r. t. the Accuracy parameter. Then one can use the LDA potential for the calculation of the reference atom instead.


Key to select the evaluation of a meta-GGA. A byproduct of this option is that the bonding energies of all known functionals are printed (using the same density). Meta-GGA calculations can be time consuming, especially when active during the SCF.

Self consistency of the meta-GGA is implemented as suggested by Neuman, Nobes, and Handy.[11]

The available functionals of this type are:

  • TPSS: The 2003 meta-GGA [15]
  • M06L: The meta-GGA as developed by the Minesota group [16]
  • revTPSS: The 2009 revised meta-GGA [26]

Dispersion Correction

In BAND parameters for Grimme3 and Grimme3 BJDAMP can be used according to version 3.1 (Rev. 1) of the coefficients, published on the Bonn website.

DISPERSION Grimme3 BJDAMP {PAR1=par1 PAR2=par2 PAR3=par3 PAR4=par4}

If this key is present a dispersion correction (DFT-D3-BJ) by Grimme [42] will be added to the total bonding energy, gradient and second derivatives, where applicable. Parametrizations are implemented e.g. for B3LYP, TPSS, BP86, BLYP, PBE, PBEsol [14] , and RPBE. It has four parameters. One can override these using PAR1=.. PAR2=.., etc. In the table the relation is shown between the parameters and the real parameters in the dispersion correction.

variable variable on Bonn website
PAR1 s6
PAR2 a1
PAR3 s8
PAR4 a2
DISPERSION Grimme3 {PAR1=par1 PAR2=par2 PAR3=par3}

If this key is present a dispersion correction (DFT-D3) by Grimme [41] will be added to the total bonding energy, gradient and second derivatives, where applicable. Parametrizations are available e.g. for B3LYP, TPSS, BP86, BLYP, revPBE, PBE, PBEsol [14], and RPBE, and will be automatically set if one of these functionals is used. For all other functionals, PBE-D3 parameters are used as default. You can explicitly specify the three parameters.

variable variable on Bonn website
PAR1 s6
PAR2 sr,6
PAR3 s8
Dispersion {s6scaling RSCALE=r0scaling}
If the DISPERSION keyword is present a dispersion correction will be added to the total bonding energy, where applicable. By default the correction of Grimme is applied.[32] The term is added to the bonding energies of all printed functionals, here the LDA and a couple of GGAs are meant. The global scaling factor, with which the correction is added, depends on the XC functional used for SCF but it can be modified using the s6scaling parameter. The following scaling factors are used (with the XC functional in parentheses): 1.20 (BLYP), 1.05 (BP), 0.75 (PBE), 1.05 (B3LYP). In all other cases a factor 1.0 is used unless modified via the s6scaling parameter. The van der Waals radii, used in this implementation, are hard-coded. However, it is possible to modify the global scaling parameter for them using the RSCALE=r0scaling argument. The default value is 1.1 as proposed by Grimme.[32]

Model Potentials


Some functionals give only a potential and have no energy expression. We call such functionals model potentials. In BAND the following model potentials are available:

With this model the asymptotically correct potential of van Leeuwen and Baerends is invoked.[10]

This model potential can be used to correct for the band gap problem with GGAs for bulk systems.[44] This potential depends on a c-factor for which there is a density dependent automatic expression. However you can override the automatic value by specifying XC%TB_mBJCFactor cfac. In principle: the bigger the value the larger the gap. KTB-mBJ/JTS-mTB-mBJ are variations of TB-mBJ. The formula for C contains three parameters: A,B, and E. The logic is as follows

potential A B E
TB-mBJ[44] -0.012 1.023 0.5
KTB-mBJ[54] 0.267 0.656 1.0
JTS-mTB-mBJ[55] 0.4 1.0 0.5

The three parameters (A,B, and E) can be user-defined set as follows:

   Model TB_mBJ
   TB_mBJAFactor valA
   TB_mBJBFactor valB
   TB_mBJEFactor valE
This parameter-free functional models the derivative discontinuity.[49]

Non-Collinear Approach

(Default=CollinearZ) Most XC functionals have as one ingredient the spin polarization. Normally the direction of the spin quantization axis is arbitrary and conveniently chosen to be the z-axis. However, in a spin-orbit calculation the direction matters, and it is arbitrary to put the z-component of the magnetization vector into the XC functional. It is also possible to plug the size of the magnetization vector into the XC functional. This is called the non-collinear approach. There is also the exotic option to choose the quantization axis along the x or y axis. To summarize, the value NonCollinear invokes the non-collinear method. The other three option CollinearX, CollinearY and CollinearZ causes either the x, y, or z component to be used as spin polarization for the XC functional.

LibXC Library Integration

LibXC functional

LibXC is a library of approximate XC functionals, see Ref. [63]. The development version 3 of LibXC is used. See the LibXC website for the complete list of functionals:

The following functionals can be evaluated with LibXC (incomplete list):

  • LDA: LDA, PW92, TETER93
  • MetaGGA: B97M-V, M06-L, M11-L, MN12-L, MS0, MS1, MS2, MVS, PKZB, TPSS
  • Hybrids (only for non-periodic systems): B1LYP, B1PW91, B1WC, B3LYP, B3LYP*, B3LYP5, B3LYP5, B3P86, B3PW91, B97, B97-1 B97-2, B97-3, BHANDH, BHANDHLYP, EDF2, MB3LYP-RC04, MPW1K, MPW1PW, MPW3LYP, MPW3PW, MPWLYP1M, O3LYP, OPBE, PBE0, PBE0-13, REVB3LYP, REVPBE, RPBE, SB98-1A, SB98-1B, SB98-1C, SB98-2A, SB98-2B, SB98-2C, SOGGA11-X, SSB, SSB-D, X3LYP
  • MetaHybrids (only for non-periodic systems): B86B95, B88B95, BB1K, M05, M05-2X, M06, M06-2X, M06-HF, M08-HX, M08-SO, MPW1B95, MPWB1K, MS2H, MVSH, PW6B95, PW86B95, PWB6K, REVTPSSH, TPSSH, X1B95, XB1K
  • Range-separated (for periodic systems, only short range-separated functionals can be used, see Range-separated hybrid functionals): CAM-B3LYP, CAMY-B3LYP, HJS-PBE, HJS-PBESOL, HJS-B97X, HSE03, HSE06, LRC_WPBE, LRC_WPBEH, LC-VV10, LCY-BLYP, LCY-PBE, M11, MN12-SX, N12-SX, TUNED-CAM-B3LYP, WB97, WB97X, WB97X-V

Example usage for the MVS functional:



  • All electron basis sets should be used (see CORE NONE in section Basis set).
  • For periodic systems only short range-separated functionals can be used (see Range-separated hybrid functionals)
  • In case of LibXC the output of the BAND calculation will give the reference for the used functional, see also the LibXC website
  • Do not use any of the subkeys LDA, GGA, METAGGA, MODEL in combination with the subkey LIBXC.
  • One can use the DISPERSION key icw LIBXC. For a selected number of functionals the optimized dispersion parameters will be used automatically, please check the output in that case.

Range-separated hybrid functionals

Short range-separated hybrid functionals, like the HSE03 functional [62], can be useful for prediction of more accurate band gaps compared to GGAs. These must be specified via the LibXC key

   LibXC functional {omega=value}
The functional to be used. (Incomplete) list of available functionals: HSE06, HSE03, HJS-B97X, HJS-PBE and HJS-PBESOL (See the LibXC website for a complete list of available functionals).
Optional. You can optionally specify the switching parameter omega of the range-separated hybrid. Only possible for the HSE03 and HSE06 functionals (See [62]).


  • Hybrid functionals can only be used in combination with all-electron basis sets (see CORE NONE in section Basis set).
  • The Hartree-Fock exchange matrix is calculated through a procedure known as Resolution of the Identity (RI). See RIHartreeFock key.
  • Regular hybrids (such as B3LYP) and long range-separated hybrids (such as CAM-B3LYP) cannot be used in periodic boundary conditions calculations (they can only be used for non-periodic systems).
  • There is some confusion in the scientific literature about the value of the switching parameter \(\omega\) for the HSE functionals. In LibXC, and therefore in BAND, the HSE03 functional uses \(\omega=0.106066\) while the HSE06 functional uses \(\omega=0.11\).

Usage example:

   LibXC HSE06 omega=0.1

Defaults and special cases

  • If the XC key is not used, the program will apply only the Local Density Approximation (no GGA terms). The chosen LDA form is then VWN.
  • If only a GGA part is specified, omitting the LDA subkey, the LDA part defaults to VWN, except when the LYP correlation correction is used: in that case the LDA default is Xonly: pure exchange.
  • The reason for this is that the LYP formulas assume the pure-exchange LDA form, while for instance the Perdew-86 correlation correction is a correction to a correlated LDA form. The precise form of this correlated LDA form assumed in the Perdew-86 correlation correction is not available as an option in ADF but the VWN formulas are fairly close to it.
  • Be aware that typing only the subkey LDA, without an argument, will activate the VWN form (also if LYP is specified in the GGA part).


A special way to treat correlation is with so-called LDA+U, or GGA+U calculations. It is intended to solve the band gap problem of traditional DFT, the problem being an underestimation of band gaps for transition-metal complexes. A Hubbard like term is added to the normal Hamiltonian, to model on-site interactions. In its very simplest form it depends on only one parameter, U, and this is the way it has been implemented in BAND. The energy expression is equation (11) in the work of Cococcioni.[47] See also the review article [46].

HubbardU (block-type)

Key to control the GGA+U calculation:

   Enabled          [false | true]
   UValue           u1 u2 ...
   lValue           l1 l2 ...
   {PrintOccupations [true | false]}
(Default: false) Whether or not to apply the Hubbard Hamiltonian
For each atom type specify the U value [atomic units]. A value of 0.0 is interpreted as no U.
For each atom type specify the l value (0 - s orbitals, 1 - p orbitals, 2 - d orbitals). A negative value is interpreted as no l-value.
(Default: true) Whether or not to print the occupations during the SCF.

An example to apply LDA+U to the d-orbitals of NiO looks like

   printOccupations true
   Enabled          true
   uvalue           0.3 0.0
   lvalue           2   -1

   0.000  0.000  0.000

   2.085  2.085  2.085

Spin polarization

By default BAND calculations are spin-restricted. To perform a spin-unrestricted calculation you should include the Unrestricted key:


Be aware that spin-unrestricted calculations are computationally roughly twice as expensive as spin-restricted.


(Expert options) When you are using a meta-GGA you are by default using a generalized Kohn-Sham method. However, it is possible to calculate a local potential, as is required for a strict Kohn-Sham calculation, via OEP, (see [67]).

The main options are controlled with the MetaGGA subkey of the XC block if OEP is present.

   MetaGGA GGA OEP {approximation} {Fit} {Potential}
specifies the name of the used meta-GGA. In combination with OEP only PBE, TPSS, MVS, MS0, MS1, MS2, and SCAN can be used!
(Default: KLI) There are three flavors to approximate the OEP: KLI, Slater, and ELP
By adding the string Fit on this line, one uses the fitted density instead of the exact density for the evaluation.
If not specified, only the tau-dependent part of the OEP is evaluated and used. By adding the string Potential in addition the tau-independent part is added to the XC potential. (This is needed e.g. for plotting the ‘vxc’)

With the following subkeys of the XC blockkey you have extra control over the iterative OEP evaluation:

(Default: 30) defines the maximum number of cycles for the iterative OEP evaluation.
(Default: 1E-6) defines convergence criterion for OEP evaluation.
(Default: 0) defines the number of SCF cycles with the regular meta-GGA before switching to the OEP scheme.
(Default: 0) defines number of cycles for which the error is allowed to increase before the calculation is aborted. Here, zero means: do never abort.
(Default: 0.0) defines the maximum rate of increasing error before the calculation is aborted. Here, zero means: do never abort.

An example for an OEP metaGGA calculation


Note that a very fine Becke grid is needed.

   Quality USER
   UserRadMulFactor 20.0
   UserCoreL 11
   UserInter1L 13
   UserInter2L 21
   UserExterL 31
   UserExterLBoost 35

Note also: the gaps are typically not closer to experiment, and the calculations are more expensive. This option is mainly about academic interest.