pymatgen专题

pymatgen能带、投影与自旋DOS

用Si、Cu和Fe真实VASP输出读取、绘图并核对能量零点。

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

下载输入、实测结果和完整脚本。在解压目录运行 bash run.sh,结果写入 work/;reference/保留原始结构与CSV,脚本不会自动提交新的电子结构计算。

1 读取Si的实际能带#

module load pymatgen/2026.9.24
python - <<'READ'
from pymatgen.io.vasp.outputs import Vasprun
v = Vasprun('inputs/bands/vasprun.xml',
            parse_potcar_file=False, parse_projected_eigen=True)
b = v.get_band_structure(kpoints_filename='inputs/bands/KPOINTS',
                         line_mode=True)
print('k点/能带:', len(b.kpoints), b.nb_bands)
print('参照能:', b.efermi)
print('采样路径上的间隙:', b.get_band_gap())
READ

本例为40个k点、32条带,来自Γ–X与X–L两条每段20点的路径;费米参照5.8960928 eV,路径采样所得间隙0.6104 eV。它不是全布里渊区细网格搜索,也没有加入准粒子修正,不能直接当作实验带隙。

本例前置VASP计算ENCUT=550 eV、EDIFF=1E-6、LORBIT=11;实际INCAR、KPOINTS在inputs中。工具读取已完成的输出,不会补做缺失的投影。

2 取得原子投影并画图#

from pymatgen.electronic_structure.core import Spin
p = b.get_projection_on_elements()
print(p[Spin.up][0][0]['Si'])
print(v.projected_eigenvalues[Spin.up].shape)

原生投影数组维度为 (40,32,2,9),对应k点、能带、原子、轨道。接口返回的元素投影按能带和k点索引;不要把两种数组轴顺序混用。资料包的 run_workflows.py将每点本征值、路径距离与同点投影对应后绘图。

Si真实能带及元素投影

图中E−Eref已经减去工具读取的参照,不再重复减费米能。若要以VBM或真空设为零,应先确定对应物理参照,再统一平移所有曲线。

3 Cu总DOS与轨道分解#

python - <<'DOS'
from pymatgen.io.vasp.outputs import Vasprun
v = Vasprun('inputs/cu-dos/vasprun.xml', parse_potcar_file=False)
d = v.complete_dos
print('能量点:', len(d.energies))
print('元素:', d.get_element_dos().keys())
print('轨道:', d.get_spd_dos().keys())
print('第一个原子DOS:', d.get_site_dos(d.structure[0]))
DOS

本例2001个能量点,存在Cu及s、p、d投影。所有元素投影相加与轨道投影相加在约5.3×10⁻¹⁵ states/eV内一致;投影总和与总DOS的最大差约2.0846 states/eV。投影球、间隙区和投影方法会影响归一化,不能强行把投影曲线缩放到与总DOS逐点一致。

Cu总DOS与元素投影

若 get_element_dos()或 get_spd_dos() 返回空集合,要先确认计算设置和XML是否确实写出了投影;只有DOS能量网格并不表示含原子轨道分解。

4 Fe自旋DOS#

v = Vasprun('inputs/fe-dos/vasprun.xml', parse_potcar_file=False)
d = v.complete_dos
up = d.densities[Spin.up]
down = d.densities[Spin.down]

Fe上下自旋DOS

本例2个Fe原子、301个能量点。画图时将下自旋乘−1只是为了左右/上下对照,原始DOS没有负的态密度。磁矩要按占据和积分范围计算,不能把下方曲线的负号解释为负电子数。

5 自己的数据如何替换#

把同一次任务的vasprun.xml和KPOINTS放在同一目录,先检查电子收敛与文件完整性,再按上面代码读取。沿线能带的数据不能代替均匀网格DOS;不同体系或不同计算设置的数据也不能只靠改文件名拼在一起。

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

查看配图

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

100%查看原图 ↗