编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

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

wxchong 2024-07-15 09:46:30 开源技术 49 ℃ 0 评论

目前支持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:

  1. export CC=icc


  2. export F77=ifort


  3. export CFLAGS=-O2


  4. export FFLAGS=-O2


  5. ./configure --prefix=$HOME/soft/fftw-3.3.4 --enable-sse2 --enable-shared


再编译HDF5:

  1. export CC=mpicc


  2. export FC=mpif90


  3. export CFLAGS=-O2


  4. export FCFLAGS=-O2


  5. ./configure \


  6. --prefix=$HOME/soft/hdf5-1.8.17 \


  7. --enable-fortran --enable-fortran2003 \


  8. --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):

  1. # Precompiler options


  2. COMPFLAG = -DINTEL


  3. PARAFLAG = -DMPI -DOMP


  4. MATHFLAG = -DUSESCALAPACK -DUSEFFTW3 -DHDF5


  5. DEBUGFLAG =


  6. C_DEBUGFLAG =



  7. # Fortran compiler options


  8. FCPP = /usr/bin/cpp -ansi


  9. F90free = mpif90 -free -openmp


  10. LINK = mpif90 -i-static -openmp


  11. FOPTS = -O3 -no-prec-div


  12. FNOOPTS = -O2 -no-prec-div


  13. MOD_OPT = -module


  14. INCFLAG = -I



  15. # C/C++ compiler options


  16. C_PARAFLAG = -DPARA -DMPICH_IGNORE_CXX_SEEK


  17. CC_COMP = mpicxx


  18. C_COMP = mpicc


  19. C_LINK = mpicxx


  20. C_OPTS = -O3



  21. # Command to remove, for make clean


  22. REMOVE = /bin/rm -f



  23. # FFTW settings


  24. FFTWPATH = $(HOME)/soft/fftw-3.3.4


  25. FFTWLIB = -L$(FFTWPATH)/lib -lfftw3


  26. FFTWINCLUDE = $(FFTWPATH)/include



  27. # MKL settings


  28. MKLPATH = $(HOME)/soft/mkl-13.0.079/lib/intel64


  29. LAPACKLIB = -L$(MKLPATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core


  30. SCALAPACKLIB = -L$(MKLPATH) -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64



  31. # HDF5 settings


  32. HDF5PATH = $(HOME)/soft/hdf5-1.8.17


  33. HDF5LIB = -L$(HDF5PATH)/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -lz


  34. HDF5INCLUDE = $(HDF5PATH)/include



  35. # Flags for performance profiling


  36. PERFORMANCE =



  37. # Test suite


  38. 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):

  1. COMPFLAG = -DGNU


  2. PARAFLAG = -DMPI


  3. MATHFLAG = -DUSESCALAPACK -DUSEFFTW3


  4. DEBUGFLAG =



  5. FCPP = cpp -ansi


  6. F90free = mpif90 -ffree-form -ffree-line-length-none


  7. LINK = mpif90


  8. FOPTS = -O3 -march=native -mtune=native


  9. FNOOPTS = -O3 -march=native -mtune=native


  10. MOD_OPT = -J


  11. INCFLAG = -I



  12. C_PARAFLAG = -DPARA


  13. CC_COMP = mpicxx


  14. C_COMP = mpicc


  15. C_LINK = mpicxx


  16. C_OPTS = -O3 -march=native -mtune=native


  17. C_DEBUGFLAG =



  18. REMOVE = /bin/rm -f



  19. FFTWLIB = $(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a


  20. FFTWINCLUDE = $(MKLROOT)/include/fftw


  21. MKLPATH = $(MKLROOT)lib/intel64


  22. LAPACKLIB = -L$(MKLPATH) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread


  23. 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):

  1. # Precompiler options


  2. COMPFLAG = -DGNU


  3. PARAFLAG =


  4. MATHFLAG = -DUSEFFTW3


  5. DEBUGFLAG =


  6. C_DEBUGFLAG =



  7. # Fortran compiler options


  8. FCPP = cpp -C -nostdinc


  9. F90free = gfortran -ffree-form -ffree-line-length-none


  10. LINK = gfortran


  11. FOPTS = -O3


  12. FNOOPTS = -O2


  13. MOD_OPT = -J


  14. INCFLAG = -I



  15. # C/C++ compiler options


  16. C_PARAFLAG =


  17. CC_COMP = g++


  18. C_COMP = gcc


  19. C_LINK = g++


  20. C_OPTS = -O3



  21. # Command to remove, for make clean


  22. REMOVE = /bin/rm -f



  23. # FFTW settings


  24. FFTWPATH = /usr


  25. FFTWLIB = -L$(FFTWPATH)/lib64 -lfftw3


  26. FFTWINCLUDE = $(FFTWPATH)/include



  27. # LAPACK settings


  28. LAPACKPATH = /usr


  29. 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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表