编译 VASP with VTST

Northword2022年2月27日
  • Install
  • 安装
大约 3 分钟

编译 VASP with VTST

准备源码

VASP 源码目录结构

$ more README
           vasp.X.X.X (root directory)
                      |
   ---------------------------------------
  |              |          |             |
 arch           bin       build          src
                                          |
                                     ----------
                                    |          |
                                   lib       CUDA

说明:

  • vasp.X.X.X:解压缩后的根目录
  • arch:针对不同架构的 Makefile 模板,如里面含有 makefile.include.linux_intel
  • bin:编译后的可执行程序文件
  • build:编译时自动复制 src 目录内源码后执行编译的目录
  • src:源码目录
  • lib:库目录,对应以前的 vasp.lib 目录
  • CUDA:GPU CUDA 代码目录

VTSTCode

下载并解压缩 VTSTCode

VTSTCode 下载: Download — Transition State Tools for VASP (utexas.edu)open in new window

目录结构:

[scujh_zjb@scu vtstcode-184]$ tree
.
├── bbm.F
├── bfgs.F
├── cg.F
├── chain.F
├── dimer.F
├── dynamic.F
├── dynmat.F
├── fire.F
├── instanton.F
├── lanczos.F
├── lbfgs.F
├── neb.F
├── opt.F
├── qm.F
├── sd.F
├── vtstcode5
│   ├── bbm.F
│   ├── bdr_changes
│   ├── bfgs.F
│   ├── cg.F
│   ├── chain.F
│   ├── dimer.F
│   ├── dynamic.F
│   ├── dynmat.F
│   ├── fire.F
│   ├── instanton.F
│   ├── lanczos.F
│   ├── lbfgs.F
│   ├── neb.F
│   ├── opt.F
│   ├── qm.F
│   ├── sd.F
│   ├── vasp-5.3.2-main.patch
│   ├── vasp-5.3.2-mpmd.patch
│   ├── vasp-5.4.1-mpmd.patch
│   └── vasp-5.4.4-mpmd.patch
└── vtstcode6.1
├── bbm.F
├── bfgs.F
├── cg.F
├── chain.F
├── dimer.F
├── dynamic.F
├── dynmat.F
├── fire.F
├── instanton.F
├── lanczos.F
├── lbfgs.F
├── neb.F
├── opt.F
├── qm.F
└── sd.F

2 directories, 50 files

复制 VTSTCode 到 VASP/src

需要注意的是,应把对应于 VASP 版本的 VTSTCode 复制到 scr 目录,例如 vasp 5.4.4,则应复制 vtstcode5 子文件夹中的内容。

For vasp.6.2.1 you will need vtstcode 4.1 (revision 182). A version of the vtstcode that will work with vasp.6.1.x - vasp.6.2.0 has been saved in the vtstcode6.1 directory.

修改 src/main.F

将(第 3233 行)

CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
     LATT_CUR%A,LATT_CUR%B,IO%IU6)

修改为

CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
      TSIF,LATT_CUR%A,LATT_CUR%B,IO%IU6)
!     LATT_CUR%A,LATT_CUR%B,IO%IU6)

如果是 vasp 6.2 及以上,额外修改

IF (LCHAIN) CALL chain_init( T_INFO, IO)

CALL chain_init( T_INFO, IO)

参考: Installation — Transition State Tools for VASP (utexas.edu)open in new window

修改编译配置

修改 src/.objects,在 chain.o 前(第 67 行)添加如下内容:

    bfgs.o dynmat.o instanton.o lbfgs.o sd.o cg.o dimer.o bbm.o \
    fire.o lanczos.o neb.o qm.o opt.o \

注意:\ 后不得有空格

准备编译环境

检查编译环境

which icc ifort icpc mpiifort mpirun

如果正常输出 5 个路径,则编译环境已配置好,可以跳过下一步。如果没有,进入下一步。

配置编译环境

一般的,编译 vasp+vtst 的,通常都已经编译了 vasp,那意味着编译环境本身是已经安装好的,可以通过如下重新应用编译环境的变量,具体的路径可以自行在机器上查找,或参考 vasp 的 pbs 文件中提供的路径。

# source <intel_compiler_dir>/bin/compilervars.sh intel64
# source <intel_mkl_dir>/bin/mklvars.sh intel64
# source <intel_mpi_dir>/intel64/bin/mpivars.sh intel64

部分机器使用 module 管理环境变量的,可以通过 module avail 查看所有可用包,找到 intel/xxx 相关的并 module load <name>。 配置完成后,返回上一步检查是否成功。 这里顺便检查一下有无已编译的 fftw 文件:libfftw3_mpi.a

修改 makefile.include 文件

arch/makefile.include.linux_intel 做模板进行修改

cp arch/makefile.include.linux_intel makefile.include

makefile.include 文件进行如下修改,14 行开始编译器配置改为

# line 14 编译器配置
FC         = mpiifort
FCL        = mpiifort -mkl

# line 23 数学库配置
MKLROOT=/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl
MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =
LAPACK     =
BLACS      =-L$(MKL_PATH) -lmkl_blacs_intelmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

# line 30 fftw 配置 (其中/opt/fftw 是我编译后安装的目录)
OBJECTS    = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o \
           /opt/fftw/lib/libfftw3_mpi.a
INCS       =-I/opt/fftw/include

安装

编译

make

添加环境变量

略。

错误解决

如下报错系 vtstcode 版本与 vasp 不一致导致:

mpiifort -free -names lowercase -assume byterecl -w -O2 -xHOST -I/opt/intel/compilers_and_libraries_2019.1.144/linux/mkl/include/fftw -c instanton.f90  
instanton.F(57): error #6580: Name in only-list does not exist or is not accessible. [RANE]  
USE random_seeded, ONLY: RANE  
-------------------------------^  
instanton.F(208): error #6580: Name in only-list does not exist or is not accessible. [RANE]  
USE random_seeded, ONLY: RANE  
-------------------------------^  
instanton.F(433): error #6404: This name does not have a type, and must have an explicit type. [RANE]  
w(i,j,im)=rane()-0.5_q  
----------------------------^  
compilation aborted for instanton.f90 (code 1)  
make[2]: *** [instanton.o] Error 1  
make[2]: Leaving directory `/root/chem/vasp.5.4.4/build/std'  
cp: cannot stat ‘vasp’: No such file or directory  
make[1]: *** [all] Error 1  
make[1]: Leaving directory `/root/chem/vasp.5.4.4/build/std'  
make: *** [std] Error 2

解决方案:假设使用的 vasp 5.4.4,则复制 vtstcode 时,应使用 vtst-xxx/vtstcode5 下的。参见: Problem compiling instanton.F - UT theoretical chemistry code forum (utexas.edu)open in new window

参考文献

安装过程: VASP 5.4.1+VTST 编译安装 (ustc.edu.cn)open in new window