示例 06-3:Si 的 mBJ 带隙与能带(METAGGA = MBJ + KPOINTS_OPT)¶
目的¶
- 演示 mBJ(Tran–Blaha 修正的 Becke–Johnson 势)的标准两步流程:PBE 得到 WAVECAR → mBJ 自洽;
- 在 mBJ 这一步用 KPOINTS_OPT 同时得到能带路径(c 自洽时最方便的做法);
- 读取自洽得到的参数 c(
CMBJ)。
对应教程:第6章 杂化泛函与 meta-GGA(§9)。
文件说明¶
| 文件 | 说明 |
|---|---|
INCAR.pbe |
PBE 自洽,写出 WAVECAR;LKPOINTS_OPT = .FALSE. 让这一步忽略 KPOINTS_OPT |
INCAR.mbj |
METAGGA = MBJ、LASPH、ALGO = All、TIME = 0.1、NELM = 200,从 PBE WAVECAR 开始 |
POSCAR |
Si 原胞(a = 5.47 Å) |
KPOINTS |
Γ 中心 6×6×6(两步相同) |
KPOINTS_OPT |
能带路径 L–Γ–X–U|K–Γ,每段 30 点 |
job.slurm |
依次运行 PBE 与 mBJ,结束后打印 CMBJ 与带隙 |
POTCAR |
不提供 |
运行步骤¶
cd VASP/examples/06-mbj-gap-si
cat $VASP_PP_PATH/potpaw_PBE/Si/POTCAR > POTCAR
grep kinetic POTCAR # meta-GGA needs kinetic-energy-density data
sbatch job.slurm
手动运行:
cp INCAR.pbe INCAR && mpirun -np 16 vasp_std > vasp_pbe.out
cp INCAR.mbj INCAR && mpirun -np 16 vasp_std > vasp_mbj.out
预期结果 / 如何检查¶
grep CMBJ OUTCAR | tail -1 # converged c (printed every electronic step)
grep -A12 "Band structure" OUTCAR # gap on the SCF mesh (VASP >= 6.4.3)
grep -c "F=" OSZICAR # 1: single point
import py4vasp
calc = py4vasp.Calculation.from_path(".")
calc.band.plot("kpoints_opt")
print(calc.bandgap.fundamental())
- Tran & Blaha (2009) 报告 mBJ 下 Si 的带隙与实验值(约 1.17 eV)很接近;你得到的值应明显大于 PBE(约 0.5–0.6 eV),落在 1.1–1.2 eV 量级。
- mBJ 的电子步数通常明显多于 PBE(几十到上百步)。
注意事项¶
- mBJ 只是交换势,没有对应的能量泛函:OUTCAR 中的总能和受力没有物理意义,不能用它优化结构或比较能量。
- c 自洽时无法直接从 WAVECAR 续算;需要另算能带或续算时,把
grep CMBJ OUTCAR | tail -1得到的值写入CMBJ固定。 - slab、界面等含真空的体系必须固定
CMBJ(取体相值)或改用METAGGA = LMBJ。 - 收敛困难时按官方建议分三步:PBE → 固定
CMBJ的 mBJ → 不固定CMBJ的 mBJ,每一步从上一步的 WAVECAR 开始。 - mBJ 的能带同样不能用
ICHARG = 11;本例用 KPOINTS_OPT(需 VASP ≥ 6.3、vasp_std)。