VASP全称(Vienna Ab-initio Simulation Package),是维也纳大学Hafner小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包。
vasp是目前主流的第一性原理计算软件,它使用赝势和平面波基函数,可以计算周期性结构材料的结构参数、力学性质、电子结构、光学磁学性质等,也可以对体系进行从头算分子动力学模拟等计算。近半年VASP论文引用量800+。
目前大多数科研机构和学校都是通过购买线上超算资源来使用vasp计算,但如何部署使用软件,对于很多常用Windows系统的初学者来说不太友好。
本教程将详细介绍VASP软件在Linux系统下基本部署方法。接下来一段时间,小编会持续更新系列计算软件相关教程,以及Linux系统系统下使用科学计算软件的常用方法,希望有感兴趣、有意愿学习的朋友多关注公众号《集群计算技术》后续更新内容
安装编译环境Intel oneAPI
进入intel官网
https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/toolkits.html选择需要安装的工具包,需要安装:Base Toolkit和HPC Toolkit两部分
点击进入下载页面后,选择对应的系统的版本
执行安装脚本 :
sh ./l_BaseKit_p_2024.1.0.596_offline.sh
sh ./l_HPCKit_p_2024.1.0.560_offline.sh
建议先安装Base toolkit再安装HPC toolkit,如果不需要改配置,就一路默认选项
安装完成:默认安装路径在/opt/intel/oneapi/xxx
source /path/oneapi/setvars.sh
检查所需要的编译环境
安装部署VASP
加载编译依赖环境:
source /path/oneapi/setvars.sh
解压VASP源码包
tar -xvf vasp.6.xx.tgz
进入主目录
cd vasp.6.xx
为当前环境准备makefile.include (通过修改对应的编译配置文件选择适应系统以及编译可选功能)
cp -r arch/makefile.include.intel_omp ./makefile.include
编译选项参考修改
使用intel-oneAPI编译器+MKL数学库+intelmpi实现MPI+openmp支持多线程,主要注意注释部分的内容
# Default
precompiler options
CPP_OPTIONS
= -DHOST=\"LinuxIFC\" \
-DMPI -DMPI_BLOCK=8000
-Duse_collective \
-DscaLAPACK \
-DCACHE_SIZE=4000 \
-Davoidalloc \
-Dvasp6 \
-Duse_bse_te \
-Dtbdyn \
-Dfock_dblbuf
-D_OPENMP #vasp-6.3.2使用intelmpi-2021.3版本不支持多线程,可以根据实际加载环境版本调整。
CPP= fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
FC= mpiifort -qopenmp
FCL= mpiifort
FREE= -free -names lowercase
FFLAGS= -assume byterecl -w
OFLAG= -O2
OFLAG_IN= $(OFLAG)
DEBUG= -O0
OBJECTS= fftmpiw.o fftmpi_map.o fftw3d.o
fft3dlib.o
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
CFLAGS_LIB= -O
FFLAGS_LIB= -O1
FREE_LIB= $(FREE)
OBJECTS_LIB
= linpack_double.o
# For the
parser library
CXX_PARS= icpc
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 ?= -xHOST
#FFLAGS+= $(VASP_TARGET_CPU) ##amd平台不支持-xHOST,需要注释掉
# Intel MKL
(FFTW, BLAS, LAPACK, and scaLAPACK)
# (Note:
for Intel Parallel Studio's MKL use -mkl instead of -qmkl)
FCL+= -mkl
MKLROOT?= path/compilers_and_libraries_2020.1.217/mkl
## 修改为echo $MKLROOT的路径
LLIBS+= -L$(MKLROOT)/lib/intel64 -lmkl_scalapack_lp64
-lmkl_blacs_intelmpi_lp64
INCS=-I$(MKLROOT)/include/fftw
#
HDF5-support (optional but strongly recommended)
#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)
#FCL= mpiifort fftlib.o -qmkl
#CXX_FFTLIB= icpc -qopenmp -std=c++11 -DFFTLIB_USE_MKL
-DFFTLIB_THREADSAFE
#INCS_FFTLIB
= -I./include -I$(MKLROOT)/include/fftw
#LIBS+= fftlib
make DEPS=1 -j24 all
并行编译gam,std,ncl三个版本。
非Intel平台的优化和注意事项
-
AMD平台不支持-xHOST;-xHOST是Intel 编译器针对Intel处理器增加的编译优化选项.
perf top 查看指令集使用情况
图中显示调用了AVX2指令集
-
intelmpi-2021.3不支持编译多线程版本的vasp。报错信息如下。如需编译多线程版本,需要更换intelmpi版本。
-
VASP使用MKL库完成其中的数学运算,但该库会通过内部函数检测是否为Intel处理器,在Intel处理器上MKL库的加速效果更好。分析显示MKL使用函数mkl_serv_intel_cpu_true来检测它是否在处理真正的Intel CPU。
在intel mkl 2020版本之前可以通过使用环境变量MKL_DEBUG_CPU_TYPE=5可以使numpy运算速度再加快一些,但后续版本移除了这个变量。我们可以用自己的函数来代替它:
int
mkl_serv_intel_cpu_true() {
return 1;
}
并向其编译为共享库:
$ gcc -shared -fPIC -o libisintel.so isintel.
libisintel.so是识别cpu处理器型号的函数,AMD平台上可以加载这个库,替换掉MKL中自带的函数,把AMD识别为Intel,以更好发挥MKL数学库的计算能力。
export LD_PRELOAD=/PATH/libisintel.so
编译结果
可执行文件生成目录:
cd vasp-6.x.x/bin
参考引用:
1. https://www.vasp.at/wiki/index.php/The_VASP_Manual
2. https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/toolkits.html