跳转至

VASP编译安装

环境:242集群,Rocky Linux 8.8,Slurm作业管理系统,Intel oneAPI 2022.02编译器

下载需要的安装包

管理节点可上网,使用wget下载需要的安装包;直接使用wget下载https链接会报证书错误,需要加--no-check-certificate参数,或者进行如下操作:

[userA@matrix ~]$ echo "check-certificate = off" > ~/.wgetrc
部分集群管理节点wget下载不好使,可本地电脑下载好安装包,上传到用户目录。
[userA@matrix ~]$ mkdir temp
[userA@matrix ~]$ cd temp
[userA@matrix temp]$ wget https://support.hdfgroup.org/ftp/lib-external/szip/2.1.1/src/szip-2.1.1.tar.gz
[userA@matrix temp]$ wget https://www.zlib.net/zlib-1.3.tar.gz
[userA@matrix temp]$ wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/hdf5-1.12.0.tar.bz2
[userA@matrix temp]$ wget https://github.com/wannier-developers/wannier90/archive/v3.1.0.tar.gz
[userA@matrix temp]$ wget http://www.tddft.org/programs/libxc/down.php?file=6.2.2/libxc-6.2.2.tar.gz
[userA@matrix temp]$ wget http://theory.cm.utexas.edu/code/vtstcode-198.tgz

salloc申请编译计算节点

集群管理节点一般做了限制,不允许在上面直接运行作业或编译,我们也没专门设置编译节点,因此需要在计算节点上编译。为避免正常作业与编译抢占CPU,我们把编译也按正常作业提交即可。

[userA@matrix temp]$ salloc -N1 -n4 -p gao-grp
salloc: Granted job allocation 5165
salloc: Waiting for resource configuration
salloc: Nodes cu01 are ready for job
-N 申请的计算节点数目;-n 申请的任务核数;-p 申请的作业队列;-w 申请的计算节点名称。 账号可使用队列的名称:可使用sacctmgr show ass user=$(whoami) format=part查看。队列所对应的节点可用sinfo或者pestat命令查看。 这里我们申请一个计算节点,4核,使用gao-grp队列,申请计算节点为cu01.

HDF5安装

在计算节点编译安装,ssh到上面申请的cu01节点。

[userA@matrix temp]$ ssh cu01
[userA@cu01 ~]$ cd temp

  • szip安装

    [userA@cu01 temp]$ mkdir -p /home/userA/soft/vasp/szip-2.1.1
    [userA@cu01 temp]$ tar -zxvf szip-2.1.1.tar.gz
    [userA@cu01 temp]$ cd szip-2.1.1/
    [userA@cu01 szip-2.1.1]$ source /opt/intel/oneapi/setvars.sh
    [userA@cu01 szip-2.1.1]$ export CC=icc
    [userA@cu01 szip-2.1.1]$ export CXX=icpc
    [userA@cu01 szip-2.1.1]$ export FC=ifort
    [userA@cu01 szip-2.1.1]$ export CFLAGS='-O3 -xHost -ip'
    [userA@cu01 szip-2.1.1]$ export CXXFLAGS='-O3 -xHost -ip'
    [userA@cu01 szip-2.1.1]$ export FCFLAGS='-O3 -xHost -ip'
    [userA@cu01 szip-2.1.1]$ ./configure --prefix=/home/userA/soft/vasp/szip-2.1.1
    [userA@cu01 szip-2.1.1]$ make all install |tee make.log
    

  • zlib安装
    为了使编译环境单一干净,上一步安装好szip后,exit退出cu01节点,再重新ssh进入cu01节点

    [userA@cu01 szip-2.1.1]$ exit
    [userA@matrix temp]$ ssh cu01
    [userA@cu01 ~]$ cd temp
    [userA@cu01 temp]$ tar -zxvf zlib-1.3.tar.gz
    [userA@cu01 temp]$ cd zlib-1.3
    [userA@cu01 zlib-1.3]$ mkdir -p /home/userA/soft/vasp/zlib-1.3
    [userA@cu01 zlib-1.3]$ source /opt/intel/oneapi/setvars.sh
    [userA@cu01 zlib-1.3]$ export CC=icc
    [userA@cu01 zlib-1.3]$ export CFLAGS='-O3 -xHost -ip'
    [userA@cu01 zlib-1.3]$ ./configure --prefix=/home/userA/soft/vasp/zlib-1.3
    [userA@cu01 zlib-1.3]$ make all install |tee make.log
    

  • HDF5安装
    同样,exit退出cu01节点,再重新ssh进入cu01节点

    [userA@cu01 zlib-1.3]$ exit
    [userA@matrix temp]$ ssh cu01
    [userA@cu01 ~]$ cd temp
    [userA@cu01 temp]$ tar -jxvf hdf5-1.12.0.tar.bz2
    [userA@cu01 temp]$ cd hdf5-1.12.0
    [userA@cu01 hdf5-1.12.0]$ mkdir -p /home/userA/soft/vasp/hdf5-1.12.0
    [userA@cu01 hdf5-1.12.0]$ source /opt/intel/oneapi/setvars.sh
    [userA@cu01 hdf5-1.12.0]$ ./configure --prefix=/home/userA/soft/vasp/hdf5-1.12.0 --enable-fortran --enable-hl --enable-shared CC=mpiicc FC=mpiifort CXX=mpiicpc CFLAGS="-fPIC -O3 -xHost -ip -fno-alias -align" FFLAGS="-fPIC -O3 -xHost -ip -fno-alias -align" CXXFLAGS="-fPIC -O3 -xHost -ip -fno-alias -align" FFLAGS="-I/opt/intel/oneapi/mpi/latest/include -L/opt/intel/oneapi/mpi/latest/lib" --with-szlib=/home/userA/soft/vasp/szip-2.1.1 --with-zlib=/home/userA/soft/vasp/zlib-1.3 --enable-parallel
    [userA@cu01 hdf5-1.12.0]$ make -j 4 |tee make.log
    [userA@cu01 hdf5-1.12.0]$ make install
    

