QE:按原子与轨道汇总PDOS
用sumpdos的命令行和文件列表实际合并Si的s/p投影,解释LDOS列、费米能平移和输出精度。
阅读本篇目录
下载完整输入、九组工具输出、CSV 和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd qe-density-pdos-tools
module load ase/3.29.0 qe/7.6-8173m
bash read.sh
bash plot.sh
使用 QE 7.6 CPU 工具,构建环境为 Intel oneAPI 2024.2 / Intel MPI 2021.13 与 MKL;后处理使用 NumPy、SciPy 和 Matplotlib。原始数据来自Si 电荷密度导出和Si 能带与投影的实际计算。本篇只做后处理,不重新运行 SCF、NSCF 或 projwfc。
1. 先确认每个文件的列#
原始 projwfc 输出的文件名较长,本包只把四份文件改成容易输入的名字,内容保持原样:
head -n 4 inputs/Si1-s.pdos
head -n 4 inputs/Si1-p.pdos
文件名中的 Si1/Si2 表示原子,s/p 表示该份投影的角动量通道。非自旋极化文件第一列为能量,第二列为该通道的 LDOS;后面的列给出分辨的轨道分量。
sumpdos 读取每份文件的 LDOS 列相加,不会把后面的每个 m 分量再次相加。 对 p 通道,第二列已经是该份 p 投影各 m 分量的合计,不能再把所有列一起累加导致重复计数。
2. 合并两个原子的s或p通道#
mkdir pdos-new
cd pdos-new
cp ../inputs/Si*.pdos .
sumpdos.x Si1-s.pdos Si2-s.pdos \
> Si-s.dat 2> Si-s.log
sumpdos.x Si1-p.pdos Si2-p.pdos \
> Si-p.dat 2> Si-p.log
head -n 5 Si-p.dat
cd ..
标准输出是可用于画图的数据;文件读取说明写入标准错误。本例用 2> 把说明存到日志,避免混进数据文件。输出两列为能量和所选投影态密度。
3. 把所有选定轨道合并#
cd pdos-new
sumpdos.x Si1-s.pdos Si1-p.pdos Si2-s.pdos Si2-p.pdos \
> Si-sp.dat 2> Si-sp.log
cd ..
这里是两 Si 原子的 s+p 投影总和,不应无条件称为完整总 DOS:投影空间是否完备、是否含需要的通道,都由原始 projwfc 与基组决定。本包另附 total-original.pdos,用于对照原计算的投影总和。
4. 文件列表与能量零点#
cd pdos-new
cat > pdos.list <<'EOF'
Si1-s.pdos
Si1-p.pdos
Si2-s.pdos
Si2-p.pdos
EOF
sumpdos.x -f pdos.list -Ef 6.2977 \
> Si-sp-shifted.dat 2> Si-sp-shifted.log
head -n 5 Si-sp-shifted.dat
cd ..
列表每行一个文件。-f 列表与命令行文件名是两种输入方式,不要在一次调用中混合提供。
本例 6.2977 eV 来自原 NSCF 输出的 Fermi energy。-Ef 只令横坐标变成 E−EF,不改变态密度,也不重新计算费米能。换体系应读取自己的计算结果;半导体的带隙内零点选择还应说明采用费米能还是价带顶,不能机械沿用本例数值。

5. 输出精度与数据一致性#
当前 sumpdos 的态密度使用 E11.3 格式,只有三位有效数字;能量也按有限小数位写出。本包保留原始文件及独立求和数据,不把文本末位差异解释成新的物理差别。
所有输入必须有一致的能量网格、顺序、投影定义和自旋约定。当前实现不会完整检查每个文件的能量网格一致性,应先核对自己的数据;不同网格应先做明确的重采样处理。
head -n 8 analysis-read/summed-pdos.csv
bash run.sh
bash read.sh work-new analysis-new
bash plot.sh analysis-new
快捷流程实际执行 s、p、全通道与列表/能量平移四组汇总,结果写入新的 work-new。绘图直接从指定的新结果读取;不重新运行 pw.x 或 projwfc。该版列选择及参数见 QE 7.6 sumpdos 源码。