libvdwxcΒΆ
libvdwxc is a library which provides fast and scalable implementations of non-local van der Waals density functionals in the vdW-DF family. To use libvdwxc, you need to install it and compile GPAW with it. libvdwxc can be used with other semilocal functionals like optPBE, optB88, and BEEF-vdW.
Install libvdwxc, making sure that its dependencies FFTW3 and FFTW3-MPI are available on the system. For truly large systems, you may install PFFT to achieve better scalability, but FFTW3-MPI may well be more efficient except for very large systems.
Currently there is no stable libvdwxc release yet. Clone the project from git and install manually.
Run a calculation as follows:
from ase.build import molecule
from gpaw import GPAW
from gpaw.xc.libvdwxc import vdw_df_cx
atoms = molecule('H2O')
atoms.center(vacuum=3.0)
calc = GPAW(xc=vdw_df_cx())
atoms.calc = calc
atoms.get_potential_energy()
libvdwxc will automatically parallelize with as many cores as are
available for domain decomposition. If you parallelize over k-points
or bands, and especially if you use planewave mode, be sure to pass
the parallelization keyword augment_grids=True
to make use of all
cores including those for k-point and band parallelization.
Here is a more complex example:
from ase.build import bulk
from gpaw import GPAW, PW
from gpaw.xc.libvdwxc import vdw_df_cx
# "Large" system:
atoms = bulk('Cu').repeat((2, 2, 2))
calc = GPAW(mode=PW(600),
kpts=(4, 4, 4),
xc=vdw_df_cx(mode='pfft', pfft_grid=(2, 2)),
parallel=dict(kpt=4, augment_grids=True))
atoms.calc = calc
atoms.get_potential_energy()
Normally you should probably not bother to set pfft_grid as it is chosen automatically.