VASP-2-Wannier90 interface

上传VASP6.4.2源码包到/home/userA/temp下

[userA@cu01 hdf5-1.12.0]$ exit
[userA@matrix temp]$ ssh cu01
[userA@cu01 ~]$ cd temp
[userA@cu01 temp]$ tar -zxvf vasp.6.4.2.tgz
[userA@cu01 temp]$ cd vasp.6.4.2
[userA@cu01 vasp.6.4.2]$ tar -zxvf ~/temp/v3.1.0.tar.gz
[userA@cu01 vasp.6.4.2]$ cd wannier90-3.1.0
[userA@cu01 wannier90-3.1.0]$ source /opt/intel/oneapi/setvars.sh
[userA@cu01 wannier90-3.1.0]$ cp config/make.inc.ifort make.inc
修改make.inc,内容如下:
[userA@cu01 wannier90-3.1.0]$ cat make.inc 

#=====================================================
# For Linux with intel version 11/12 on 64bit machines
#=====================================================
F90 = ifort
#COMMS=mpi
MPIF90=mpiifort
FCOPTS=-O3 -xHost
LDOPTS=-O3 -xHost

#========================================================
# Intel mkl libraries. Set LIBPATH if not in default path
#========================================================

LIBDIR = /opt/intel/oneapi/mkl/2022.2.0/lib/intel64
LIBS   =  -L$(LIBDIR) -lmkl_core -lmkl_intel_lp64 -lmkl_sequential -lpthread

#=======================
# ATLAS Blas and LAPACK
#=======================
#LIBDIR = /usr/local/lib
#LIBS = -L$(LIBDIR)  -llapack -lf77blas -lcblas -latlas
make编译,得到libwannier.a库文件
[userA@cu01 wannier90-3.1.0]$ make

Libxc编译安装

[userA@cu01 wannier90-3.1.0]$ exit
[userA@matrix temp]$ ssh cu01
[userA@cu01 ~]$ cd temp/
[userA@cu01 temp]$ tar -zxvf libxc-6.2.2.tar.gz
[userA@cu01 temp]$ cd libxc-6.2.2
[userA@cu01 libxc-6.2.2]$ mkdir -p /home/userA/temp/vasp.6.4.2/libxc-6.2.2
[userA@cu01 libxc-6.2.2]$ source /opt/intel/oneapi/setvars.sh
[userA@cu01 libxc-6.2.2]$ ./configure --prefix=/home/userA/temp/vasp.6.4.2/libxc-6.2.2 --enable-shared --disable-lxc CC=icc FC=ifort CFLAGS="-O3 -xHost" FCFLAGS="-O3 -xHost"
[userA@cu01 libxc-6.2.2]$ make install -j 4 |tee make.log

VTST代码修改

