目前支持GW方法和Bethe-Salpeter方程求解的软件分为两类,一类是支持此类计算的通用DFT软件包,如VASP、abinit、GPAW、elk、exciting等,另一类是专业的多体微扰软件包,如BerkeleyGW、Yambo、SaX等。专业的程序在所支持的计算类型、后期处理和并行效率等方面相对于通用软件有很大优势。BerkeleyGW(https://berkeleygw.org/)和Yambo(http://www.yambo-code.org/)是两个用户数较多的多体微扰理论软件包,其特点和区别可以参考这个帖子http://muchong.com/t-10638958-1。一言以蔽之,BerkeleyGW非常稳定,文档齐全,程序组织结构非常清晰,但学习成本较高,使用较为繁琐;而Yambo使用方便,并且有很多特色功能,缺点是文档不全,早期版本也不太稳定。至于选择哪个软件,取决于计算资源和是否有人带。如果有人带,或者已经非常熟悉计算流程,推荐BerkeleyGW;从零开始完全自学的话,推荐Yambo。在这篇博文中,重点讲一下如何编译BerkeleyGW。
1、编译组件
BerkeleyGW有FFTW和HDF5等可选依赖组件。2.0.0以前的版本尚不能使用MKL中的FFT接口,因此FFTW是必需组件。我们先编译FFTW:
export CC=icc
export F77=ifort
export CFLAGS=-O2
export FFLAGS=-O2
./configure --prefix=$HOME/soft/fftw-3.3.4 --enable-sse2 --enable-shared
再编译HDF5:
export CC=mpicc
export FC=mpif90
export CFLAGS=-O2
export FCFLAGS=-O2
./configure \
--prefix=$HOME/soft/hdf5-1.8.17 \
--enable-fortran --enable-fortran2003 \
--enable-production --enable-parallel
2、基于Intel编译器编译BerkeleyGW 1.2.0
BerkeleyGW和VASP编译方式差不多,都是修改一个类似Makefile的文件后再make,没有configure过程。这个文件就是arch.mk,具体说明在源码的config/README里面,config目录下面还有各种范例。在这里给出一个可用的arch.mk(ICC+MKL+FFTW+HDF5+OpenMPI+openmp):
# Precompiler options
COMPFLAG = -DINTEL
PARAFLAG = -DMPI -DOMP
MATHFLAG = -DUSESCALAPACK -DUSEFFTW3 -DHDF5
DEBUGFLAG =
C_DEBUGFLAG =
# Fortran compiler options
FCPP = /usr/bin/cpp -ansi
F90free = mpif90 -free -openmp
LINK = mpif90 -i-static -openmp
FOPTS = -O3 -no-prec-div
FNOOPTS = -O2 -no-prec-div
MOD_OPT = -module
INCFLAG = -I
# C/C++ compiler options
C_PARAFLAG = -DPARA -DMPICH_IGNORE_CXX_SEEK
CC_COMP = mpicxx
C_COMP = mpicc
C_LINK = mpicxx
C_OPTS = -O3
# Command to remove, for make clean
REMOVE = /bin/rm -f
# FFTW settings
FFTWPATH = $(HOME)/soft/fftw-3.3.4
FFTWLIB = -L$(FFTWPATH)/lib -lfftw3
FFTWINCLUDE = $(FFTWPATH)/include
# MKL settings
MKLPATH = $(HOME)/soft/mkl-13.0.079/lib/intel64
LAPACKLIB = -L$(MKLPATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core
SCALAPACKLIB = -L$(MKLPATH) -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
# HDF5 settings
HDF5PATH = $(HOME)/soft/hdf5-1.8.17
HDF5LIB = -L$(HDF5PATH)/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -lz
HDF5INCLUDE = $(HDF5PATH)/include
# Flags for performance profiling
PERFORMANCE =
# Test suite
TESTSCRIPT = make check-parallel
我们逐行看一下这套配置:
1) -DINTEL告诉预处理器我们所用的编译器为Intel编译器;
2) -DMPI和-DOMP告诉预处理器启用MPI和OpenMP混合并行,与之对应,后面的编译器参数中必须有-openmp;
3) -DUSESCALAPACK -DFFTW -DHDF5告诉预处理器启用SCALAPACK、FFTW和HDF5支持;
4) Fortran和C/C++编译选项基本不用修改;需注意若使用GCC中的预处理器(cpp),且GCC版本大于等于4.8,则FCPP必须设置为FCPP = cpp -C -nostdinc;此外也可直接使用Intel编译器中专用的Fortran预处理器(FCPP = fpp);
5) 在FFTW、MKL和HDF5库设置环节,我们均使用动态链接;注意此处使用的MKL不在标准安装路径下面,需要根据自己服务器的软件配置修改MKLPATH;
修改完arch.mk后,输入make all-flavors即可编译BerkeleyGW。编译完成后,进入testsuite目录,输入make check-parallel即可测试所编译的程序。测试时默认使用4个MPI进程,若需要用更多进程,或者所用MPI为IntelMPI,则需根据该目录下的README文件,修改BGWTESTMPI_NPROCS和MPIEXEC环境变量。
测试无误后,输入make install INSTDIR=安装目录,即可将软件安装至指定目录下。
3、基于GNU编译器编译BerkeleyGW 2.0.0
使用2019版Intel 编译器编译BerkeleyGW 2.0.0,测试时会遇到大量段错误,无论无何调低优化级别都无法消除。解决方案就是安装更低版本的Intel编译器,或者改用GNU编译器。
下面给出用GNU编译器编译BerkeleyGW 2.0.0的arch.mk(GCC+MKL+OpenMPI):
COMPFLAG = -DGNU
PARAFLAG = -DMPI
MATHFLAG = -DUSESCALAPACK -DUSEFFTW3
DEBUGFLAG =
FCPP = cpp -ansi
F90free = mpif90 -ffree-form -ffree-line-length-none
LINK = mpif90
FOPTS = -O3 -march=native -mtune=native
FNOOPTS = -O3 -march=native -mtune=native
MOD_OPT = -J
INCFLAG = -I
C_PARAFLAG = -DPARA
CC_COMP = mpicxx
C_COMP = mpicc
C_LINK = mpicxx
C_OPTS = -O3 -march=native -mtune=native
C_DEBUGFLAG =
REMOVE = /bin/rm -f
FFTWLIB = $(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
FFTWINCLUDE = $(MKLROOT)/include/fftw
MKLPATH = $(MKLROOT)lib/intel64
LAPACKLIB = -L$(MKLPATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread
SCALAPACKLIB = -L$(MKLPATH) -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
配置文件和上面的差别不大,主要在这几个地方:
1) -DGNU告诉预处理器所用编译器为GNU编译器;
2) 仅启用MPI并行,所以删掉了-DOMP预处理选项;
3) 没有使用HDF5库,所以删掉了-DUSEHDF5;
4) 编译器选项全部换成了适用于GNU编译器的选项;
5) 直接使用了MKL中的FFTW接口;
6) MKL安装在了标准位置($MKLROOT);
经测试,在链接到MKL的前提下,GNU编译器和Intel编译器编译出的BerkeleyGW运行效率相差不大。
在准备BerkeleyGW输入文件时,会用到其中的一些小程序。如果在虚拟机中也编译一份BerkeleyGW的话,就会非常方便。下面给出用GNU编译器编译BerkeleyGW 2.0.0的arch.mk(GCC+FFTW+Netlib LAPACK):
# Precompiler options
COMPFLAG = -DGNU
PARAFLAG =
MATHFLAG = -DUSEFFTW3
DEBUGFLAG =
C_DEBUGFLAG =
# Fortran compiler options
FCPP = cpp -C -nostdinc
F90free = gfortran -ffree-form -ffree-line-length-none
LINK = gfortran
FOPTS = -O3
FNOOPTS = -O2
MOD_OPT = -J
INCFLAG = -I
# C/C++ compiler options
C_PARAFLAG =
CC_COMP = g++
C_COMP = gcc
C_LINK = g++
C_OPTS = -O3
# Command to remove, for make clean
REMOVE = /bin/rm -f
# FFTW settings
FFTWPATH = /usr
FFTWLIB = -L$(FFTWPATH)/lib64 -lfftw3
FFTWINCLUDE = $(FFTWPATH)/include
# LAPACK settings
LAPACKPATH = /usr
LAPACKLIB = -L$(LAPACKPATH)/lib64 -llapack -lblas
该配置中使用了从软件源安装的FFTW和LAPACK,所以链接了/usr/lib64下面的库文件。如果使用自己编译的FFTW和LAPACK,则需修改FFTWPATH和LAPACKPATH。
配置文件请移步去李云海博士博客下载
http://blog.sciencenet.cn/blog-2909108-1183487.html
其它BerkeleyGW编译安装教程(注:小编添加)
https://blog.csdn.net/sowhatgavin/article/details/71308157
本文暂时没有评论,来添加一个吧(●'◡'●)