编译 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)