由于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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