VTST:从能级与DOS判断带隙
用真实硅和钴输出演示能级读取,区分半导体有限采样带隙与金属占据阈值跨度。
阅读本篇目录
读取带隙时,要同时看原始能级、占据和DOS,不能只看旧脚本打印的一个数字。本篇用Si₂与Co的真实输出说明实际操作。
1. 下载并查看图和数据#
下载实际DOSCAR、结构、输入及读取绘图程序,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd vtst-DOS-analysis
bash read.sh
bash plot.sh
默认读取附带结果,CSV在 analysis-read,图片在 figures。需要重新执行轻量后处理时运行 bash run.sh,随后用 bash read.sh work-new 和 bash plot.sh 读取新结果;不会重新提交VASP。

2. 在OUTCAR里先找什么#
grep -n -E 'E-fermi|val. band max|cond. band min|fundamental gap' inputs/Si2/OUTCAR
sed -n '/E-fermi/,+28p' inputs/Si2/OUTCAR
对应行的 band energies 为能量(eV),occupation 为占据。Si₂的非自旋极化满占据可达2;自旋极化Co按两个自旋通道分别输出,不能把满占据上限混用。
资料包 read.py 从最后一组实际能级表读取每个k点的记录,以本例固定占据阈值0.01区分两侧,并取所选已占据能级最大值与未占据能级最小值:
Si2 occupied maximum = 5.9383 eV
Si2 unoccupied minimum = 6.5148 eV
sampled span = 0.5765 eV
这是该有限k点采样的结果,能级表本身只有相应输出精度。本篇没有做完整布里渊区带边搜索或网格收敛。
3. 为什么不直接照抄旧bandgap.pl输出#
VTST 1040的 bandgap.pl、homolumo.pl 按旧输出布局读取。在本篇两份新版VASP输出中,前者没有正确得到全部带边,后者仅打印了带数。因此不要将“命令没有报错”当作已经正确读出HOMO、LUMO或带隙。
本资料包的读取命令直接处理附带的真实能级表:
bash read.sh
cat analysis-read/VTST-DOS-eigenvalue-thresholds.csv
相同的数值来源、占据阈值与记录条数都写入表格;可打开 read.py 查看读取规则,再处理自己的输出。使用其他后处理工具时,也应至少与OUTCAR的带边和占据交叉看一遍。
4. 为什么Co的0.042eV不代表金属有带隙#
Co两自旋通道合计读取15624条能级。按相同0.01占据阈值,边界能量差为约0.0420eV;但费米能附近总DOS并未消失,Co仍是金属。这种由有限k采样、展宽和占据阈值产生的间隔,不能解释成材料禁带。
head -6 inputs/Co/DOSCAR
cat inputs/Co/KPOINTS
本例电子温度/展宽、自旋设置与k网格保存在INCAR、KPOINTS中。讨论材料是否为半导体、金属或半金属,应结合自旋分辨能带和DOS;不能只按单一占据阈值作判断。
5. 换成自己的体系时#
先保留同一次计算的OUTCAR、DOSCAR、INCAR、POSCAR和KPOINTS;确认ISPIN、占据规则及文件完整性;读取全部采样k点的能级;再结合DOS判断带边附近是否确实存在零态密度区间。需要收敛数值时,再提高k点密度并按任务选择展宽。
下载本例能级与占据阈值结果。DOS拆分、费米能平移和符号约定见DOS操作教程。