示例 16-4:单层 MoS2 的部分电荷(PARCHG)与 STM 模拟¶
目的¶
- 完成"自洽(写 WAVECAR)→
LPARD后处理"的两步流程; - 分别得到占据态(E_F−1 eV … E_F,对应负偏压)和空态(导带底附近,对应正偏压)的部分电荷;
- 用 Tersoff–Hamann 近似生成恒高、恒流 STM 图像:任意版本可用
stm_from_parchg.py,VASP ≥ 6.5 还可以用LPARDH5+ py4vasp。
对应教程:第16章 电荷与成键分析(§7)。
文件说明¶
| 文件 | 说明 |
|---|---|
POSCAR |
2H-MoS2 单层,a = 3.19 Å(接近 PBE 值,实验约 3.16 Å),S–S 层间高度 3.13 Å,c = 23 Å(约 20 Å 真空);未经优化,正式计算请先按 第8章 优化 |
KPOINTS |
Γ 中心 12×12×1 |
INCAR_scf |
自洽:NBANDS = 24(留足空带)、LWAVE = .TRUE. |
INCAR_parchg_occ |
LPARD、NBMOD = -3、EINT = -1.0 0.0 |
INCAR_parchg_empty |
EINT = 1.0 3.0(相对 E_F,需按自己的导带底调整) |
stm_from_parchg.py |
从 PARCHG 生成恒高 / 恒流 STM 图(numpy + matplotlib) |
plot_stm_py4vasp.py |
VASP ≥ 6.5 且 LPARDH5 = .TRUE. 时用 py4vasp 画 STM |
job.slurm |
依次运行自洽、两个 LPARD 步骤和作图 |
POTCAR |
不提供:cat $VASP_PP_PATH/potpaw_PBE/{Mo_pv,S}/POTCAR > POTCAR |
运行步骤¶
cd VASP/examples/16-stm-mos2
cat $VASP_PP_PATH/potpaw_PBE/{Mo_pv,S}/POTCAR > POTCAR
grep -E "TITEL|ZVAL" POTCAR # Mo_pv: ZVAL = 12;S: ZVAL = 6 -> NELECT = 24
sbatch job.slurm
手动执行时的关键命令:
# 自洽
mkdir scf && cp INCAR_scf scf/INCAR && cp POSCAR KPOINTS POTCAR scf/ && cd scf
mpirun -np 16 vasp_std > vasp.out && cd ..
# 先确定窗口:E-fermi、价带顶、导带底
grep E-fermi scf/OUTCAR | tail -1
grep -E "val. band max|cond. band min|fundamental gap" scf/OUTCAR | tail -3 # VASP >= 6.4.3
# 部分电荷(复制 WAVECAR,INCAR 中 ENCUT/NBANDS/ISMEAR 与自洽一致)
mkdir parchg_occ && cp INCAR_parchg_occ parchg_occ/INCAR && cp POSCAR KPOINTS POTCAR scf/WAVECAR parchg_occ/
cd parchg_occ && mpirun -np 4 vasp_std > vasp.out
python3 ../stm_from_parchg.py PARCHG --mode height --height 3.0 --repeat 6 -o stm_height.png
VASP ≥ 6.5.0(HDF5 编译):在 INCAR_parchg_* 中取消 LPARDH5 = .TRUE. 的注释,此时不再写 PARCHG,而是写入 vaspout.h5:
pip install py4vasp kaleido
python3 ../plot_stm_py4vasp.py --mode constant_height --tip-height 3.0 --supercell 6
python3 ../plot_stm_py4vasp.py --mode constant_current --current 1.0 --supercell 6
预期结果 / 如何检查¶
parchg_occ/PARCHG存在且不全为 0:awk 'NR>15 && NF==5' PARCHG | head;- 若空态的 PARCHG 很小或全为 0,说明
EINT窗口落在带隙内:根据cond. band min重新设置(NBMOD = -3时窗口相对 E_F); stm_from_parchg.py会打印恒高平面上的密度范围或恒流模式下的起伏(corrugation);- 单层 MoS2 的模拟图像呈六角对称排列的亮点,亮点位于顶层 S 还是 Mo 上方取决于偏压窗口和针尖高度,请结合能带的轨道投影(
LORBIT = 11)解释,不要只凭图像判断。
注意事项¶
- 只设
LPARD = .TRUE.而不设EINT/IBAND时,VASP 只写一个不含 augmentation 的 CHGCAR,不会产生 PARCHG; - LPARD 步骤的
ENCUT、NBANDS、ISPIN、ISYM、k 点必须与生成 WAVECAR 的自洽计算相同; KPUSE/LSEPK会把 k 点权重设为 1,需要自洽与后处理都用ISYM = -1;- 非共线(SOC)计算不支持 LPARD;
- STM 图像的亮暗与偏压、针尖高度、平滑参数有关,只适合定性比较。