ABACUS 专题

ABACUS:BSE态振幅与k点贡献

读取原生X/Y振幅,理解简并态、跃迁贡献和完整BSE的反共振分量。

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

本篇接续BSE计算步骤,使用同一下载包与已完成的三种条件。无需再次计算GW或重复上篇任务。

下载输入、脚本与实算参考数据。

unzip abacus-bse-wave685-*.zip
cd abacus-bse
bash results.sh
bash plot.sh

以上只读取参考数据并重绘,不启动新计算。重新计算请使用新解压的目录。

1. 先读可读表,再读原始振幅#

head -20 work/tda/OUT.autotest/trans_analysis_singlet_tda.dat
head -5 work/tda/OUT.autotest/Excitation_Amplitude_singlet_1.dat
head -5 work/full/OUT.autotest/Excitation_Amplitude_full_X_singlet_1.dat
head -5 work/full/OUT.autotest/Excitation_Amplitude_full_Y_singlet_1.dat

本例每个核有8个激发态,每个态对应8个电子—空穴跃迁(8个k点×1占据带×1空带)。原生复数写成(实部,虚部)。本组*_1.dat文件内有多个激发态,不能把文件名末尾的1理解成只保存第一个态;应按文件行和态编号读取。

TDA只有X,完整BSE同时有X/Y。完整方程不能直接套用sum(|X|²)=1,应检查相应的sum(|X|²−|Y|²)归一形式。

2. 用Python读取与求模方#

下面代码可以在实例目录直接运行:

/public/toolkit/miniconda3/envs/gpumdkit-1.5.8/bin/python - <<'PYCODE'
from pathlib import Path
import re
import numpy as np
p = Path('work/tda/OUT.autotest/Excitation_Amplitude_singlet_1.dat')
x = np.array([[complex(float(a), float(b))
    for a, b in re.findall(r'\(([^,]+),([^\)]+)\)', line)]
    for line in p.read_text().splitlines() if line.strip()])
print('态数、跃迁数:', x.shape)
print('每个TDA态的模方和:', np.sum(abs(x)**2, axis=1))
print('前三个简并态的平均k贡献:', np.mean(abs(x[:3])**2, axis=0))
PYCODE

真实材料若有多条占据带和空带,列索引还包含带编号,需要按程序原生跃迁索引映射回k,v,c。本例恰好每个k点只有一个跃迁,才可以直接把8列视作8个k点。

3. 为什么简并态要一起看#

本例最低三个单重态简并。简并子空间内不同线性组合都可以是合法本征态,单个态的复相位与k点权重可能随求解器变化。图中展示前三个态的平均|X|²,而不是挑一个态作为唯一电子—空穴分布。

完整BSE右图展示sum(|Y|²),用于观察本例的反共振分量。它不是激子实空间尺寸,也不能直接当成某个原子的电荷。

前三个简并单重态的平均k点贡献及完整BSE反共振分量

4. 吸收相关输出如何理解#

ls work/tda/OUT.autotest/trans_*
head -16 work/tda/OUT.autotest/trans_analysis_singlet_tda.dat

表中列出跃迁偶极和原生振子强度。本组矩阵来自小基组接口测试,不能把其振子强度绝对值当作收敛材料吸收谱或据此比较实验峰强。画谱前还需要检查跃迁空间、规范、单位、展宽与足够的态数。

已有数值:reference-data/BSE-excitation-states.csv列出激发能、X/Y归一值和Y模方;BSE-supplied-QP-and-kweights.csv记录上游QP能隙及简并子空间的平均k权重。把参考CSV与自己的结果分开保存,避免把参考输入误认为本次材料的计算输出。

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

查看配图

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

100%查看原图 ↗