天天看点

vasp 安装_VASP-5.4.1/5.4.4/6.1.1 编译笔记(一)

vasp 安装_VASP-5.4.1/5.4.4/6.1.1 编译笔记(一)

声明:学习中整理的笔记,不做任何商业用途。

VASP这款第一性原理计算软件,很多人都在使用,今天要做的笔记是VASP软件的编译,早期我是通过计算化学公社的一个帖子学习的,那个前辈写的很详细,链接如下:

教你从头编译vasp-5.4.1 - 第一性原理 - 计算化学公社​bbs.keinsci.com

vasp 安装_VASP-5.4.1/5.4.4/6.1.1 编译笔记(一)

编译5.4.1,主要分四步:1. intel编译器和mkl安装;2. openmpi安装;3. fftw-3.3.4的安装。要注意环境变量,详见附录A、B、C。4. 修改vasp的makefile.include文件,然后make all。

很早之前,我都不知道intel编译器在哪里搞到,其实到官网注册,然后下载学生版轻松解决,会给你激活序列号,你也可以下载激活的license.lic文件。

parallel-studio-xe​software.intel.com

我发现如果没有使用intel编译器里的fftw库,仅仅使用fftw-3.3.4 or它之前版本,如没有编译一些特定的动态or静态库,在运行vasp带有自旋的计算(ISPIN=2)会出现问题。

具体可以看到编译vasp用到的makefile.include文件

要注意MKLROOT,OBJECTS,INCS。如果使用的是自己fftw,就要这么写;还有你编译fftw的时候把libfftw3_mpi.a库文件编译出来了。

MKLROOT    =/export/home/cluser1/intel/mkl
OBJECTS    = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /export/home/cluser1/fftw/lib/libfftw3_mpi.a
INCS       =-I/export/home/cluser1/fftw/include
           

>>>kk

# Precompiler options
#CPP_OPTIONS= -DMPI -DHOST="IFC91_ompi" -DIFC 
             -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc 
             -DMPI_BLOCK=8000 -DscaLAPACK -Duse_collective 
             -DnoAugXCmeta -Duse_bse_te 
             -Duse_shmem -Dtbdyn
CPP_OPTIONS= -DMPI -DHOST="LinuxIFC" -DIFC 
             -DCACHE_SIZE=8000 -DPGF90 -Davoidalloc 
             -DMPI_BLOCK=8000 -DscaLAPACK -Duse_collective 
             -DnoAugXCmeta -Duse_bse_te 
             -Duse_shmem -Dtbdyn -DRPROMU_DGEMV -DRACCMU_DGEMV

CPP        = fpp -f_com=no -free -w0  $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)

FC         = mpif90
FCL        = mpif90 -mkl

FREE       = -free -names lowercase

#FFLAGS     = -assume byterecl
FFLAGS     = -assume byterecl -FR -heap-arrays
#OFLAG      = -O2
OFLAG      = -O1 -ip
OFLAG_IN   = $(OFLAG)
#DEBUG      = -O0
DEBUG      = -O0 -FR

