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

博文

多体微扰理论系列教程:Yambo编译

已有 10077 次阅读 2019-7-10 18:11 |个人分类:GW/BSE经验|系统分类:科研笔记

Yambo是除BerkeleyGW外,另一个常用的多体微扰理论软件包。和BerkeleyGW不同,Yambo依赖的组件比较多,并且采用autotools控制编译过程,因此编译起来稍微麻烦一点。这篇博文以最新的4.3.2版为例,讲一下如何用最简单的方法,编译一份高效稳定的Yambo。


下载依赖组件

Yambo依赖的组件虽然多,但在编译过程中可以自动下载和安装。考虑到集群一般不能联网,在编译Yambo之前我们需要把这些组件全部下载下来。


下载过程很简单:首先准备一台能联网且安装了Linux系统的计算机,将源码解压;然后cd lib/archive切换到相应目录,再make -f Makefile.loc即可下载所有的依赖组件。下载完成后,将源码重新打包。


编译选项解析

将打包后的源码上传至集群,解压后进入源码目录,输入./configure --help即可查看所有的编译选项。除了--prefix这种基本选项,剩下的选项可分为两类:启用/关闭特性和指定依赖组件的安装路径。第一类选项一般是--enable-xxxx/--disable-xxxx,第二类选项一般是--with-xxxx-xxxx=xxxx。在第一类选项中,重要的有这么几个:


--enable-dp             Double-precision build. Default is no.

指定编译出的程序使用单精度浮点数还是双精度浮点数。因为GW/BSE计算非常耗内存,选择单精度会省点资源。默认为不启用,即使用单精度。


--enable-time-profile   Extended timing profile of specific sections. Default is yes.

指定是否输出各部分计算耗时。默认开启。


--enable-uspp           Enable Ultrasoft PP support

指定是否支持超软赝势。GW/BSE计算需要大量波函数,用超软赝势可以减小动能截断,降低内存占用。但据师兄反映,Yambo的对超软赝势的支持还处于试验阶段。因此不建议启用该选项。


--enable-memory-profile Extended Memory profile of specific sections

指定是否输出各部分计算内存占用,在评估能否算得动时很有用,死机了也能帮助判断是否由内存占用导致。建议开启。


--enable-options-check  Enable the command line options check in driver.c. Default is yes.

指定是否检查命令行参数,默认开启。


--enable-open-mp        Enable OpenMP support

指定是否开启openmp并行。openmp共享内存而MPI不共享内存,在GW/BSE这种内存吞噬者面前还是很有一定优势的。但我一般不开始这个选项,因为一旦忘记修改OMP_NUM_THREADS环境变量,MPI进程数*openmp线程数就会超过物理核数,非常麻烦。如果内存吃紧,又对并行计算比较了解,可以启用此选项。否则建议关闭此选项。


--enable-mpi            Enable mpi parallelization . Default is yes.

指定是否开启MPI并行,默认开启。串行版Yambo没有使用价值。如果在启用MPI并行的同时启用openmp,则会混合并行,两者不冲突。


--enable-iotk           Activate the IOTK support

指定是否启用QE输入/输出支持,也就是能否读取QE生成的数据。Yambo默认只能读取abinit的数据。如果要和QE联合使用,就需要开启此选项。


在这里强调一下,虽然Yambo的configure脚本也提供了--prefix选项,但如果真的设置了这个选项,编译的时候就会提示某几个文件找不到,应该是BUG。所以不要设置此选项。


因为我们使用Yambo内置的依赖组件,所以第二类选项用的不多,一般只会用到几个指定MKL和FFTW安装路径的选项。具体在下一部分详细讲解。


此外,Yambo编译过程中还涉及很多环境变量,这里挑几个重要的:

CC          C compiler command #C语言编译器

CFLAGS      C compiler flags #C语言编译选项

FC          Fortran compiler command #Fortran90及之后版本编译器
FCFLAGS     Fortran compiler flags #Fortran90及之后版本编译选项

F77         Fortran 77 compiler command #Fortran77编译器

FFLAGS      Fortran 77 compiler flags #Fortran77编译选项

MPIFC       Parallel Fortran compiler command #Fortran90及之后版本并行编译器

MPIF77      Parallel Fortran 77 compiler command #Fortran77并行编译器

MPICC       Parallel C compiler command #C语言并行编译器


配置与编译

以下三个例子中,均假设已经通过Intel编译器提供的初始化脚本,完成了编译器和MKL的环境变量设置流程。对于基于FFTW的例子,还假设已经设置好了C_INCLUDE_PATH,LIBRARY_PATH和LD_LIBRARY_PATH等环境变量。关于如何设置这些环境变量,可以参考http://blog.sciencenet.cn/blog-2909108-1152044.html,这里不再赘述。


第一份是基于Intel编译器+MKL+OpenMPI的编译设置:

export CC=icc
export FC=ifort
export F77=ifort

export MPICC=mpicc
export MPIFC=mpif90
export MPIF77=mpif77

export CFLAGS=-O3
export FCFLAGS=-O3
export FFLAGS=-O3

./configure \
--enable-memory-profile --disable-open-mp --enable-iotk \
--with-blas-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-lapack-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-blacs-libs="-lmkl_blacs_openmpi_lp64" \
--with-scalapack-libs="-lmkl_scalapack_lp64" \
--with-fft-libs="-mkl" \
--with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk"

因为已经设置好了MKL的环境变量,所以可以直接使用动态链接。FFT库使用MKL中提供的FFTW接口。

