配置VASP和一些重要工具(vaspkit、VTST)

Last Updated: 2026-02-02

编译VASP

【写在前面:一定要检查自己的make、cmake、gcc、g++、gfortran等编译所需要的最基本的程序包有没有安装好,否则无法编译VASP。】

编译的简要步骤为:将arch文件夹里你希望选择的makefile.include选项的文件复制到软件包主目录下并去掉注释性后缀(即更名为makefile.include),然后仔细检查里面的各种参数(必要时修改),最后执行 make DEPS=1 -jN all 即可(N指编译所用核数;此处使用“-j N”并行时“DEPS=1”不能漏写)。

–2026-04-07补充–

下面针对典型套餐的简要编译说明现在在我看来均已不是最优解;个人目前最为推荐的针对最新版VASP的编译搭配是 GNU编译器(GCC)+Intel MKL。arch里只提供了GCC + OpenMPI + OpenMP + MKL的套餐,其一在于绑定了OpenMP支持(但对VASP没有什么使用价值),其二在于只兼容了OpenMPI(Intel MKL针对OpenMPI和MPICH/Intel MPI链接的BLAS库不同)。这里给一个我自己电脑上用GCC + MPICH + 不绑定OpenMP + MKL + HDF5(额外可选支持,你若不需要可以全部注释掉)的makefile.include:

# Default precompiler options
CPP_OPTIONS = -DHOST=\"LinuxGNU\" \
              -DMPI -DMPI_BLOCK=8000 -Duse_collective \
              -DscaLAPACK \
              -DCACHE_SIZE=4000 \
              -Davoidalloc \
              -Dvasp6 \
              -Dtbdyn \
              -Dfock_dblbuf

CPP         = gcc -E -C -w $*$(FUFFIX) >$*$(SUFFIX) $(CPP_OPTIONS)

FC          = mpif90
FCL         = mpif90

FREE        = -ffree-form -ffree-line-length-none

FFLAGS      = -w -ffpe-summary=none

OFLAG       = -O3 -march=native -mtune=native
OFLAG_IN    = $(OFLAG)
DEBUG       = -O0

# For what used to be vasp.5.lib
CPP_LIB     = $(CPP)
FC_LIB      = $(FC)
CC_LIB      = gcc
CFLAGS_LIB  = -O
FFLAGS_LIB  = -O1
FREE_LIB    = $(FREE)

OBJECTS_LIB = linpack_double.o

# For the parser library
CXX_PARS    = g++
LLIBS       = -lstdc++

##
## Customize as of this point! Of course you may change the preceding
## part of this file as well if you like, but it should rarely be
## necessary ...
##

# When compiling on the target machine itself, change this to the
# relevant target when cross-compiling for another architecture
VASP_TARGET_CPU ?= -march=native
FFLAGS     += $(VASP_TARGET_CPU)

# For gcc-10 and higher (comment out for older versions)
FFLAGS     += -fallow-argument-mismatch

# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
#MKLROOT   ?= /path/to/your/mkl/installation
LLIBS_MKL  = -L$(MKLROOT)/lib/intel64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lm -ldl
INCS       = -I$(MKLROOT)/include/fftw

LLIBS      += $(LLIBS_MKL)

# HDF5-support (optional but strongly recommended, and mandatory for some features)
CPP_OPTIONS+= -DVASP_HDF5
#HDF5_ROOT  ?= /path/to/your/hdf5/installation
LLIBS      += -L$(HDF5_ROOT)/lib -lhdf5_fortran
INCS       += -I$(HDF5_ROOT)/include

# For the VASP-2-Wannier90 interface (optional)
#CPP_OPTIONS    += -DVASP2WANNIER90
#WANNIER90_ROOT ?= /path/to/your/wannier90/installation
#LLIBS          += -L$(WANNIER90_ROOT)/lib -lwannier

# For the fftlib library (hardly any benefit in combination with MKL's FFTs)
#CPP_OPTIONS+= -Dsysv
#FCL        += fftlib.o
#CXX_FFTLIB  = g++ -std=c++11 -DFFTLIB_USE_MKL -DFFTLIB_THREADSAFE
#INCS_FFTLIB = -I./include -I$(MKLROOT)/include/fftw
#LIBS       += fftlib
#LLIBS      += -ldl

# For machine learning library VASPml (experimental)
#CPP_OPTIONS += -Dlibvaspml
#CPP_OPTIONS += -DVASPML_USE_MKL
#CXX_ML       = mpic++
#CXXFLAGS_ML  = -O3 -std=c++17 -Wall -Wextra
#INCLUDE_ML   =

