GW (G0W0)


This page describes the basic procedure, usage and scope of a G0W0 calculation. Technical details of the algorithm can be tweaked in the MBPT input block.

G0W0 is a very accurate method to obtain information about so-called charged excitations, or single-particle excitations. We refer to them as Quasi-particle energies. These are especially important to interpret and predict the outcome of direct and inverse photo-emission spectroscopy and can be used to obtain e.g. very accurate ionization potentials and electron affinities which gives access to the so-called fundamental gap (not to be confused with the optical gap).

At the moment, ADF only implements non-self-consistent GW, i.e. G0W0 [1]. Self-consistent GW is an order of magnitude more expensive than G0W0 and thus it is used less frequently. Should not be used for open shell systems or icw spin-orbit coupling.

A G0W0 calculation as implemented in ADF proceeds in five steps. This is also known as the as G0W0 space-time method. Our implementation is closely related to the scheme outlined in [4].

  • A DFT single-point calculation is performed. This can be an LDA, GGA or hybrid calculation. At the moment, ADF does not support the use of LibXC and XCfun. Valid choices could be LDA, PBE, BLYP, PBE0, BHandHLYP and many more. The default is LDA. As usual, the functional to be used during the SCF is requested in the XC input block block. The following requests a G0W0 calculation with default settings using a PBE reference:

       GGA PBE
  • From the KS orbitals and orbital energies, a Green’s function (G) is evaluated and from the Green’s function the so-called independent-particle polarizability is calculated. This is done in imaginary time.

  • The polarizability is Fourier transformed to the imaginary frequency axis where the screened Coulomb potential (W) is evaluated using the Coulomb potential and the polarizability.

  • The screened Coulomb potential is Fourier transformed to imaginary time. Here, the self-energy is calculated using G and W (that why it is called GW) which gives access to spectroscopic properties.

  • The self-energy is transformed to the molecular orbital basis from where it is Fourier transformed to the imaginary frequency axis from where it is analytically continued to the complex plane. Along the real frequency axis, the quasi-particle energies are evaluated.

The G0W0 space-time method has the distinct advantage that it can be very fast, while a full frequency, conventional G0W0 calculation scales to the 6th power of the system size and is prohibitive for systems larger than a few tens of atoms. ADF used advanced density fitting options to accelerate the space-time method further and in practice nearly quadratic scaling can be reached. This enables the routine application of the method to systems of several hundreds of atoms. A G0W0 calculation (without the preceding SCF) is usually faster than a hybrid calculation. The downside of the approach is that the analytical continuation technique produces large errors (up to several eV) for core states which are in example important in X-ray spectroscopy. Thus, G0W0 should only be used to predict quasi-particle energies for states in the valence-region.

The states of interest can be requested in the GW block:

  nStates 5

is the default and calculates 5 occupied and five unoccupied states.

  nStates 1

calculates the HOMO and LUMO quasi-particle energy only.


Basis sets and recommended numerical settings

It is advised to perform all-electron G0W0 calculations since core-correlation is in principle important for good quasi-particle energies Note, that this does not always need to be the case and when major speed-ups can be achieved by freezing the core it might still be a good idea to do so. Indication that frozen core errors are usually negligible is provided by Bruneval et. al. [2] We recommend to use NumericalQuality Good and FitsetQuality Normal in the RIHartreeFock or MBPT block.

It is also recommended to use large basis sets since quasi-particle energies converge very slowly with respect to the basis set size. [3] Which basis set to use depends on the quantity of interest. For ionization potentials, TZ2P is a minimum requirement for quantitative accuracy. Quadruple-zeta (QZ) quality is preferred. When QZ4P is too expensive, the smaller ET/ET-QZ3P basis set is a good compromise. In case QP HOMO-LUMO gaps are of interest, it is recommended to use augmented basis sets, since they usually overestimate HOMO and LUMO level rather consistently. Already aug-DZP is a reasonable choice and often provides accuracies of 0.1 eV with respect to the basis set limit. aug-TZP and aug-TZ2P can be used as well. Note, however, that a aug-DZP calculation is usually more expensive than a TZ2P calculation. and the cost of aug-TZP/TZ2P is rather comparable to QZ calculations.

