ABACUS 专题

ABACUS HSE与PBE0杂化泛函实操

同一Si2 LCAO模型、PBE参考、完整HSE/PBE0输入与EXX收敛提取。

更新于 2026-10-29约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载完整输入、原生能量/力/能级及绘图脚本,解压进入附件根目录。先用已有结果生成表格和四张图:

bash analyze.sh

该步骤只读参考数据,用一个CPU核心处理,不启动DFT。完整重算:

sbatch submit.slurm

脚本申请一张P100,顺序运行20个条件,每个1个MPI进程、1个CPU线程、GPU双精度。参考环境为ABACUS3.10.1、GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8、OpenBLAS0.3.30。ABACUS这一构建自带的Libxc是6.2.2,不能套用其他软件扩展的Libxc版本。不要在登录节点执行DFT。本例固定结构、scf_thr=1e-6;截断能和k网格是教学设置,换体系后需自己检查。

1. 与哪个PBE参考比较#

本篇固定Si2结构、PBE赝势、同一套数值原子轨道及2×2×2 k网格,比较LCAO PBE、HSE和PBE0。不要拿PW/PBE和LCAO/HSE的差异全部归因于泛函,也不要跨赝势比较绝对总能量。

同一LCAO模型的能隙和真实自洽/EXX历史

右图包括程序先做半局域计算、再进入杂化循环的阶段变化,纵轴是各自原生能量与自身最终值之差;不是固定泛函下始终单调的误差曲线,也不是速度对比。

2. 完整HSE输入#

展开完整 INPUT、STRU、KPT

INPUT#

INPUT_PARAMETERS
suffix tutorial
calculation scf
basis_type lcao
ecutwfc 40
scf_thr 1e-6
scf_nmax 200
ks_solver elpa
device gpu
precision double
cal_force 1
cal_stress 0
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
dft_functional hse
exx_hybrid_alpha 0.25
out_chg 1
nbands 16
exx_hse_omega 0.11

STRU#

ATOMIC_SPECIES
Si 28.0855 Si_ONCV_PBE-1.0.upf

NUMERICAL_ORBITAL
Si_gga_8au_100Ry_2s2p1d.orb

LATTICE_CONSTANT
10.26

LATTICE_VECTORS
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0

ATOMIC_POSITIONS
Direct
Si
0.0
2
0 0 0 1 1 1
0.25 0.25 0.25 1 1 1

KPT#

K_POINTS
0
Gamma
2 2 2 0 0 0
  • dft_functional hse选择屏蔽杂化;pbe0选择另一种全范围杂化。
  • exx_hybrid_alpha 0.25是本例精确交换比例。
  • exx_hse_omega 0.11使用对应接口的倒Bohr单位,不能把其他代码以Å⁻¹表示的数值直接照搬。
  • 本例保持默认的两级/分离EXX迭代方式,并检查最后的杂化阶段是否收敛,而不是只看前面的PBE预收敛。

普通PBE参考应直接使用dft_functional pbe。不要只把HSE混合系数改成0,就假定得到与独立PBE完全一致的参考输入。

HSE的屏蔽参数在不同实现中的定义和单位要核对,参见Libxc6.2.2 HSE定义与参数。

3. 看最后的EXX和收敛信息#

grep -E 'E_exx|convergence is achieved|!FINAL_ETOT_IS' work/cases/si-lcao-hse/OUT.tutorial/running_scf.log | tail -n 8

E_exx必须在杂化阶段实际出现,最后的收敛标记应对应完成后的杂化迭代。只找到前面一行PBE的收敛信息,并不足以证明杂化计算已经结束。

同一LCAO模型 总能量,eV/原胞 已采样k点的KS能隙,eV
si-lcao-pbe -211.498289679 0.974055
si-lcao-hse -212.274619167 2.183287
si-lcao-pbe0 -211.746455311 2.793569

这些是固定粗网格下的实际结果,用于学习完整操作,不按总能量最低来判断哪个泛函最准确。已采样k点的能隙也不是收敛基本带隙。

python - <<'PY'
import csv
with open('reference/analysis/conditions.csv') as f:
    for r in csv.DictReader(f):
        if r['name'].startswith('si-lcao'):
            print(r['name'],r['energy_eV'],r['sampled_gap_eV'])
PY

研究自己的体系时,先稳定半局域SCF,再核对赝势/轨道、EXX截断与数值阈值、k点、带数和最终循环收敛;不要把本例的一套参数当作所有体系的推荐值。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