GPAW专题

GPAW精确交换与非自洽分析

用单电子氢原子实际比较自洽EXX、LDA和非自洽EXX,说明能量参照、轨道能与输出提取。

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

本例先计算一个自旋极化的氢原子,再对比自洽精确交换与基于LDA密度的非自洽EXX。体系只有一个电子,能用解析氢原子能量检查结果,适合先熟悉GPAW的交换计算接口。

1 下载、计算和画图#

下载精确交换实操包,保存为gpaw-exx.zip。新SCF应在已分配的CPU资源中运行;从登录节点提交时,解压后使用sbatch job.slurm,脚本会依次计算、核对和绘图。下面是在CPU资源中直接操作的步骤:

python3 -m zipfile -e gpaw-exx.zip .
cd gpaw-exact-exchange
bash setup.sh
bash run.sh
bash verify.sh
bash plot.sh

例程使用1 MPI进程、1线程。结果在results/VALIDATION.json,图片在plots/;再次运行相同设置会读取已有完整结果。若修改模型或程序,请保留旧结果,并换一个新的示例目录运行。

如果暂时只想查看本篇归档结果,先执行bash setup.sh,再运行:

bash plot.sh --reference

原图会重绘到reference-plots/,不会启动SCF。

2 实际输入与计算顺序#

完整程序是附件中的run.py。自洽EXX的关键输入为:

atoms = Atoms('H', magmoms=[1.0])
atoms.center(vacuum=5.0)       # 实际10×10×10 Å盒
calc = GPAW(
    mode=PW(600),
    mixer={'backend': 'msr1'},
    xc={'name': 'EXX', 'backend': 'pw'},
    convergence={'energy': 1e-6, 'density': 1e-6,
                 'eigenstates': 1e-10},
    maxiter=180, txt='H-EXX.txt'
)
atoms.calc = calc
energy = atoms.get_potential_energy() + calc.get_reference_energy()

magmoms=[1.0]指定单电子自旋状态。这里使用PW精确交换后端;不要把EXX理解成给已经收敛的PBE能量乘一个系数。比较解析原子总能时,还要加上GPAW的PAW原子参照能。

接着用相同盒与600 eV截断做LDA,再调用:

parts = non_self_consistent_energy(lda_calc, 'EXX')
nsc_energy = parts.sum() + lda_calc.get_reference_energy()
eig_lda, v_lda, v_exx = non_self_consistent_eigenvalues(
    lda_calc, 'EXX', snapshot='H-EXX-nsc-snapshot.json'
)
nsc_eigenvalues = eig_lda - v_lda + v_exx

非自洽方法使用既有LDA轨道和密度,计算交换能或轨道修正;它不会自动把密度优化成自洽EXX密度。

3 本集群实际结果#

方法 含PAW参照的总能/eV
解析氢原子参照 −13.60569301
自洽EXX −13.60518482
LDA −13.02748748
LDA密度上的非自洽EXX −13.57799958

自洽EXX与解析参照相差约0.508 meV;非自洽EXX与自洽EXX相差约0.02719 eV。它们分别回答“完全优化该方法”和“在已有密度上作近似修正”的问题。

氢原子的实际精确交换能量与自旋通道

自洽EXX占据自旋通道的轨道能为−13.57965 eV;对应非自洽值为−13.54925 eV。空自旋通道的两个结果差别明显,不能仅因总能接近,就认为所有空态也同样准确。这个例子不把空通道数值解释成氢原子的受束缚光学激发能。

4 终端提取结果#

source env.sh
"$YS_PY" - <<'PYCODE'
import json
from pathlib import Path
f = json.loads(Path('results/VALIDATION.json').read_text())
for key in ['EXX_total_with_PAW_reference_eV',
            'LDA_total_with_PAW_reference_eV',
            'NSC_EXX_total_with_reference_eV']:
    print(key, f[key])
print('SCF spin eigenvalues:', f['EXX_eigenvalues_eV'])
print('NSC spin eigenvalues:', f['NSC_EXX_eigenvalues_eV'])
Path('hydrogen-exchange-summary.txt').write_text(
    '\n'.join(f'{k}: {f[k]}' for k in
              ['EXX_total_with_PAW_reference_eV',
               'NSC_EXX_total_with_reference_eV']) + '\n')
PYCODE

更换体系时,先检查盒、截断、空带和自旋态,再选择适合问题的泛函。本例只说明单电子小体系的接口与参照,不表示其他分子或晶体也已达到同样误差。

程序为GPAW 26.7.0 CPU构建,GCC 13.3、HPC-X/OpenMPI 5、MKL 2023.2、Libxc 7.0.0;PAW数据26.8.0与程序版本独立。接口依据GPAW精确交换说明。需要多体响应时可继续阅读GW与RPA接口和BSE光学响应。

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

查看配图

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

100%查看原图 ↗