VASP编译安装
环境:242集群,Rocky Linux 8.8,Slurm作业管理系统,Intel oneAPI 2022.02编译器
下载需要的安装包¶
管理节点可上网,使用wget下载需要的安装包;直接使用wget下载https链接会报证书错误,需要加--no-check-certificate参数,或者进行如下操作:
[userA@matrix ~]$ echo "check-certificate = off" > ~/.wgetrc
[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
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
[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
[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
使用vim把main.F的3654-3655行[userA@cu01 src]$ cp main.F main.F-org
修改为CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, & LATT_CUR%A,LATT_CUR%B,IO%IU6)
并且把969行CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, & TSIF,LATT_CUR%A,LATT_CUR%B,IO%IU6)
修改为IF (LCHAIN) CALL chain_init( T_INFO, IO)
CALL chain_init( T_INFO, IO)
-
修改.objects
在126行chain.o前面加上[userA@cu01 src]$ vi .objects
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
-
修改mpi.F代码
备份mpi.F
在2169行[userA@cu01 src]$ cp mpi.F mpi.F-org
#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
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
-
编译安装
把生成的二进制可执行程序拷贝到/home/userA/soft/vasp下[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
[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"
参考¶
- 编译VASP6.4
- VTST Toos Installation
- VASP6.1.0以上版本中VASPsol的修改及编译方法
- CP2K-8.2 的全intel编译器编译(含Libxc安装)
- Build HDF5 with Intel Compilers
本站总访问量 次