编译 VASP with VTST
编译 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)
目录结构:
[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)
修改编译配置
修改 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)