Using QZ and augmented basis sets, it can happen that linear combinations of basis functions become almost linearly dependent. To ensure numerical stability, these linear combinations need to be removed during the SCF. This is controlled inside the DEPENDENCY block. While in ADF the default is 1e-4, for G0W0 calculations, a default of 1e-03 is often more appropriate for QZ and augmented basis sets. This is a safe choice, in the sense that it ensures numerical stability in most cases but does not truncate the basis set size too much. Still, one should be aware that this value already corresponds to a drastic truncation of the virtual space. In case, one wants to avoid this truncation, one might specify e.g.

   BAS 1e-04

For an example job with the recommended settings, see: Example job: $ADFHOME/examples/adf/GW_Phenol

Choosing the KS reference

As for ground-state properties, it is far from trivial to recommend a universal functional. However, for G0W0 calculations, a few general guidelines can be offered. First, it should be noted, that using a GGA functional (we denote that as G0W0@GGA) will lead to a faster calculation (roughly a factor of 2 regarding the total calculation time, but obviously highly system dependent) than using a hybrid functional (G0W0@hybrid). A popular choice is G0W0@PBE which usually gives good accuracies while being reasonably fast: In our implementation, a G0W0@PBE calculation is at least as fast as a range-separated hybrid calculation but will often give better ionization potentials and electron affinities in an always much less empirical way.

Using a hybrid functional is still strongly recommended in case a GGA produces a very small HOMO-LUMO gap. This can strongly affect the accuracy of the HOMO-LUMO energy and might lead to multiple solutions of the quasi-particle equations. The reason is that in this case, the quasi-particle solution is very close to a pole of the self-energy. Some examples for which this might happen are e.g. the molecules MgO, BeO, BN, CuCN, KF, LiH. Using a hybrid functional will widen the band-gap and shift the pole of the self-energy away from the quasi-particle solution. A good underlying functional is PBE0, also BHandHlyp might be a good alternative, which mixes 50 % exact exchange with 50 % B88 exchange. For an in-depth discussion see [2].

In case of a very small HOMO-LUMO gap, it might also be a good solution to increase the accuracy of imaginary time and imaginary frequency treatment. How this can be done is explained in the MBPT input block.


Indication that something went wrong with your G0W0 calculation can be provided by the final QP energies. While you might often only be interested in the HOMO-lUMO gap it is usually a good idea to print out more higher- and lower lying QP states and verify that nothing looks suspicious. In case of a GGA reference, you should see that all unoccupied QP states are shifted to higher energies and all unoccupied states are shifted to lower energies. Very inconsistent shifts, so that the energetic ordering of states is changed much, is also indication that something went wrong. A clear sign that you result might not be accurate is also when the message Pade: one or more coefficients are NaN pops up. This means that the self-energy on the imaginary frequency axis is not accurate enough for analytical continuation, i.e. is oscillating strongly.

All of this this usually indicates that the virtual part of the density matrix after the SCF is not accurate enough. In case the recommended numerical settings fail, you might try to use higher NumericalQuality settings or FitsetQuality. If this fails as well, you might try to adjust the dependency key to a lower value, i.e. Dependency bas=5e-03. As a last resort, you can also try to change the FitsetQuality in the MBPT block to VeryGood.

   nStates integer
Description:Instruct ADF to perform a G0W0 calculation.
Default value:5
GUI name:N states
Description:Number of Quasiparticle States to be printed to output. The default is 5 states which in this case means that min(5, Number of particle states) occupied and min(5, Number of hole states) hole states are printed’


[1]Arno Förster, Lucas Visscher, Low-order scaling G0W0 by pair atomic density fitting, (2020)
[2](1, 2) F. Bruneval, M.A.L., Marques, Benchmarking the starting points of the GW approximation for molecules, Journal of Chemical Theory and Computation 9 (1), 324-329 (2013)
[3]M.J. Van Setten, F. Caruso S. Sharifzadeh X. Ren M. Scheffler F. Liu J. Lischner L. Lin J. Deslippe S.G. Louie C. Yang F. Weigend J.B. Neaton F. Evers P. Rinke, GW100: Benchmarking G0W0 for Molecular Systems, Journal of Chemical Theory and Computation 11 (12), 5665-5687 (2015)
[4]J. Wilhelm, D. Golze, L. Talirz, J. Hutter, C.A. Pignedoli, Toward GW Calculations on Thousands of Atoms, Journal of Physical Chemistry Letters 9 (2), 306-312 (2012)