MKLROOT    =/export/home/cluser1/intel/mkl
MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =-L$(MKL_PATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread
LAPACK     =-L$(MKL_PATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread
#BLACS      = -lmkl_blacs_openmpi_lp64
BLACS      =-L$(MKL_PATH) -lmkl_blacs_openmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(MKL_PATH)/libmkl_scalapack_ilp64.a $(BLACS)

#OBJECTS    = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o 
             $(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
OBJECTS    = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /export/home/cluser1/fftw/lib/libfftw3_mpi.a
INCS       =-I/export/home/cluser1/fftw/include

LLIBS      = $(SCALAPACK) $(LAPACK) $(BLAS)

OBJECTS_O1 += fft3dfurth.o 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 getshmem.o

# Normally no need to change this
SRCDIR     = ../../src
BINDIR     = ../../bin
           

<<<kk

计算化学公社的那个帖子还有一段原话我觉得也比较有用

另外,上述文件是参考其他帖子进行修改得到的,最大的修改部分就是

BLACS =-L$(MKL_PATH) -lmkl_blacs_openmpi_lp64

的原始设置是

BLACS =-L$(MKL_PATH) -lmkl_blacs_intel_lp64-lmkl_blacs_openmpi_lp64

以原始设置虽然也能够编译出vasp,但是编译后没有办法正常运行的。

发现编译vasp的时候用到openmpi是将makefile.include文件里的:

FC = mpiifort

FCL = mpiifort -mkl

修改为:

FC = mpif90

FCL = mpif90 -mkl,在运行并行vasp的时候也用到了,可以看看下面运行vasp的pbs文件实例

#!/bin/bash
#PBS -q batch
#PBS -N vasp
#PBS -l nodes=1:ppn=4
#PBS -j oe
#PBS -V
#PBS -l walltime=1500:00:00
export
LD_LIBRARY_PATH=/export/home/cluser1/intel/composerxe/mkl/lib/intel64:$LD_LIB
RARY_PATH
source /export/home/cluser1/intel/composerxe/bin/compilervars.sh intel64
export PATH=/export/home/cluser1/intel/composerxe/bin:$PATH
export
LD_LIBRARY_PATH=/export/home/cluser1/intel/composerxe/mkl/lib/intel64:$LD_LIB
RARY_PATH
export
LD_LIBRARY_PATH=/export/home/cluser1/intel/lib/intel64:$LD_LIBRARY_PATH
export PATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/bin:$PATH
export
LD_LIBRARY_PATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/lib:$LD_LIBR
ARY_PATH
export
MANPATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/share/man:$MANPAT
H
cd $PBS_O_WORKDIR
EXEC=/export/home/cluser1/VASP/vasp.5.4.1/bin/vasp_gam
LOG_FILE=vasptest.log
NP=`cat $PBS_NODEFILE | wc -l`
NN=`cat $PBS_NODEFILE | sort | uniq | tee /tmp/nodes.$$ | wc -l`
cat $PBS_NODEFILE > /tmp/nodefile.$$
mpirun -n $NP $EXEC
rm -f /tmp/nodefile.$$ 
           

后来我编译vasp5.4.4的时候就没有这么复杂了。

a.编译parallel_studio_xe

b.编译vasp。

我没有用fftw3.3.4。直接使用的intel编译器的/intel/compilers_and_libraries_2018.0.128/linux/mkl/interfaces/fftw3xf。编译 libfftw3xf_intel.a文件

make libintel64 compiler=intel

所以有了它就不需要fftw了。

附录A

intel编译器和MKL的安装

将l_fcompxe_2011.6.233.tgz和l_ccompxe_2011.6.233.tgz分别解压,分别进入文件夹执行./install.sh (如果使用parallel_studio_xe 就只需要执行一次./install.sh)。选择以当前用户安装,其他的选项为默认,在选择license时,以license文件进行验证,在需要输入路径的地方,输入zwt.lic文件的路径,将两个包都安装成功之后,在~./bashrc文件中加入如下环境变量后执行source ~/.bashrc使之生效

source /export/home/cluser1/intel/composerxe/bin/compilervars.sh intel64
export PATH=/export/home/cluser1/intel/composerxe/bin:$PATH
export LD_LIBRARY_PATH=/export/home/cluser1/intel/composerxe/mkl/lib/intel64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/export/home/cluser1/intel/lib/intel64:$LD_LIBRARY_PATH
           

注意,/export/home/cluser1是当前用户的根目录,大家根据自己的实际情况修改,下同。执行命令which ifort看是否打印出安装路径用以判断安装或环境变量设置成功与否。

附录B

openmpi-1.6.5的安装。解压在文件夹内的openmpi压缩包,进入文件夹执行如下命令配置makefile

./configure --prefix=安装目录 CC=icc CXX=icpc F77=ifort FC=ifort

执行命令make -j8调用八核进行编译用以加快编译速度,直接用make单核编译可能超过1小时。执行命令make install完成安装 ,在~./bashrc文件中加入如下环境变量后执行source ~/.bashrc使之生效:

export PATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/bin:$PATH
export LD_LIBRARY_PATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/lib:$LD_LIBRARY_PATH
export MANPATH=/export/home/cluser1/openmpi-1.6.5-intel-v12.1.5/share/man:$MANPATH
           

执行命令which mpif90看是否打印出安装路径用以判断安装或环境变量设置成功与否。

附录C

fftw-3.3.4的安装。解压文件夹中的fftw-3.3.4压缩包,进入文件夹执行如下命令配置makefile

./configure --prefix=安装目录 --enable-mpi

注意,一定要加--enable-mpi否则在安装好的lib文件夹内无法生成此次编译VASP所必须的libfftw3_mpi.a文件。执行命令make,随后make install安装完成。在~./bashrc文件中加入如下环境变量后执行source ~/.bashrc使之生效:

export PATH=/export/home/cluser1/fftw/bin:$PATH
export LD_LIBRARY_PATH=/export/home/cluser1/fftw/lib:$LD_LIBRARY_PATH