VASP编译安装教程
# 简介
VASP 全称 Vienna Ab-initio Simulation Package。它是维也纳大学 Hafner 小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包。它是目前材料模拟和计算物质科学研究中最流行的商用软件之一。
官网地址:传送门 (opens new window)。
截止目前(2017.4.22)的最新版本:VASP5.4.4简介 (opens new window)。
下载:商业软件,需要购买版权。
# 编译环境
VASP是FOTRAN语言编写的程序,需要先编译,然后才能运行可执行程序。
因此,需要安装编译器:
以及MPI编译器(如果需要并行计算):
以及CUDA编译环境(如果需要GPU加速):
安装neb版本需要下载额外的vtstcode:
# 编译方法
我们购买VASP后会得到它的源码包,例如vasp5.4.4.tar.gz
。在此我们介绍在linux平台下使用 intel compiler
及 mpich
编译VASP的方法。
# 加载编译环境
不同的平台,编译器的安装及加载方式不同,在此给出最常见的加载方式:
# only on ln2 (192.168.2.4)
source /opt/intel2015/bin/compilervars.sh intel64
export PATH=/usr/local/mpi-intel2015/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi-intel2015/lib:$LD_LIBRARY_PATH
2
3
4
# 安装包配置
假设安装包 vasp.5.4.4.tar.gz
存放在用户根目录下,我们进入根目录,解压缩安装包,并进入解压后的目录:
cd ~
tar zxvf vasp.5.4.4.tar.gz
cd vasp.5.4.4
2
3
# 修改makefile文件
我们从arch
文件夹拷贝一个配置文件到当前目录,然后根据当前系统环境进行适当修改。
cp ./arch/makefile.include.linux_intel makefile.include
简要分析makefile.include,说几个我们可能会修改的部分吧:
# 预处理配置参数CPP_OPTIONS
# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
-DMPI -DMPI_BLOCK=8000 \
-Duse_collective \
-DscaLAPACK \
-DCACHE_SIZE=4000 \
-Davoidalloc \
-Duse_bse_te \
-Dtbdyn \
-Duse_shmem
2
3
4
5
6
7
8
9
10
说明:
- 这部分是一些预编译选项,以前的版本中(5.3及以前),如果我们想让vasp支持自旋轨道耦合计算,就需要调整这个参数。但从5.4.1开始,默认情况下我们就可以编译出 std 、 ncl 及 gam 版本的vasp,所以暂时不需要手动修改了。
# 编译和链接命令参数
# 修改前
FC = mpiifort
FCL = mpiifort -mkl=sequential -lstdc++
# 修改后
FC = mpif90
FCL = mpif90 -mkl=sequential -lstdc++
2
3
4
5
6
说明:
- 这部分是用来设定编译时候的编译器及链接参数。
mpiifort
是Intel IMPI
的命令,我们使用的是mpich
,所以这里需要修改一下,将以上两行中的mpiifort
修改为mpif90
# 数学库参数
MKL_PATH = $(MKLROOT)/lib/intel64
BLAS =
LAPACK =
BLACS = -lmkl_blacs_intelmpi_lp64
SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
2
3
4
5
说明
- 这部分是用来定义一些数学库的,BLAS/LAPACK之所以为空,是应为在“FCL”命令中,加入了“-mkl”这个参数,它会自动的链接所需的MKL库。 特别要指出的是,在以前的vasp版本中,BLACS变量默认是“-lmkl_blacs_openmpi_lp64”,我们需要手动修改一下,改为“-lmkl_blacs_intelmpi_lp64”,现在就不用了。因此vasp5.4以后,编译变得简单了许多。
# 编译make
直接执行make即可。
make
编译成功后会在bin文件夹下生成三个可执行文件vasp_std、vasp_ncl及vasp_gam。
# 配置运行环境
每次运行 vasp 可执行程序时,需要我们配置可执行程序的路径,以及依赖的动态库路径,如果我们是在用户根目录下编译的vasp,那么运行前请执行:
# vasp
export PATH=$HOME/vasp.5.4.4/bin:$PATH # 这个目录可以依据实际目录调整
# intel 库环境
LUSTRE=`echo $HOME | awk -F / '{print $2}'`
export LD_LIBRARY_PATH=/$LUSTRE/intel2015_lib:$LD_LIBRARY_PATH
2
3
4
5
# 编译方法(简化脚本)
以上编译的步骤,我们可以写成一个脚本进行实现,你需要的做的是:
- 将源码包
vasp.5.4.4.tar.gz
和 编译脚本make-vasp5.4.4-th1a.sh
放在统一目录下 - 执行
source make-vasp5.4.4-th1a.sh
- 等待直到编译完成(需要几十分钟)。
脚本内容就是上面介绍的几个步骤,只是用命令来实现的,建议把以下脚本内容保存为shell脚本,例如名为make-vasp5.4.4-th1a.sh
,然后上传到集群目录,并执行脚本即可。
脚本内容如下:
#!/bin/bash
# filename : make-vasp5.4.4-th1a.sh
# 检查
if [ `hostname` != 'ln2' ];then
echo "Intel compiler 2015 only on ln2, ip is 192.168.2.4"
echo "Please ssh username@192.168.2.5 and try again"
exit
fi
# 环境
LUSTRE=`echo $HOME | awk -F / '{print $2}'`
# only on ln2 (192.168.2.4)
source /opt/intel2015/bin/compilervars.sh intel64
export PATH=/usr/local/mpi-intel2015/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi-intel2015/lib:$LD_LIBRARY_PATH
# vasp
tar zxvf vasp.5.4.4.tar.gz
cd vasp.5.4.4
# cp makefile.include
cp arch/makefile.include.linux_intel makefile.include
# change makefile.include
sed -i "s/mpiifort/mpif90/" makefile.include
# make
time make 2>&1 |tee m.log
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 运行
下面举例说明如何在天河超算平台下,通过 slurm
作业管理系统,提交vasp程序。
# 准备输入文件
准备一个输入文件,如用vasp的一个标准beachmark算例。
# 编写提交脚本
编写一个名为sub.sh的脚本文件,里面写:
#!/bin/bash
# 添加动态库
LUSTRE=`echo $HOME | awk -F / '{print $2}'`
export LD_LIBRARY_PATH=/$LUSTRE/intel2015_lib:$LD_LIBRARY_PATH
# 运行算例
yhrun -N 2 -n 24 -p debug /path/to/vasp
2
3
4
5
6
参数说明如下:
参数 | 含义 |
---|---|
yhrun | slurm作业管理系统中,并行执行mpi程序的命令,类似mpirun |
-N | 任务所需的总节点数 |
-n | 任务所需的总核数 |
-p | 计算分区 |
/path/to/vasp_std | vasp_std可执行程序所在位置,请替换为实际的路径 |
vasp_std命令会自动寻找当前目录下的INCAR文件作为输入文件进行计算。
# 提交任务
使用yhbatch命令提交作业:
yhbatch -N 2 -n 24 -p debug sub.sh
# 查看结果
计算完成后会在默认的输出文件OUTCAR中生成结果文件,查看是否正确。
# 进阶
vasp的编译除了这些之外,还有几种其他的情况:
- 编译neb版本的vasp
- 编译gpu版本的vasp
- 编译只优化固定轴的vasp
- 编译支持wannier90的vasp
- 编译5.3.5及以前版本的vasp(修改makefile比较复杂)
这些内容如果有感兴趣的朋友可以联系我。