这里VASP的编译由我的师兄提供的两套编译VASP的方法,分别是gcc + openmpi + lapack + blas + scalapack + fftw和intelmpi + mkl为例来说明vasp的简单编译,编译以vasp5.4.4为例
方法一:gcc+openmpi+lapack+blas+scalapack+fftw来编译 vasp
在正式编译vasp之前,我们解压vasp.5.4.4.tar.gz,在arch文件夹下,我们可以找到一个makefile.include.linux_gnu,这个文件告诉我们编译vasp需要用到的数学库和mpi。那么我们先编译这些数学库和openmpi
openmpi
首先是openmpi的编译:(这里我以当前最新版的openmpi-3.1.4为例说明)
创建一个可以用来放置openmpi安装位置的文件夹,比如在家目录下创建一个文件夹(mkdir ~/soft/openmpi/3.1.4/gfortran)用来放置openmpi的可执行程序和相应的库文件。
解压openmpi-3.1.4.tar.gz: tar zxvf openmpi-3.1.4.tar.gz
进入解压后的openmpi文件夹:cd openmpi-3.1.4
接着Configure:./configure –prefix=~/soft/openmpi/3.1.4/gfortran FC=gfortran
开始编译和安装:make && make install
这样我们就把openmpi安装到了~/soft/openmpi/3.1.4/gfortran下。
设置openmpi的环境:
在~/.bashrc(vi ~/.bashrc)下写上以下内容:
##############################
#########openmpi-3.1.4#########
##############################
export OPENMPI=~/soft/openmpi/3.1.4/gfortran
PATH=$OPENMPI/bin:$PATH
LD_LIBRARY_PATH=$OPENMPI/lib:$LD_LIBRARY_PATH
INCLUDE=$OPENMPI/include:$INCLUDE
CPATH=$OPENMPI/include:$CPATH
MANPATH=$OPENMPI/share/man:$MANPATH
更新环境source ~/.bashrc
数学库lapack+blas+scalapack+fftw的编译
在安装数学库之前,我们首先创建一个文件夹用于放置数学库的文件mkdir ~/lib/gfortran
fftw(https://www.fftw.org/)
这里使用fftw-3.3.8。
编译fftw需要创建一个类似前面安装openmpi一样的一个安装文件夹,比如在家目录下创建一个文件夹(mkdir ~/soft/fftw/3.3.8)用来放置fftw的可执行程序和相应的库文件。
首先老规矩解压:tar zxvf fftw-3.3.8.tar.gz
进去fftw-3.3.8:cd fftw-3.3.8
然后configure:./configure --prefix=~/soft/fftw/3.3.8 --enable-mpi --enable-openmp --enable-threads --enable-shared MPICC=mpicc CC=gcc F77=gfortran
(具体的参数解释可以使用./configure --help查看)
开始编译和安装:make && make install
这样我们就把fftw安装到了~/soft/fftw/3.3.8下。
设置fftw-3.3.8的环境
##############################
###########fftw-3.3.8###########
##############################
export LD_LIBRARY_PATH="~/soft/fftw/3.3.8/lib:$LD_LIBRARY_PATH"
更新环境source ~/.bashrc
Lapack (http://www.netlib.org/lapack/)
vasp官网上介绍对vasp6的安装可以用lapack3.6以上的库,但是需要在makefile.include里面加上CPP_OPTIONS += -DLAPACK36 (参考网站:https://www.vasp.at/wiki/index.php/Installing_VASP.6.X.X)
这里我们是编译vasp5.4.4,选择lapack-3.5.0
解压lapack-3.5.0:tar zxvf lapack-3.5.0.tar.gz
进入lapack文件夹cd lapack-3.5.0
生成并修改make.inc文件 cp make.inc.example make.inc
vi make.inc将倒数第四行BLASLIB = ../../librefblas.a修改为BLASLIB = ~/lib/gfortran/librefblas.a
然后编译make blaslib
在BLAS/SRC/下生成librefblas.a,将这个库文件拷贝到~/lib/gfortran下
接着make生成liblapack.a和libtmglib.a,将这两个库文件也拷贝到~/lib/gfortran下。
这样lapack和blas编译完成
Scalapack (http://www.netlib.org/scalapack/)
Scalapack库没有版本要求,我们就以当前最新版的scalapack-2.1.0为例
首先解压:tar zxvf scalapack-2.1.0.tar.gz
进入scalapack-2.1.0文件夹:cd scalapack-2.1.0
生成SLmake.inc文件:cp SLmake.inc.example SLmake.inc
修改SLmake.inc的最后两行到三行:
BLASLIB = -lblas
LAPACKLIB = -llapack
修改为:
BLASLIB = ~/lib/gfortran/librefblas.a
LAPACKLIB = ~/lib/gfortran/liblapack.a
然后编译:make生成库文件libscalapack.a,将这个库文件拷贝到~/lib/gfortran下。
vasp 编译
至此vasp编译的前期准备工作已经做完了。接下来开始编译vasp5.4.4
前面已经解压过vasp5.4.4的安装包了
进去vasp.5.4.4安装包:cd vasp.5.4.4
拷贝生成makefile.include:cp arch/makefile.include.linux_gnu makefile.include
修改makefile.include
将makefile.include里面的第24行到34行修改为
LIBDIR = ~/lib/gfortran
BLAS = $(LIBDIR)/librefblas.a
LAPACK = $(LIBDIR)/libtmglib.a$(LIBDIR)/liblapack.a
BLACS =
SCALAPACK = $(LIBDIR)/libscalapack.a$(BLACS)
LLIBS =$(SCALAPACK) $(LAPACK) $(BLAS)
FFTW ?=~/soft/fftw/3.3.8
LLIBS +=-L$(FFTW)/lib -lfftw3
INCS =-I$(FFTW)/include
这样就创建了vasp的编译文件,接下来就是需要漫长的编译等待:make all,顺利编译完成可以在bin下看到三个可执行文件vasp_gam, vasp_ncl, vasp_std
方法2:
intel 全家桶编译 vasp
以上是比较麻烦的做法。下面我们以intel parallel studio XE(2021年以后改为oneAPI BASE Toolkit+HPC Toolkit)为例,由于intel集成了全部的数学库,我们不需要安装多余的库,只需要配置好环境并且编译fftw3xf就可以了
intel 全家桶
intel parallel studio XE是最常见的并行编译器,几乎所有服务器自带,而且编译比较简单,这里就不介绍intel parallel studio 的编译,直接从设置intel parallel studio的环境开始,以下是怎么设置intel parallel studio的环境配置
vi ~/.bashrc
将下面的内容写入:
##############################
###########intel2019###########
##############################
source /opt/intel/compilers_and_libraries_2019.5.281/linux/bin/compilervars.sh intel64
source /opt/intel/impi/2019.5.281/intel64/bin/mpivars.sh intel64
source /opt/intel/mkl/bin/mklvars.sh intel64
export LD_LIBRARY_PATH= /opt/intel/2019.update5/mkl/lib/intel64:$LD_LIBRARY_PATH
更新环境source ~/.bashrc
编译 libfftw3xf_intel.a
首先查看自己的服务器上是否已经编译好:ls /opt/intel/mkl/interfaces/fftw3xf 查看是否有libfftw3xf_intel.a文件。假如没有在自己家目录下创建一个文件夹mkdir -p ~/intel/fftw3xf
cp –r /opt/intel/2019.update5/mkl/interfaces/fftw3xf~/intel/fftw3xf
cd ~/intel/fftw3xf
make intel64
顺利的话,生成libfftw3xf_intel.a文件。
vasp 编译
然后进入vasp.5.4.4解压包
拷贝生成makefile.include:cp arch/makefile.include.linux_intel makefile.include
修改makefile.include第19~20行为
FFLAGS = -assume byterecl -w -heap-arrays 64
OFLAG = -O2 -xCORE-AVX2
修改26行为
LAPACK = $(MKL_PATH)/libmkl_intel_lp64.a
在修改第30行,并在后面加上
OBJECTS = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o \
$(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
或者自己编译的libfftw3xf_intel.a
OBJECTS = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o \
~/intel/fftw3xf/libfftw3xf_intel.a
这样就创建了vasp的编译文件,接下来就是需要漫长的编译等待:make all,顺利编译完成可以在bin下看到三个可执行文件vasp_gam, vasp_ncl, vasp_std