–END–

下面讲讲对于三个典型套餐(Intel全家桶、GNU标准套餐、AMD全家桶)的大致状况。

对于Intel处理器,很多教程都推荐使用Intel oneAPI + MKL,这种方法也是配置起来最简便的。对于这种方法,网上有不少配置编译VASP的教程,相差不大。唯一需要注意的是可能需要根据你所安装的Intel OneAPI版本修改“makefile.include”里面的部分内容(以v2025.0为例,修改“icc”为“icx”,“icpc”为“icpx”,“mpiifort”为“mpiifx”),以及清空MKLROOT后面的示例路径(或在整行前加#)来让编译文件读取系统默认的真实路径。另外,建议将其中的OFLAG参数里加入-xHOST,这样编译器会使得编译出的程序能够利用当前机子CPU能支持的最高档次的指令集以加速计算,可以省去一些不必要的麻烦。

根据官网的这个链接,也可以使用GCC+OpenMPI在个人计算机上进行编译。这种方法编译出来的VASP受硬件约束可能较小,但操作要稍麻烦一些,因为需要额外安装一些相关的库,并额外进行一些“makefile.include”文件的编辑工作。对于这类情况,可以参考前面的官网指南或者这里的教程来配置编译VASP。此时,上面提到的“-xhost”应当改为加“-march=native”。

对于AMD处理器,AMD也专门提供了针对其优化的AOCCAOCL。使用AOCC+AOCL以及依靠它们编译的OpenMPI编译VASP的教程见此

VASP开发者强烈建议加上HDF5的支持,此时需要注意使用的HDF5的编译环境,应与VASP的编译环境相同(即使用相同的编译器,需要在预配置HDF5时手动指定)。

VASP的DFT-D4功能通过向外链接程序包实现。如果想用DFT-D4,需要在“makefile.include”中自行加上链接到DFT-D4程序包的配置选项(见DFT-D4官网)。需要注意的是,DFT-D4程序包只支持OpenMP并行而不支持MPI并行,因此必须用含omp尾缀的makefile.include文件,且纯MPI并行中DFT-D4环节的耗时会比较显著(表现为SCF迭代完成后到显示该轮SCF最终能量前会“卡”一段时间),加之DFT-D4相比DFT-D3(BJ)的实际改进比较有限,建议在需要用色散校正的情况下优先考虑VASP自带形式的DFT-D3(BJ)。

配置vaspkit

Vaspkit是一个很方便的用作VASP预-后处理的独立程序包,由国内师生开发,对初学者强烈推荐(尤其在另一优秀的同类程序包p4vasp早已停止开发且无法在现行Linux分发中配置和使用的背景下;p4vasp的Windows版二进制可执行文件姑且在这里提供给大家,点此即可下载)。

如果需要配置vaspkit,只需从SourceForge上下载源码并按“how_to_install”文件的说明或官网说明安装即可,非常简单。

注:一定要把主文件夹“.vaspkit”文件里面PBE、LDA等(具体看你自己安装的VASP带了什么赝势库)的路径改成自己计算机里面的实际路径;为方便调用,建议将安装目录的bin文件夹写入环境变量。

配置VTST

如果你想用VASP进行反应动力学(注意不要与常说的分子动力学模拟混淆)和过渡态的计算,建议将VTST源码配置进VASP中。步骤如下:

  1. 确保VASP已经顺利编译并能通过测试,以防万一配置VTST后重新编译出现问题时难以确定问题所在。

  2. 仔细阅读并按照VTST官网的配置说明进行必要的文件修改和覆盖操作(为以防万一,建议提前备份好原有src目录下的文件)。

  3. 回到编译时的目录,输入指令make veryclean 清除之前的编译,然后重新编译。

注:

1. 在修改文件时,一定要细致注意空格和制表符留空的区别,否则在Linux下会造成文件读取方面的问题!

2. 最后一步很多教程没有特别说明“make”一步是否需要清除以前的编译,个人亲自实践表明,如果不运行“make veryclean”而直接启动编译,很快就会出现报错信息而失败中断。究其原因,主要是当你之前编译过VASP后,会生成一系列的目标文件(通常以.o结尾,比如main.o、vasp.o等)。如果不执行make veryclean,这些旧的目标文件会残留在编译目录下,在后续重新编译时,编译器可能会尝试基于这些旧目标文件进行部分编译工作,而这些旧目标文件是基于之前未配置VTST或者未进行当前相关修改的状态生成的。这就可能导致新旧配置以及修改前后的代码在函数定义、数据结构等方面不兼容,出现参数不匹配等编译错误。