--with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk"

指定QE安装路径下iotk子目录所在路径,这里我们的QE安装路径为$HOME/soft/qe-6.2。配置完成后,configure脚本会输出如下的总结报告:

#
# [VER] 4.3.2 r.134
#
# - GENERAL CONFIGURATIONS -
#
# [SYS] linux@x86_64
# [SRC] /home/yhli/yambo-4.3.2
# [TGT] /home/yhli/yambo-4.3.2
# [BIN] /home/yhli/yambo-4.3.2/bin
# [LIB] /home/yhli/yambo-4.3.2/lib/external
#
# [EDITOR] vim
# [ MAKE ] make
#
# [-] Double precision
# [X] Keep object files
# [X] Run-Time timing profile
# [X] Run-Time memory profile
#
# - SCRIPTS -
#
# [-] YDB: Yambo DataBase
# [-] YAMBOpy: Yambo Python scripts
#
# - PARALLEL SUPPORT -
#
# [X] MPI
# [-] OpenMP
#
# - LIBRARIES [E=external library; I?=internal library (c=to be compiled / f=found already compiled); X=system default; -=not used;] -
#
# > I/O: (NETCDF with large files support)
#
# [ E ] IOTK    : /home/yhli/soft/qe-6.2/S3DE/iotk/src/libiotk.a (QE no-hdf5-support)
#                 -I/home/yhli/soft/qe-6.2/S3DE/iotk/src
# [ - ] ETSF_IO :
#
# [ Ic] NETCDF  : /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/lib/libnetcdff.a /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/lib/libnetcdf.a -lm
#                 -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/include -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/include
# [ - ] HDF5    :
#
#
# > MATH: (FFTW MKL)
#
# [ E ] FFT       : -mkl
#
# [ E ] BLAS      : -lmkl_intel_lp64  -lmkl_sequential -lmkl_core
# [ E ] LAPACK    : -lmkl_intel_lp64  -lmkl_sequential -lmkl_core
# [ E ] SCALAPACK : -lmkl_scalapack_lp64
# [ E ] BLACS     : -lmkl_blacs_openmpi_lp64
# [ - ] PETSC     :
#
# [ - ] SLEPC     :
#
#
# > OTHERs
#
# [ Ic] LibXC     : /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/lib/libxcf90.a /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/lib/libxc.a
#                   -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/include
# [ E ] MPI       : -L/home/yhli/soft/openmpi-1.10.0/lib -lmpi
#                   -I/home/yhli/soft/openmpi-1.10.0/include
#
# - COMPILERS -
#
# FC kind = intel
# MPI kind= Open MPI v1.10, package: Open MPI yhli@n74 Distribution, ident: 1.10.0, repo rev: v1.10-dev-293-gf694355, Aug 24, 2015
#
# [ CPP ] icc -E -ansi  -D_MPI -D_FFTW -D_FFTW_OMP  -D_SCALAPACK     -D_TIMING
# [ FPP ] fpp -free -P  -D_MPI -D_FFTW -D_FFTW_OMP  -D_SCALAPACK     -D_TIMING
# [ CC  ] mpicc -O3 -D_C_US -D_FORTRAN_US
# [ FC  ] mpif90 -O3
# [ FCUF] -assume bscc -O0 -g
# [ F77 ] mpif77 -O3
# [ F77U] -assume bscc -O0 -g
# [Cmain] -nofor_main
#

其中打了[X]号的表示启用了对应的特性,[-]表示未启用。


第二份是基于Intel编译器+MKL+IntelMPI的编译设置:

export CC=icc
export FC=ifort
export F77=ifort

export MPICC=mpiicc
export MPIFC=mpiifort
export MPIF77=mpiifort

export CFLAGS=-O3
export FCFLAGS=-O3
export FFLAGS=-O3

./configure \
--enable-memory-profile --disable-open-mp --enable-iotk \
--with-blas-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-lapack-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-blacs-libs="-lmkl_blacs_intelmpi_lp64" \
--with-scalapack-libs="-lmkl_scalapack_lp64" \
--with-fft-libs="-mkl" \
--with-iotk-path="/opt/qe/6.3/S3DE/iotk"


第三份是基于Intel编译器+MKL+FFTW+OpenMPI的编译设置:

export CC=icc
export FC=ifort
export F77=ifort

export MPICC=mpicc
export MPIFC=mpif90
export MPIF77=mpif77

export CFLAGS=-O3
export FCFLAGS=-O3
export FFLAGS=-O3

./configure \
--enable-memory-profile --disable-open-mp --enable-iotk \
--with-blas-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-lapack-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core" \
--with-blacs-libs="-lmkl_blacs_openmpi_lp64" \
--with-scalapack-libs="-lmkl_scalapack_lp64" \
--with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk" \
--with-fft-path="$HOME/soft/fftw-3.3.4"


配置完成后,输入make即可查看所有可编译的程序。输入make core即可编译接口程序a2y/e2y/p2y,主程序yambo和后处理程序ypp。做GW/BSE计算最常用的就是这几个程序。编译后的程序在源码的bin目录下面。




https://blog.sciencenet.cn/blog-2909108-1188957.html

上一篇:多体微扰理论系列教程:BerkeleyGW软件编译
下一篇:分享一个确定Wannier90能量窗口的脚本
收藏 IP: 202.114.78.*| 热度|

2 唐刚 赵志强

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

数据加载中...

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

GMT+8, 2024-11-23 15:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部