Requests for technical support from the VASP group should be posted in the VASP-forum.

VdW-DF functional of Langreth and Lundqvist et al.

From Vaspwiki
Jump to navigationJump to search

The vdW-DF proposed by Dion et al.[1] is a non-local correlation functional that approximately accounts for dispersion interactions. In VASP the method is implemented using the algorithm of Roman-Perez and Soler[2] which transforms the double real space integral to reciprocal space and reduces the computational effort. Several proposed versions of the method can be used: the original vdW-DF[1], the "opt" functionals (optPBE-vdW, optB88-vdW, and optB86b-vdW) where the exchange functionals were optimised for the correlation part[3], and the vdW-DF2 of Langreth and Lundqvist groups[4].

This method is available since the version of VASP for the calculation of total energies and forces. The stress calculation for the cell optimisation (ISIF=3}) is available since the VASP version for spin unpolarised systems and VASP 5.3.1 for spin polarised systems.

N.B.: This feature has been implemented by J. Klimeš. If you make use of the vdW-DF functionals presented in this section, we ask you to cite reference [5]. Please also cite the original vdW-DF paper of Dion et al.[1] and the paper of Roman-Perez and Soler[2]. In addtion, cite the paper of Lee et al.[4] if you use the vdW-DF2 functional, the paper of Klimeš et al.[3] if you use the optB88-vdW or optPBE-vdW functionals, and any other appropriate references, such as reference[6].

Correlation functionals

The method is invoked by setting LUSE_VDW=.TRUE.. Moreover, the PBE correlation correction needs to be removed since only LDA correlation is used in the functionals. This is done by setting AGGAC=0.0000.

The two tags above need to be used for all of the following functionals, i.e.:

AGGAC = 0.0000

The flag LASPH is strongly recommended for vdW-DFT, since often vdW-DFT yields less spherical densities than standard DFT. To get reasonably accurate contributions from the spheres around the atoms, it is recommended to set this flag.

Exchange functionals

The GGA tag is further used to choose the appropriate exchange functional.

  • The original vdW-DF of Dion et al uses revPBE, therefore the vdW-DF can be chosen by setting
AGGAC = 0.0000
  • More accurate exchange functionals (optPBE, optB88, and optB86b) for the vdW correlation functional have been proposed in references [3] and [5].
For optPBE-vdW set:
AGGAC = 0.0000
For optB88-vdW set:
PARAM1 = 0.1833333333
PARAM2 = 0.2200000000
AGGAC = 0.0000
And for optB86b-vdW:
PARAM1 = 0.1234 
PARAM2 = 1.0000
AGGAC = 0.0000
  • In the vdW-DF2 functional the rPW86 exchange functional is used (GGA=ML). Moreover, the vdW functional needs to be changed to the vdW2 correlation which requires only a change of a parameter (J. Klimeš) Zab_vdW=-1.8867.
Therefore to use vdW-DF2, set:
Zab_vdW = -1.8867
AGGAC = 0.0000
  • The rev-vdW-DF2 functional of Hamada, also known as vdW-DF2-B86R, can be selected by setting [7]:
GGA      = MK
PARAM1   = 0.1234
PARAM2   = 0.711357
Zab_vdW  = -1.8867
AGGAC    = 0.0000
  • To select the SCAN + rVV10 functional of Peng et al. [8] set:
BPARAM = 6.3     # default but can be overwritten by this tag
CPARAM = 0.0093  # default but can be overwritten by this tag
Presently, it is not possible to combine SCAN with vdW-DFT functionals other than rVV10.
NOTE: As of vasp.6.2 (and prior version) the stress tensor seems to be broken for rVV10. It is correct for other vdW-DF though.

An overview of the performance of different approaches can be found for example in [3][4] for gas phase clusters and in [5] for solids.

Important remarks

  • The method needs a precalculated kernel which is distributed via the VASP download portal (VASP -> src -> vdw_kernel.bindat) and on the ftp server (vasp5/src/vdw_kernel.bindat). If VASP does not find this file, the kernel will be calculated. This, however, is a rather demanding calculation. The kernel needs to be either copied to the VASP run directory for each calculation or can be stored in a central location and read from there. The location needs to be set in routine PHI_GENERATE. This does not work on some clusters and the kernel needs to be copied into the run directory in such cases. The distributed file uses little endian convention and won't be read on big endian machines. The big endian version of the file is available from the VASP team.
  • There are no special POTCAR files for the vdW-DF functionals and the PBE or LDA POTCAR files can be used. Currently the evaluation of the vdW energy term is not done fully within the PAW method but the sum of the pseudo-valence density and partial core density is used. This approximation works rather well, as is discussed in [5], and the accuracy generally increases when the number of valence electrons is increased or when harder PAW datasets are used. For example, for adsorption it is recommended to compare the adsorption energy obtained with standard PAW datasets and more-electron POTCAR files for both PBE calculation and vdW-DF calculation to assess the quality of the results.
  • The spin polarised calculations are possible, but strictly speaking the non-local vdW correlation is not defined for spin-polarized systems. For a spin-polarized calculation the non-local vdW correlation energy is evaluated on the sum of the spin-up and spin-down densities.
  • The evaluation of the vdW energy requires some additional time. Most of it is spent on performing FFTs to evaluate the energy and potential. Thus the additional time is determined by the number of FFT grid points in the calculation, basically the size of the simulation cell. It is almost independent on the number of the atoms in the cell. Thus the relative cost of the vdW-DF method depends on the "filling" of the cell and increases with the amount of vacuum in the cell. The relative increase is high for isolated molecules in large cells, but small for solids in smaller cells with many k-points.

Related Tags and Sections


see also the alternative pair and many body dispersion corrections: IVDW, LVDW

Examples that use this tag