[userA@cu01 libxc-6.2.2]$ exit
[userA@matrix temp]$ ssh cu01
[userA@cu01 ~]$ cd temp/
[userA@cu01 temp]$ tar -zxvf vtstcode-198.tgz
[userA@cu01 temp]$ cp -R vtstcode-198/vtstcode6.4/* vasp.6.4.2/src/
[userA@cu01 temp]$ cd vasp.6.4.2/src/
  • 修改main.F代码
    备份main.F

    [userA@cu01 src]$ cp main.F main.F-org
    
    使用vim把main.F的3654-3655行
          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)
    
    并且把969行
          IF (LCHAIN) CALL chain_init( T_INFO, IO)
    
    修改为
          CALL chain_init( T_INFO, IO)
    

  • 修改.objects

    [userA@cu01 src]$ vi .objects
    
    在126行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 \
            pyamff_fortran/*.o \
            ml_pyamff.o \
            opt.o \
    

  • 修改src/makefile
    把17行LIB=lib parser修改为LIB=lib parser pyamff_fortran

VASPsol溶剂化代码修改

参考VASP6.1.0以上版本中VASPsol的修改及编译方法修改
下载https://github.com/henniggroup/VASPsol/releases/tag/V1.0源代码VASPsol-1.0.tar.gz

备份solvation.F

[userA@cu01 src]$ mv solvation.F solvation.F-org
上传VASPsol-1.0.tar.gz压缩包src/solvation.F到/home/userA/temp/vasp.6.4.2/src目录下

  • 修改mpi.F代码
    备份mpi.F

    [userA@cu01 src]$ cp mpi.F mpi.F-org
    
    在2169行#endif // MPI_INPLACE后添加:
    ! Subroutine for VASPsol - Added by D. Gaissmaier
    !----------------------------------------------------------------------
    !
    ! Global sum function - required for VASPsol
    !
    !----------------------------------------------------------------------
    
          SUBROUTINE M_sum_1(COMM, v1)
          USE mpimy
          IMPLICIT NONE
    
          TYPE(communic) COMM
          REAL(q) vec(1),v1
    
          vec(1)=v1
    
          CALL M_sumb_d(COMM, vec, 1)
    
          v1=vec(1)
    
          RETURN
          END SUBROUTINE
    ! End of VASPsol subroutine
    

  • 修改solvation.F代码
    把2206行CALLMPI( M_sum_s(SP_GRIDC%COMM,1,Ecorr3,0,0,0))
    替换为CALLMPI( M_sum_1(SP_GRIDC%COMM,Ecorr3))
    把2217行CALLMPI( M_sum_s(SP_GRIDC%COMM,1,Ecorr4,0,0,0))
    替换为CALLMPI( M_sum_1(SP_GRIDC%COMM,Ecorr4))

修改pot.F代码

备份pot.F

[userA@cu01 src]$ cp pot.F pot.F-org
在409行CALL POT_FLIP(CVTOT, GRIDC,WDES%NCDIJ )后面添加
! solvation__
! vaclevel
      IF (LSOL) CALL GET_FERMISHIFT(LATT_CUR, T_INFO, GRIDC, WDES, CWORK, CHTOT)
! vaclevel
! solvation__

VASP编译安装

  • 编写makefile.include

    [userA@cu01 src]$ cd ../
    [userA@cu01 vasp.6.4.2]$ cat makefile.include 
    # Default precompiler options
    CPP_OPTIONS = -DHOST=\"LinuxIFC\" \
                  -DMPI -DMPI_BLOCK=8000 -Duse_collective \
                  -DscaLAPACK \
                  -Dsol_compat \
                  -DCACHE_SIZE=4000 \
                  -Davoidalloc \
                  -Dvasp6 \
                  -Duse_bse_te \
                  -Dtbdyn \
                  -Dfock_dblbuf
    
    CPP         = fpp -f_com=no -free -w0  $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
    
    FC          = mpiifort
    FCL         = mpiifort
    
    FREE        = -free -names lowercase
    
    FFLAGS      = -assume byterecl -w -heap-arrays 64
    
    OFLAG       = -O3
    OFLAG_IN    = $(OFLAG)
    DEBUG       = -O0
    
    OBJECTS     = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
    OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
    OBJECTS_O2 += fft3dlib.o
    
    # For what used to be vasp.5.lib
    CPP_LIB     = $(CPP)
    FC_LIB      = $(FC)
    CC_LIB      = icc
    CFLAGS_LIB  = -O
    FFLAGS_LIB  = -O1
    FREE_LIB    = $(FREE)
    
    OBJECTS_LIB = linpack_double.o
    
    # For the parser library
    CXX_PARS    = icpc
    LLIBS       = -lstdc++
    
    ##
    ## Customize as of this point! Of course you may change the preceding
    ## part of this file as well if you like, but it should rarely be
    ## necessary ...
    ##
    
    # When compiling on the target machine itself, change this to the
    # relevant target when cross-compiling for another architecture
    VASP_TARGET_CPU ?= -xHOST
    FFLAGS     += $(VASP_TARGET_CPU)
    
    # Intel MKL (FFTW, BLAS, LAPACK, and scaLAPACK)
    # (Note: for Intel Parallel Studio's MKL use -mkl instead of -qmkl)
    FCL        += -qmkl=sequential
    MKLROOT    ?= /opt/intel/oneapi/mkl/2022.2.0
    LLIBS      += -L$(MKLROOT)/lib/intel64 -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
    INCS        =-I$(MKLROOT)/include/fftw
    
    # HDF5-support (optional but strongly recommended)
    CPP_OPTIONS+= -DVASP_HDF5
    HDF5_ROOT  ?= /home/userA/soft/vasp/hdf5-1.12.0
    LLIBS      += -L$(HDF5_ROOT)/lib -lhdf5_fortran
    INCS       += -I$(HDF5_ROOT)/include
    
    
    # For the VASP-2-Wannier90 interface (optional)
    CPP_OPTIONS    += -DVASP2WANNIER90
    WANNIER90_ROOT ?= /home/userA/temp/vasp.6.4.2/wannier90-3.1.0
    LLIBS          += -L$(WANNIER90_ROOT) -lwannier
    
    # for libxc
    CPP_OPTIONS +=  -DUSELIBXC
    LIBXCPATH=/home/userA/temp/vasp.6.4.2/libxc-6.2.2
    INCS += -I$(LIBXCPATH)/include
    LLIBS += $(LIBXCPATH)/lib/libxcf03.a $(LIBXCPATH)/lib/libxc.a
    

  • 编译安装

    [userA@cu01 vasp.6.4.2]$ source /opt/intel/oneapi/setvars.sh
    [userA@cu01 vasp.6.4.2]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/soft/vasp/hdf5-1.12.0/lib:/opt/soft/vasp/zlib-1.3/lib
    [userA@cu01 vasp.6.4.2]$ make |tee make.log
    
    把生成的二进制可执行程序拷贝到/home/userA/soft/vasp下
    [userA@cu01 vasp.6.4.2]$ exit
    [userA@matrix temp]# mkdir -p /hme/userA/soft/vasp/
    [userA@matrix temp]# cd /hme/userA/soft/vasp/
    [userA@matrix vasp]# cp /home/userA/temp/vasp.6.4.2/bin/vasp_std vasp_std_642_avx512
    [userA@matrix vasp]# cp /home/userA/temp/vasp.6.4.2/bin/vasp_gam vasp_gam_642_avx512
    [userA@matrix vasp]# cp /home/userA/temp/vasp.6.4.2/bin/vasp_ncl vasp_ncl_642_avx512
    

VASP的提交脚本

[userA@matrix vasp]# cd /home/userA/test
[userA@matrix test]$ cat vasp6.slurm
#!/bin/bash
# Job submission script for SLURM:
# Usage: sbatch <this_script>
#
#SBATCH -J vasp6
#SBATCH -o vasp6.o%J
##SBATCH -e vasp6.e
#SBATCH -N 1
#SBATCH --ntasks-per-node=16
#SBATCH -t 1206:04:02
#SBATCH -p public
#############################################################################
#    -J: name of job
#    -o: file for batch script's standard output
#    -e: file for batch script's standard error
#    -N: number of nodes on which to run (N = min[-max])
#    -n: number of tasks to run
#    -t: time limit
#    -p: partition requested
#    -w: request a specific list of hosts
#############################################################################

# go to work dir
cd $SLURM_SUBMIT_DIR

# The program we want to execute
EXEC=/home/userA/soft/vasp/vasp_std_642_avx512

# module load intel oneapi
source /opt/intel/oneapi/compiler/2022.2.0/env/vars.sh
source /opt/intel/oneapi/mkl/2022.2.0/env/vars.sh
source /opt/intel/oneapi/mpi/2021.7.0/env/vars.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/userA/soft/vasp/hdf5-1.12.0/lib:/home/userA/soft/vasp/szip-2.1.1/lib:/home/userA/soft/vasp/zlib-1.3/lib

echo "Starting VASP run at" `date`

# running program
time mpiexec.hydra -n $SLURM_NTASKS $EXEC > ${SLURM_SUBMIT_DIR}/run.log

echo "Finished VASP run at" `date`
echo "Work Dir is : $SLURM_SUBMIT_DIR"

参考

  1. 编译VASP6.4
  2. VTST Toos Installation
  3. VASP6.1.0以上版本中VASPsol的修改及编译方法
  4. CP2K-8.2 的全intel编译器编译(含Libxc安装)
  5. Build HDF5 with Intel Compilers
本文阅读量  次
本站总访问量  次