离线编译支持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

使用Material Project时需要注意的能量修正问题

当我们在某些计算问题中需要比较Material Project(MP)的能量数据与本地DFT的计算结果时,如形成能的计算(https://blog.csdn.net/qq_36996539/article/details/128066249)。经过测试发现,即使在使用相同的输入参数的情况下,这两种方法得到的结果可能会有所不同。通过查阅Material Project官方文档,才发明很多人可能忽略了MP中对于能量进行的修正,这对于比较能量是非常重要的。

在MP中,为了提高其DFT计算的准确性,采用了两种修正:阴离子修正GGA/GGA+U混合修正

  1. 阴离子修正:
    • 对于许多在固体中呈负氧化态的元素,由于元素和固体之间电子定位的差异,从DFT计算得到的形成能可能存在显著的误差。这对于其标准状态为气态的元素尤为明显。
    • 为了解决这个问题,MP对14种阴离子应用了能量修正,包括“氧化物”(oxides)、“过氧化物”(peroxide)、“超氧化物”(superoxides)、S、F、Cl、Br、I、N、H、Se、Si、Sb和Te。
    • 对于含氧化物的化合物,根据氧在材料中的特定键合环境,分为氧化物、超氧化物和过氧化物的修正,根据最近邻键长确定的(超氧化物<1.35 Å,过氧化物<1.49 Å,否则为氧化物)。例如,Na2O接收’氧化物’修正,而NaO2接收超氧化物修正。
    • 只有当材料中被修正的元素作为阴离子时,才应用阴离子修正。例如,’H’修正应用于LiH,但不应用于H2O。如果估计的氧化态(如果可用)为负,或者它是材料中最具电负性的元素,那么它被分类为阴离子。
    • 具体数值可以参考参考文献1。
  2. GGA / GGA+U混合修正:
    • 众所周知,对于不同的化合物有些适用于+U修正计算,而其他化合物通常不采用。带有+U修正的能量与不带+U修正的能量不直接可比
    • MP中,GGA+U计算的结果添加了能量修正项,从而使得两种计算结果可以混合比较。

References:

  1. 1.A. Jain, G. Hautier, C. Moore, S.P. Ong, C.C. Fischer, T. Mueller, K.A. Persson, G. Ceder., A High-Throughput Infrastructure for Density Functional Theory Calculations, Computational Materials Science, vol. 50, 2011, pp. 2295-2310. DOI:10.1016/j.commatsci.2011.02.023
  2. 2.A. Jain, G. Hautier, S.P. Ong, C. Moore, C.C. Fischer, K.A. Persson, G. Ceder, Accurate Formation Enthalpies by Mixing GGA and GGA+U calculations, Physical Review B, vol. 84, 2011, p. 045115. DOI:10.1103/PhysRevB.84.045115
  3. Anion and GGA/GGA+U Mixing – Materials Project Documentation