VASP 6.1.0 + VTST + intel新OneAPI 安装编译
fpp
由于intel不再更新parallel studio xe,而是用OneAPI代替,最近捣腾了一会儿把OneAPI(免费)下的MPI把VASP装了一下
直入正题:
Pre-requests:
Ubuntu 18
VASP 6.1.0
(可选)VTST revision 184
OneAPI:
首先装OneAPI (免费),Intel 官网上有安装过程。用APT来安装非常方便
在ubuntu上面是apt package manager,根据官网Ubuntu 18和20都是支持的。把pub key 和repo下载
$ cd /tmp
$ wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
$ sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
$ rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
$ echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
$ sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main"
然后就可以安装了
$ sudo apt install intel-basekit
$(可选) sudo apt install intel-hpckit
然后你会发现装在他们装在/opt/intel/oneapi/目录下
现在是重点:把intel的MPI替换系统可能装好的openMPI,运行该目录下的setvars.sh文件
$ . /opt/intel/oneapi/setvars.sh #不要忘记第一个点
这个命令非常重要,有时候你忘了设置intel的MPI而是用了linux里面的openMPI,会出现好几个VASP同时运行的情况。还是用这个命令initialize它再重新跑mpirun -np <nb of cores> vasp就好了。这个命令输出如下:
# 输出如下
:: initializing oneAPI environment ...
bash: BASH_VERSION = 4.4.20(1)-release
:: advisor -- latest
:: ccl -- latest
:: clck -- latest
:: compiler -- latest
:: dal -- latest
:: debugger -- latest
:: dev-utilities -- latest
:: dnnl -- latest
:: dpcpp-ct -- latest
:: dpl -- latest
:: inspector -- latest
:: intelpython -- latest
:: ipp -- latest
:: ippcp -- latest
:: ipp -- latest
:: itac -- latest
:: mkl -- latest
:: mpi -- latest
:: tbb -- latest
:: vpl -- latest
:: vtune -- latest
:: oneAPI environment initialized ::
vasp会用到intel的fortran compiler和preprocessor (等一下会再出现的fpp,而不是linux里面的GNU gpp),检查这个是否装好,可以输入:
$ ifort --version
# 或者
$ fpp -V
解下来就跟别的vasp安装过程一样了。如果不装VTST的同学可以跳过VTST这步
VTST(不装的可以跳到下面VASP):
需要算过渡态的同学,可以上VTST的官网下载他们的安装包。写本文的时候是vtstcode-184版本。 这个code.tgz文件需要跟VASP一起安装,scripts.tgz是一下额外的计算code,需要的时候不是跟vasp一齐用的,懂的同学应该都懂,只用vasp的就不用理了。
VTST官网上说的非常清楚,俺不照搬就好。我就多加一些注意事项。
首先,解压vasp和vtstcode
# cd到你下载vasp和vtst的地方
$ tar -xvf vasp.6.1.0.tar.gz
$ tar -xvf vtstcode-184
你会看见vtst里面有一堆fortran的code,那是给vasp6.2之后版本的。我们需要的是里面6.1 sub-folder里面的,如果你装的是5.X的就用5.X的那个。
原理都一样,你可以手动复制这些fortran到vasp里面的源代码src目录,或者:
cp -r vtstcode-184/vtstcode6.1 vasp.6.1.0/src/
然后用vim或者nano或者其他其他editor打开main.F文件加入一个参数TSIF。我的大概在3450行。你的版本可能不一样,在editor里搜一下chain force这个函数,官网示范是:
CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
LATT_CUR%A,LATT_CUR%B,IO%IU6)
# 加入TSIF,变成下面的,不要手残用tab,用5个空格
CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
TSIF,LATT_CUR%A,LATT_CUR%B,IO%IU6)
vasp6.2还要多改一个地方,具体看官网。
然后还有一个地方要改那个SOURCE参数,官网说的不太清楚,具体是一个在src目录里面的.objects文件。打开它在chain.o前插入
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 \
加完以后是这样:
#记得不要用tab,打空格,不然会编译错误。和end of line不要手残多大个空格之类的
elf.o \
hamil_rot.o \
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 \
chain.o \
dyna.o \
fileio.o \
VASP(如果不装VTST的可以直接跳到来这里):
然后回到vasp的根目录把arch里面的intel(不是omp也不是serial)makefile挪出来改名:
$ cp arch/makefile.include.linux_intel makefile.include
搬运一下里面的内容:
1 # Precompiler options
2 CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
3 -DMPI -DMPI_BLOCK=8000 -Duse_collective \
4 -DscaLAPACK \
5 -DCACHE_SIZE=4000 \
6 -Davoidalloc \
7 -Dvasp6 \
8 -Duse_bse_te \
9 -Dtbdyn \
10 -Dfock_dblbuf
11
12 CPP = fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
13
14 FC = mpiifort
15 FCL = mpiifort -mkl=sequential
16
17 FREE = -free -names lowercase
18
19 FFLAGS = -assume byterecl -w -xHOST
20 OFLAG = -O2
21 OFLAG_IN = $(OFLAG)
22 DEBUG = -O0
23
24 MKL_PATH = $(MKLROOT)/lib/intel64
25 BLAS =
26 LAPACK =
27 BLACS = -lmkl_blacs_intelmpi_lp64
28 SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
29
30 OBJECTS = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o
31
32 INCS =-I$(MKLROOT)/include/fftw
33
34 LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS)
35
36
37 OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
38 OBJECTS_O2 += fft3dlib.o
39
40 # For what used to be vasp.5.lib
41 CPP_LIB = $(CPP)
42 FC_LIB = $(FC)
43 CC_LIB = icc
44 CFLAGS_LIB = -O
45 FFLAGS_LIB = -O1
46 FREE_LIB = $(FREE)
47
48 OBJECTS_LIB= linpack_double.o getshmem.o
49
50 # For the parser library
51 CXX_PARS = icpc
52 LLIBS += -lstdc++
53
54 # Normally no need to change this
55 SRCDIR = ../../src
56 BINDIR = ../../bin
57
58 #================================================
59 # GPU Stuff
60
61 CPP_GPU = -DCUDA_GPU -DRPROMU_CPROJ_OVERLAP -DUSE_PINNED_MEMORY -DCUFFT_MIN=28 -UscaLAPACK -Ufock_dblbuf
62
61 OBJECTS_GPU= fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d_gpu.o fftmpiw_gpu.o
62
63 CC = icc
64 CXX = icpc
65 CFLAGS = -fPIC -DADD_ -Wall -qopenmp -DMAGMA_WITH_MKL -DMAGMA_SETAFFINITY -DGPUSHMEM=300 -DHAVE_CUBLAS
66
67 CUDA_ROOT ?= /usr/local/cuda/
68 NVCC := $(CUDA_ROOT)/bin/nvcc -ccbin=icc
69 CUDA_LIB := -L$(CUDA_ROOT)/lib64 -lnvToolsExt -lcudart -lcuda -lcufft -lcublas
70
71 GENCODE_ARCH := -gencode=arch=compute_30,code=\"sm_30,compute_30\" \
72 -gencode=arch=compute_35,code=\"sm_35,compute_35\" \
73 -gencode=arch=compute_60,code=\"sm_60,compute_60\" \
74 -gencode=arch=compute_70,code=\"sm_70,compute_70\" \
75 -gencode=arch=compute_72,code=\"sm_72,compute_72\"
76
77 MPI_INC = $(I_MPI_ROOT)/include64/
例如里面的12行的fpp,就是跟之前装的OneAPI有关。那些最后GPU的有关的,我没有用上,可以不要
最后就是要逐个编译,不要make all:
$ make gam
$ make std
$ make ncl
大功告成!
如果make all的话最后会报错但是那些vasp_std还是能用
# 最后就把编译好的vasp改改名字加到envirnment-varialbe里就可以随处call了
mv bin/vasp_std bin/vasp
# 打开 ~/.bash 加下面这一句到最后
export PATH="<path to vasp>/vasp.6.1.0/bin:$PATH"
# 重load一下
$ source ~/.bash
# 使用vasp
# cd 到你有INCAR KPOINTS POSCAR POTCAR的文件夹, 然后
$ mpirun -np 4 vasp
更多推荐
所有评论(0)