top of page

Compile VASPsol codes into VASP

VASPsol, developed by Kiran Mathew and Dr. Richard Hennig (, is an implicit solvation model that describes the effect of electrostatics, cavitation, and dispersion on the interaction between a solute and solvent into the plane-wave DFT code VASP (v. 5.2+).

It provides a efficient approach to estimate the solvation effects for large periodic systems (e.g. catalyst surfaces) with good interoperability with standard ultrasoft pseudopotential and projector-augmented wave potential libraries. For publication purposes, please cite the following papers:

  • Implicit solvation model for density-functional study of nanocrystal surfaces and reaction pathways. K. Mathew, R. Sundararaman, K. Letchworth-Weaver, T. A. Arias, and R. G. Hennig, J. Chem. Phys. 140, 084106 (2014), [doi:10.1063/1.4865107] (

  • Implicit self-consistent electrolyte model in plane-wave density-functional theory. K. Mathew, V. S. C. Kolluru, S. Mula, S. N. Steinmann, and R. G. Hennig, J. Chem. Phys. 151, 234101 (2019), [doi:10.1063/1.5132354] (

Three steps for the compilation of VASPsol

1. Prepare the makefile for normal VASP compilation

Copy one of the makefile.include.arch files in /your_VASP_directory/arch to /your_VASP_directory/makefile.include. Take one that most closely reflects your system (hopefully):

cp /your_VASP_directory/arch/makefile.include.linux_intel  /your_VASP_directory/makefile.include

and make modifications based on the requirements of your complier (for more information, please refer to, including but not limited to the following settings:

FC = mpifort
FCL = mpifort -mkl=sequential -lstdc++
MKL_PATH = /software/intel/2019.5/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64

Make sure that the make.include can successfully compile normal VASP codes.

2. Add the VASPsol codes into VASP codes

  • Download VASPsol from

  • For VASP >= 5.4.4, update the solvation routines by

cp /your_VASPsol_directory/src/solvation.F* /your_VASP_directory/src/.
  • To ensure the solvation module's compatibility with the newer versions of vasp please add **-Dsol_compat** option to the list of precompiler options(CPP_OPTIONS) in the makefile (attached a makefile.include in Section 3).

  • For VASP 5.4.1 and 6+, see below:

---Specifically for VASP 5.4.1---
- To compute the FERMI_SHIFT as mentioned in the documentation in the VASPsol webpage, minor modification is required to the pot.F file. This can be done by cp /your_VASPsol_directory/src/patches/pbz_patch_541 /your_VASP_directory/src/.
- patch src/pot.F < <path to the pbz_patch_541 patch file>
--- Specifically for VASP 6+---
For VASP6 versions >= 6.1.0, there is currently a patch in /your_VASPsol_directory/src/patches/VASPsol6.patch. This patch applies the FERMI_SHIFT patch to the pot.F as well as providing additional subroutines.
- copy solvation.F from path_to_VASPsol/src/solvation.F to path_to_VASP6_install/src/
- Navigate to path_to_VASP6_install/src/ and modify the .objects file by ensuring that “solvation.o” appears before “pot.o”
- Set the CPP option "-Dsol_compat" in the VASP makefile.include file.
- Compile the code as described in the instructions on the VASP wiki.
- cd vasp.6.1.0 and patch -p0 < <path to the pbz_patch_610 patch file>

3. Build VASP with VASPsol codes

When you've finished setting up makefile.include, build VASP:

make all


make gam # or std, ncl

Below is an example of the makefile.include on the Quest HPC Cluster at Northwestern University (Take vasp 5.4.4 as an example):

# Precompiler options
             -DMPI -DMPI_BLOCK=8000 \
             -Duse_collective \
             -DscaLAPACK \
             -DCACHE_SIZE=4000 \
             -Davoidalloc \
             -Duse_bse_te \
             -Dtbdyn \
             -Duse_shmem \
             -Dsol_compat # For VASPsol
CPP        = fpp -f_com=no -free -w0  $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
FC         = mpifort
FCL        = mpifort -mkl=sequential -lstdc++
FREE       = -free -names lowercase
FFLAGS     = -assume byterecl -w
OFLAG      = -O3
DEBUG      = -O0
MKL_PATH   = /software/intel/2019.5/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64
BLAS       =
LAPACK     =
BLACS      = -lmkl_blacs_openmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
OBJECTS    = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o
INCS       =-I$(MKLROOT)/include/fftw
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
OBJECTS_O2 += fft3dlib.o
# For what used to be vasp.5.lib
CPP_LIB    = $(CPP)
FC_LIB     = $(FC)
CC_LIB     = icc
OBJECTS_LIB= linpack_double.o getshmem.o
# For the parser library
CXX_PARS   = icpc
LIBS       += parser
LLIBS      += -Lparser -lparser -lstdc++
# # Normally no need to change this
SRCDIR     = ../../src
BINDIR     = ../../bin

If the compilation ends normally, it will generate three executable files under /your_VASP_directory/bin/:

vasp_gam  vasp_ncl  vasp_std
LSOL = .TRUE. # In the simplest case the only parameter that needs to be set is the solvation flag 
EB_K = 80 # Dielectric constant for the solvent
EB_k = 78.4 # The relative permittivity of the solvent can be changed 
TAU = 0 # You can also change the surface tension parameter tau in the INCAR file. For example, to neglect the the cavitation energy contribution, set in the INCAR file. Note that you may have to increase the cutoff energy to converge the caviation energy because the grid must be fine enough to resolve the cavity surface.
LRHOB = .TRUE. # If you would like to write out the bound charge density in the CHGCAR format. The file is named RHOB. 
LAMBDA_D_K  = # Set LAMBDA_D_K (the Debye length in Angstroms) parameter in the INCAR file to use the linearized Poisson-Boltzmann model(electrolyte model)


If you found this tutorial helpful, consider joining our community by making a donation. Your support will enable me to continue creating valuable content while also supporting my baby's care. Together, we can make a meaningful impact. Thank you!


bottom of page