简介

VASP 全称 Vienna Ab-initio Simulation Package。它是维也纳大学 Hafner 小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包。它是目前材料模拟和计算物质科学研究中最流行的商用软件之一。

官网地址:传送门

截止目前(2017.4.22)的最新版本:VASP5.4.4简介

下载:商业软件,需要购买版权。

编译环境

VASP是FOTRAN语言编写的程序,需要先编译,然后才能运行可执行程序。

因此,需要安装编译器: - GNU Compiler - INTEL Compiler

以及MPI编译器(如果需要并行计算): - MPICH - OPENMPI

以及CUDA编译环境(如果需要GPU加速): - CUDA

安装neb版本需要下载额外的vtstcode: - Transition State Tools for VASP

编译方法

我们购买VASP后会得到它的源码包,例如vasp5.4.4.tar.gz。在此我们介绍在linux平台下使用intel compiler 及 mpich 编译VASP的方法。

加载编译环境

不同的平台,编译器的安装及加载方式不同,在此给出最常见的加载方式:

source /opt/intel/composer_xe_2013.0.079/bin/iccvars.sh intel64
source /opt/intel/composer_xe_2013.0.079/bin/ifortvars.sh intel64
source /opt/intel/composer_xe_2013.0.079/mkl/bin/mklvars.sh intel64

说明: 前两行为加载icc(包括icpc等)及ifort编译器。使用source命令,加载编译器安装路径下的的sh脚本,并给出intel64参数,表明是64位操作系统。 第三行与之前的类似,加载intel的MKL数学库,因为接下来会用到它。 注意修改为自己的intel编译器路径。

export PATH=/usr/local/mpi-intel2013/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi-intel2013/lib:$LD_LIBRARY_PATH

说明: 第一行为使用 export 命令,声明环境变量 PATH ,它是用来寻找可执行命令路径的环境变量。先给出mpich的安装路径下的bin目录,然后在用 “$” 符号引用 PATH 变量。意味着给 PATH 变量增加一个搜索路径,这样子就能找到我们需要的例如 mpif90命令了。 第二行与第一行类似, LD_LIBRARY_PATH 声明的是加载动态库的路径。 注意修改为自己的mpi编译器路径。

修改makefile文件

tar zxvf vasp.5.4.4.tar.gz
cd vasp.5.4.4
cp ./arch/makefile.include.linux_intel makefile.include

简要分析makefile.include,说几个我们可能会修改的部分吧:

# Precompiler options                 
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
             -DMPI -DMPI_BLOCK=8000 \
             -Duse_collective \
             -DscaLAPACK \
             -DCACHE_SIZE=4000 \
             -Davoidalloc \
             -Duse_bse_te \
             -Dtbdyn \
             -Duse_shmem

这部分是一些预编译选项,以前的版本中(5.3及以前),如果我们想让vasp支持自旋轨道耦合计算,就需要调整这个参数。但从5.4.1开始,默认情况下我们就可以编译出 std 、 ncl 及 gam 版本的vasp,所以暂时不需要手动修改了。

FC         = mpiifort
FCL        = mpiifort -mkl=sequential -lstdc++

这部分是用来设定编译时候的编译器及链接参数。mpiifort是intel mpi的命令,我们使用的是mpich,所以这里需要修改一下,将以上两行中的“mpiifort”修改为“mpif90”

MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =
LAPACK     =
BLACS      = -lmkl_blacs_intelmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

这部分是用来定义一些数学库的,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。

运行

下面举例说明如何在天河超算平台下,通过slurm作业管理系统,提交vasp程序。

准备输入文件

准备一个输入文件,如用vasp的一个标准beachmark算例。

编写提交脚本

编写一个名为sub.sh的脚本文件,里面写:

#!/bin/bash  
yhrun -N 2 -n 24 -p debug /path/to/vasp

参数说明如下:

参数 含义
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比较复杂)

这些内容如果有感兴趣的朋友可以给我留言。