VASP计算能带中如何指定费米能级在带隙正中
EFERMI = MIDGAP 的原理、用法与注意事项
在做半导体材料的能带计算时,很多人会遇到一个困惑:明明体系有带隙,但 VASP 输出的费米能级却偏向价带或导带,甚至落在带内。后处理程序因此把半导体误判为金属。VASP 6.4 引入的 EFERMI = MIDGAP 标签,正是为了解决这个问题。本文介绍它的原理、使用方法和常见注意事项。
一、问题背景
对于半导体或绝缘体,电子正好填满价带,导带全空。从物理上讲,费米能级在带隙内的具体位置并不影响总能量和电子密度,因此它不是唯一确定的。
VASP 默认根据电子数积分来确定费米能级。由于展宽方法(ISMEAR、SIGMA)和积分区间选择的不同,输出到 OUTCAR 中的 E-fermi 可能偏向价带顶或导带底,甚至在带隙很窄时落入带内。
这会给后处理带来麻烦。许多能带绘图和数据分析程序(如 VASPKIT、AMSET、pyprocar)会依据费米能级相对于带隙的位置来判断材料是半导体还是金属。如果费米能级落在带内,程序就会误判。
二、EFERMI = MIDGAP 的作用
EFERMI = MIDGAP 的作用只有一个:在体系存在明确带隙的前提下,强制 VASP 将费米能级放置在带隙的正中央。
它不会改变体系的电子结构,不会打开或关闭带隙,也不会改变总能量。它只是改变了费米能级这个参考点的位置。
三、工作原理
设置 EFERMI = MIDGAP 后,VASP 在自洽计算结束时会执行以下步骤:
第一步:扫描计算得到的本征值,寻找价带顶(VBM)和导带底(CBM)。
第二步:判断费米能级附近是否存在一个连续、干净的禁带。如果存在,记录 VBM 和 CBM 的能量。
第三步:计算带隙中点 E_mid = (E_VBM + E_CBM) / 2。
第四步:将 E_mid 作为费米能级输出到 OUTCAR、DOSCAR、vasprun.xml 等文件中。
如果 VASP 在费米能级附近找不到干净的禁带(例如体系是金属,或带隙中有杂质态),它会放弃 MIDGAP 逻辑,回退到默认的基于电子数积分的方式。此时费米能级仍会落在带内,这是正常的回退行为,不是标签失效。
四、使用方法
4.1 版本要求
EFERMI = MIDGAP 需要 VASP 6.4 或更高版本。低于 6.4 的版本会忽略该标签,费米能级仍按默认方式处理。
可以在 OUTCAR 中搜索 EFERMI 来确认标签是否被读取。如果搜索不到相关输出,说明当前 VASP 版本不支持。
4.2 INCAR 设置
在 INCAR 中添加一行:
EFERMI = MIDGAP
该标签在自洽计算(SCF)中生效,能带计算和非自洽计算不需要重复设置。SCF 计算会输出一个费米能级,MIDGAP 会在此过程中生效,将费米能级置于带隙中央。这是获取体系“标准”费米能级的主要步骤。
NSCF 计算(通常设置 ICHARG = 11)也会输出费米能级。此时,MIDGAP 同样会生效,VASP 会根据当前固定电荷密度下的能带结构,将费米能级置于带隙中央。
需要特别注意的是,能带计算中 MIDGAP 给出的费米能级,可能与 SCF 计算中的结果不完全一致。这是因为 SCF 和 NSCF 使用的 k 点网格不同(SCF 用均匀网格,NSCF 用高对称路径),VASP 基于不同的本征值集合来判断带隙中点,结果可能存在微小差异。VASP 官方论坛的开发者明确指出,绘制能带结构时,应从基于 k 网格的自洽计算中获取费米能级,而不是从基于高对称路径的能带计算中获取。
4.3 建议搭配的参数
为了让 MIDGAP 更准确地定位带隙,建议同时设置以下参数:
ISMEAR = -5 NEDOS = 3000 EMIN = -10 EMAX = 10
ISMEAR = -5 使用四面体方法,对半导体带隙附近的积分更准确,能避免展宽带来的虚假态。
NEDOS 增大态密度能量网格密度,EMIN 和 EMAX 覆盖带隙附近区域,有助于 VASP 更准确地找到 VBM 和 CBM。
4.4 验证是否生效
计算完成后,用以下命令检查费米能级:
grep "E-fermi" OUTCAR | tail -1
在后续的能带计算中,不要使用 MIDGAP,而是将 EFERMI 直接设置为 SCF 计算得到的那个数值(例如 EFERMI = 5.234)。这样能确保能带图的费米能级与 SCF 结果完全一致。
图片
右边是加了EFERMI = MIDGAP 的计算结果,左图则为考虑
五、注意事项
5.1 体系必须存在干净带隙
MIDGAP 的前提是体系有一个连续、无杂质态的禁带。如果填充、掺杂或缺陷在带隙中引入了杂质态,或者体系本身就是金属,VASP 找不到干净带隙,MIDGAP 就会回退到默认行为。此时费米能级仍在带内,这是物理上正确的反映。
5.2 后处理程序可能不读取 OUTCAR 的费米能级
有些后处理程序会从 EIGENVAL、DOSCAR 或 vasprun.xml 中重新计算费米能级,而不是直接读取 OUTCAR 中的 E-fermi。如果发现 MIDGAP 设置后费米能级没变,先确认程序读取的是哪个文件。
5.3 自洽计算必须收敛
如果 SCF 没有收敛,本征值和电荷密度都不可靠,MIDGAP 定位的带隙中点也会出错。计算完成后先检查 OSZICAR 中的能量变化是否已小于 EDIFF。
5.4 不改变总能量和电子结构
MIDGAP 只影响费米能级这个参考点的输出位置。它不会改变总能量、力、应力、电荷密度和本征值。可以放心使用,不会影响其他计算结果。
5.5 与 EFERMI 数值设置的区别
EFERMI 也可以直接指定一个数值,例如 EFERMI = 5.2。这会强制把费米能级设为你给定的值。如果体系电子数因此改变,可能影响总能量。除非你明确知道目标费米能级的数值,否则推荐使用 MIDGAP,更安全、更自动。
六、常见问题
设置了 MIDGAP,费米能级还是落在带内
可能原因:
-
VASP 版本低于 6.4,标签被忽略。
-
体系本身没有干净带隙,比如填充或掺杂引入了杂质态。
-
SCF 没有收敛,带隙定位不可靠。
-
后处理程序读取的不是 OUTCAR 中的费米能级。
填充体系为什么 MIDGAP 效果不明显
填充原子可能在带隙中产生杂质态,导致费米能级被钉扎。此时应先用 DOSCAR 确认费米能级处是否有态密度。如果有,说明体系在计算精度下已不是干净半导体,需要考虑加 U、使用杂化泛函或调整填充浓度。