离线编译支持HDF5的Quantum Espresso并使用Perturbo(以QE 7.0版本为例)

0.前言

Perturbo是用于计算电荷传输和材料中超快载流子动力学的第一性原理的软件包。主要着重于电子-声子相互作用,并可以计算声子限制的传输特性,例如电导率,载流子迁移率和塞贝克系数。它也可以在存在电子-声子散射的情况下模拟超快非平衡电子动力学,为定量研究金属,半导体,绝缘体和2D材料中的电子-声子相互作用和载流子动力学提供了有效的计算工具。由于编译Perturbo需要用到支持HDF5版本的QE程序,编译过程较为繁琐,因此在此记录一下编译的全部过程。

1.安装Intel Oneapi

在Intel官网(https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html)获取Intel® oneAPI Base Toolkit和Intel® oneAPI HPC Toolkit,并按照页面指示安装,配置环境变量

2.安装HDF5库

在这里统一使用Intel编译器进行编译,并且我们需要使用–enable-fortran选项来支持fortran。可以使用本文提供的一键脚本进行快速编译,也可参照脚本内容进行手动操作。

将下面的脚本保存为install.sh,执行即可自动下载HDF5库并安装。如果离线安装需要在脚本目录下建立_tmp文件夹,并将下载好的HDF5库hdf5.tar.gz手动放入再执行即可。

#!/bin/bash

# Specify the installation directory
INSTALL_DIR=./hdf5
TMP_DIR=_tmp

# Convert INSTALL_DIR to an absolute path
INSTALL_DIR=$(readlink -f $INSTALL_DIR)

# Specify the installation version
HDF5_VERSION=1_14_2

# Branch name
BRANCH_NAME=hdf5_$HDF5_VERSION

# Check if INSTALL_DIR exists, if not, create it
if [ ! -d "$INSTALL_DIR" ]; then
    mkdir -p $INSTALL_DIR
fi

# Check if Intel oneAPI environment has been sourced
if [ "$MKLROOT" == "" ]; then
    echo "Error: Intel oneAPI environment is not detected. Please source Intel oneAPI environment first."
    exit 1
fi

# Create _pkgs directory
mkdir -p $TMP_DIR

# Download the specified version of HDF5 from GitHub as a tar.gz package, skip if already downloaded
if [ ! -f "$TMP_DIR/hdf5.tar.gz" ]; then
    wget -O $TMP_DIR/hdf5.tar.gz https://github.com/HDFGroup/hdf5/archive/refs/heads/$BRANCH_NAME.tar.gz
fi

# Extract the tar.gz package
tar -xzf $TMP_DIR/hdf5.tar.gz -C $TMP_DIR
cd $TMP_DIR/hdf5-$BRANCH_NAME

# Configure HDF5 with parallel support enabled and specify the installation directory
FC=ifort CC=icc CXX=icpc ./configure --prefix=$INSTALL_DIR --enable-fortran

# Compile
make -j4

# Install
make install

# Clear the folder in _pkgs directory, keep the tar.gz package
cd ../..
rm -rf $TMP_DIR

echo "HDF5 has been successfully installed to $INSTALL_DIR"

3.编译Quantum Espresso

(1)下载源码https://github.com/QEF/q-e/releases/并解压。

(2)进行configure,需要指定HDF5库路径,将/path/to/hdf5换成刚才安装的实际hdf5库路径

./configure --with-hdf5=yes --with-hdf5-libs="-L/path/to/hdf5/lib -lhdf5 -lhdf5_fortran" --with-hdf5-include="/path/to/hdf5/include"

完成configure之后,检查屏幕上的提示,如果有类似下面的内容,说明配置成功。

The following libraries have been found:
BLAS_LIBS= -lmkl_intel_lp64 -lmkl_sequential -lmkl_core
LAPACK_LIBS=
FFT_LIBS=
HDF5_LIBS=-L/path/to/hdf5/lib -lhdf5 -lhdf5_fortran

如果没有正确显示HDF5_LIBS,说明可能需要检查上面的HDF5库路径是否正确(如lib和lib64得区别),或者尝试使用–with-hdf5=”/path/to/hdf5″替代上面的命令。如果BLAS_LIBS没有MKL,说明可能没有正确使用Intel编译器的环境变量。

(3)准备devicexlib

在较新版本的QE中,编译时会联网获取devicexlib库,这对于离线安装非常不友好。观察编译过程发现在进行下载前其会先判断./external/devxlib目录下是否存在可以configure的文件再进行下都,因此可以手动下载该库来解决这个问题。

首先在https://gitlab.com/max-centre/components/devicexlib/-/archive/0.1.0/devicexlib-0.1.0.tar.gz获取该库,放置于目录./external/devxlib内,再通过命令tar xzf devicexlib-0.1.0.tar.gz –strip-components=1 -C .解压。

(4)编译

使用make all -jN(N为编译使用的核数)进行编译即可。

如果一切顺利,./bin目录下会出现各模块的二进制文件了。

4.运行Quantum Espresso

之后可以测试一下刚编译的QE程序,运行时需要添加HDF5库的环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/hdf5/lib

5.安装Perturbo

(1)找到官方文档(https://perturbo-code.github.io/mydoc_installation.html)给出的申请表格地址,填写个人信息,邮箱会收到自动发送的程序源码。根据官方的版本适配信息(https://perturbo-code.github.io/mydoc_versions.html),选择与QE版本相兼容合适的Perturbo版本,如QE 7.0需要使用2.0,QE 7.2需要使用2.1。下载源码并解压,放置于QE源码的根目录,也就是和其他内置模块一样。

(2)修改make.sys

进入perturbo目录,编辑make.sys,找到下面两行,去掉注释并修改HDF5目录为实际HDF5目录。

IFLAGS += -I/path/to/hdf5/include
HDF5_LIBS = -L/path/to/hdf5/lib -lhdf5 -lhdf5_fortran

注:对于较新版本,可能需要先使用下面的命令复制.sys到perturbo的根目录

cp config/make_gcc_serial.sys make.sys

之后可以执行make进行编译,如果编译成功,可以在./perturbo/bin目录下找到编译好的二进制文件了。

Perturbo官网提供了丰富的使用样例(https://perturbo-code.github.io/mydoc_org.html),可参考官网样例学习输入格式,进行练习和测试。

6.安装Wannier 90

在Wannier 90官网(https://wannier.org/download/)获取最新版本Wannier 90的源代码,应该是压缩包格式的,如v3.1.0.tar.gz。

放入QE源码根目录下面的archive文件夹,并将压缩包改名为版本号,如./archive/v3.1.0,这里不需要后缀名。

回到根目录,执行编译命令。

make w90

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据