Using DFT-D4 in Vasp

Using DFT-D4 in Vasp#

To use the D4 dispersion correction in Vasp you need to a compile the dftd4 package using the same Fortran compiler as used for Vasp and enable the API compatibility needed for linking the Vasp-side interface for dftd4. Checkout the instructions for installing dftd4 at Installing DFT-D4. To use dftd4 in Vasp the compatibility layer for the 2.5.x API has to be enable with -Dapi_v2=true (meson) or -DWITH_API_V2=ON (CMake).

Important

It is important to build dftd4 with the same Fortran compiler you build Vasp with.

After you completed the installation of dftd4, make sure it is findable by pkg-config, you can check by running:

pkg-config --modversion dftd4

If your dftd4 installation is not findable, you have to update your environment variables. One option is to provide a module file for your dftd4 installation. The example module file below can be placed in your MODULEPATH to provide access to an installation in ~/opt/dftd4/3.7.0. Retry the above comment after loading the dftd4 module and adjust the module file until pkg-config finds your installation.

-- dftd4/3.7.0.lua
local name = "dftd4"
local version = "3.7.0"
local prefix = pathJoin(os.getenv("HOME"), "opt", name, version)
local libdir = "lib"  -- or lib64

whatis("Name        : " .. name)
whatis("Version     : " .. version)
whatis("Description : Generally applicable charge dependent London dispersion correction")
whatis("URL         : https://github.com/dftd4/dftd4")

prepend_path("PATH", pathJoin(prefix, "bin"))
prepend_path("MANPATH", pathJoin(prefix, "share", "man"))
prepend_path("CPATH", pathJoin(prefix, "include"))
prepend_path("LIBRARY_PATH", pathJoin(prefix, libdir))
prepend_path("LD_LIBRARY_PATH", pathJoin(prefix, libdir))
prepend_path("PKG_CONFIG_PATH", pathJoin(prefix, libdir, "pkgconfig"))

To enable support for D4 in Vasp add the following lines to the Makefile:

CPP_OPTIONS += -DDFTD4
LLIBS       += $(shell pkg-config --libs dftd4)
INCS        += $(shell pkg-config --cflags dftd4)

Depending on how you built DFT-D4, DFT-D4’s dependencies not might be properly recognized during the VASP build. Try to explicitly add them to the link line.

CPP_OPTIONS += -DDFTD4
LLIBS       += $(shell pkg-config --libs dftd4) -lmulticharge -lmctc-lib -lmstore
INCS        += $(shell pkg-config --cflags dftd4)

```

If you still run into issues, check out VASP-related issues on the dftd4 issue tracker.