ABACUS 矩阵到PYATB能带与PDOS
原生H/S矩阵、能带、总态密度、轨道投影和完整终端实操。
阅读本篇目录
下载真实Si矩阵、8个PYATB条件、离线依赖和绘图脚本。解压进入附件根目录,先直接提取已有结果:
bash analyze.sh
首次运行会用附件内已固定版本的依赖,在本目录创建 venv,不修改公共环境;图在 reference/figures,数据在 reference/analysis。新解压目录重新执行全部PYATB计算:
sbatch submit.slurm
模板在分配资源中建立 work,顺序运行8个分析条件,再核对与画图。P100模板这里分配主机资源,实际PYATB使用1个CPU进程、1线程,不是GPU加速测试。它读取已有ABACUS矩阵,不重新运行DFT;已有 work 时请新解压,以免覆盖结果。
环境为PYATB1.1.2、mpi4py4.1.1、OpenMPI5.0.10,Python3.11及ASE3.29.0环境内的NumPy/SciPy用于后处理。离线轮子和哈希随附件提供。ABACUS矩阵来源为集群真实Si2计算:3.10.1、LCAO/PBE、80 Ry、8 Bohr DZP、26个NAO、8价电子、电子k网格2³;这些是有限采样教学结果,不能当作已经收敛的材料光谱。
1 ABACUS要先输出什么#
已有LCAO自洽输入中加入:
out_mat_hs2 1
out_mat_r 1
完成SCF后,H(R)、S(R)与r(R)分别在 data-HR-sparse_SPIN0.csr、data-SR-sparse_SPIN0.csr、data-rR-sparse.csr。H/S足以计算能带;本专题光学还需要r矩阵。赝势、轨道、晶胞、元素顺序和费米能必须来自同一套计算,不能混用不同目录的矩阵。
在已经准备好PYATB环境并分配资源的终端,官方工具可生成起始输入:
module load openmpi/5.0.10-cuda12.8
source venv/bin/activate
pyatb_input -i scf -o bands --band --knum 20
这里 scf 是你自己的ABACUS计算目录;工具会在该目录下建立输出目录。本例已实际使用该工具从真实SCF日志提取费米能7.2166391121 eV、4条占据带和8电子,并生成路径。附件的正式输入进一步明确采用Γ–X–W–L–Γ,保留每段20个插值间隔,共81点。不同工具的路径计数约定可能不同,以输出的实际k点为准。
2 看完整PYATB能带输入#
cat inputs/si-bands/Input
INPUT_PARAMETERS
{
nspin 1
package ABACUS
fermi_energy 7.2166391121
fermi_energy_unit eV
HR_route ../../matrices/data-HR-sparse_SPIN0.csr
SR_route ../../matrices/data-SR-sparse_SPIN0.csr
rR_route ../../matrices/data-rR-sparse.csr
HR_unit Ry
rR_unit Bohr
max_kpoint_num 2000
}
LATTICE
{
lattice_constant 1.0
lattice_constant_unit Angstrom
lattice_vector
0.0 2.714679090192505 2.714679090192505
2.714679090192505 0.0 2.714679090192505
2.714679090192505 2.714679090192505 0.0
}
BAND_STRUCTURE
{
wf_collect 1
kpoint_mode line
kpoint_num 5
high_symmetry_kpoint
0 0 0 20
0.5 0 0.5 20
0.5 0.25 0.75 20
0.5 0.5 0.5 20
0 0 0 1
kpoint_label G,X,W,L,G
}
PYATB输入文件名是首字母大写的 Input;ABACUS的 INPUT 不可直接当作PYATB输入。矩阵路径是相对目录,HR_unit Ry、rR_unit Bohr分别指定原始单位;晶格向量已由输入工具转换为Å,不要再乘一次Bohr换算。8电子的非自旋极化体系对应4条占据带,nspin 1带有自旋简并。
若想在已完成本地环境准备的资源中单独运行一个输入,可按下列方式新建分析目录;这与整套模板二选一:
module load openmpi/5.0.10-cuda12.8
python3 -B setup.py
cd work/cases/si-bands
../../../venv/bin/pyatb
完成后能带在 Out/Band_Structure/band.dat,k坐标在 kpt.dat,原生绘图脚本是 plot_band.py。完整模板会为每个目录记录执行结果并继续后面的条件,建议首先使用 sbatch submit.slurm。

图显示前8条带,数值核对覆盖全部26条、全部81点:独立求解广义本征问题 H(k)C=S(k)CE 与原生输出最大差约5×10⁻⁹ eV。所有曲线使用同一个SCF费米能作零点,没有分别平移。C†SC、S矩阵正定性和非高对称点能带斜率也分别核对。这个一致性说明提取与单位相符,不代表稀疏SCF采样已满足材料收敛。
3 计算总态密度与轨道投影#
实际PDOS输入为:
cat inputs/si-pdos6/Input
INPUT_PARAMETERS
{
nspin 1
package ABACUS
fermi_energy 7.2166391121
fermi_energy_unit eV
HR_route ../../matrices/data-HR-sparse_SPIN0.csr
SR_route ../../matrices/data-SR-sparse_SPIN0.csr
rR_route ../../matrices/data-rR-sparse.csr
HR_unit Ry
rR_unit Bohr
max_kpoint_num 2000
}
LATTICE
{
lattice_constant 1.0
lattice_constant_unit Angstrom
lattice_vector
0.0 2.714679090192505 2.714679090192505
2.714679090192505 0.0 2.714679090192505
2.714679090192505 2.714679090192505 0.0
}
PDOS
{
stru_file STRU
kpoint_mode mp
mp_grid 6 6 6
e_range -10 140
de 0.025
sigma 0.15
}
mp_grid 6 6 6是PYATB对矩阵模型的插值网格,不会补做新的6³电子SCF。sigma 0.15用于高斯展宽,其定义为 exp[-(ΔE/σ)²]/(σ√π),不能直接等同于标准差,也不是SCF的电子温度。
head -n 8 reference/cases/si-pdos6/Out/PDOS/TDOS.dat
TDOS.dat是能量/eV与总DOS;PDOS.dat按26个原子轨道保存投影。原生还生成 PDOS.xml 与绘图脚本。附件分析把同一套Si的s、p、d轨道分别求和,没有把投影当成独立概率。

Mulliken投影采用非正交基,个别轨道DOS可出现负值,本例最小单轨道值约−0.035 states/eV;原始符号保留,不进行裁零。26个轨道之和仍与总DOS一致。
本例能量窗口−10到140 eV未包含全部高能未占据态:6³网格的窗口积分约51.037个自旋配对态,而完整26轨道空间对应52态。这个差值来自窗口及原生选取方式,不应通过强制归一化改成52。实际作图聚焦费米能附近,完整窗口和边界高斯积分保留在结果文件。
4 最后得到什么#
bash analyze.sh
除原生能带/PDOS外,还得到独立矩阵比较、轨道求和、网格/展宽对照及高清图。自己的计算先保持H/S/r、STRU与轨道文件配套,再分别检查SCF参数和插值网格;增加PYATB网格不能弥补未收敛的原始SCF。原生工具用法可查PYATB官方安装与环境说明。