yhli0906的个人博客分享 http://blog.sciencenet.cn/u/yhli0906

博文

多体微扰理论系列教程:BerkeleyGW软件编译

已有 6371 次阅读 2019-6-6 21:35 |个人分类:GW/BSE经验|系统分类:科研笔记|关键词:学者

目前支持GW方法和Bethe-Salpeter方程求解的软件分为两类,一类是支持此类计算的通用DFT软件包,如VASP、abinit、GPAW、elk、exciting等,另一类是专业的多体微扰软件包,如BerkeleyGW、Yambo、SaX等。专业的程序在所支持的计算类型、后期处理和并行效率等方面相对于通用软件有很大优势。BerkeleyGW和Yambo是两个用户数较多的多体微扰理论软件包,其特点和区别可以参考这个帖子http://muchong.com/t-10638958-1。一言以蔽之,BerkeleyGW非常稳定,文档齐全,程序组织结构非常清晰,但学习成本较高,使用较为繁琐;而Yambo使用方便,并且有很多特色功能,缺点是文档不全,早期版本也不太稳定。至于选择哪个软件,取决于计算资源和是否有人带。如果有人带,或者已经非常熟悉计算流程,推荐BerkeleyGW;从零开始完全自学的话,推荐Yambo。在这篇博文中,重点讲一下如何编译BerkeleyGW。


编译组件


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


基于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文件,修改BGW_TEST_MPI_NPROCS和MPIEXEC环境变量。


测试无误后,输入make install INSTDIR=安装目录,即可将软件安装至指定目录下。


基于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。


bgw-1.2.0-intel.mk

bgw-2.0.0-gnu.mk

bgw-2.0.0-gnu-serial.mk





https://m.sciencenet.cn/blog-2909108-1183487.html

上一篇:多体微扰理论系列教程:基本理论
下一篇:多体微扰理论系列教程:Yambo编译

1 唐刚

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 05:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部