VASP截断能与k点收敛
Si两原子原胞的8个实测条件,完整输入、提交、提取、作图与继续加密步骤。
阅读本篇目录
先固定结构、赝势和其他参数,只改变一个数,再比较你关心的能量、力、应力或带隙。这里用Si两原子原胞演示截断能与k点测试,先看已算好的结果,再按步骤复算。
下载后先查看结果#
下载20个收敛条件的输入、实测输出与绘图资料。将下载文件保存为convergence.zip,上传到自己的工作目录,然后执行:
unzip convergence.zip -d convergence
cd convergence
bash analyze.sh
head analysis/results.csv
这一步只提取随包提供的实际输出并画图,不启动VASP。analysis/RESULTS.json按扫描类型整理结果,figures/保存高清图。结构图的各面板使用独立显示比例。

准备自己的复算#
bash prepare.sh
cat inputs/cutoff-550/input-check.log
prepare.sh按POSCAR元素顺序读取集群上已有且你有权使用的PAW PBE6.4赝势,Mo采用Mo_pv;POTCAR不随公开附件提供。然后实际调用vaspkit -task 108检查输入。已有不同的POTCAR会保留并停止,不会覆盖。新任务的四文件生成可参照VASPKIT输入准备和VASP输入文件准备;101生成INCAR模板、102生成SCF网格、103生成POTCAR、108检查输入。这个资料包已经准备好各组不同的扫描网格,不要再用102覆盖它们。
使用yskit取得适合自己账户、P100资源和VASP模块的提交脚本,核对随包run.slurm中的分区。原生计算经Slurm运行;不要在登录节点直接执行run.sh。各算例采用单GPU、1MPI、1CPU,组内顺序运行。
1. 先跑截断能,再跑k点#
sbatch run.slurm cutoff
squeue -u "$USER"
cutoff组固定6×6×6 Gamma网格,分别计算350、450、550、650eV。第一组结束后:
bash analyze-new.sh cutoff
head analysis-new/cutoff/results.csv
sbatch run.slurm kmesh
kmesh组固定550eV,分别计算2³、4³、6³、8³ Gamma网格。结束后:
bash analyze-new.sh kmesh
head analysis-new/kmesh/results.csv
分析结果进入analysis-new/组名/,新图进入figures-new/组名/,与随包原始结果分别保存。同名work/目录已有结果时程序会停止;保留结果后用新解压目录进行下一次扫描。每组只改变目标变量,不能一边加密k点一边改变原子坐标、赝势或泛函。
2. 实际输入#
Si两原子原胞POSCAR:
Si
1.0000000000000000
0.0000000000000000 2.7344629562984917 2.7344629562984917
2.7344629562984917 0.0000000000000000 2.7344629562984917
2.7344629562984917 2.7344629562984917 0.0000000000000000
Si
2
Direct
0.0000000000000000 0.0000000000000000 -0.0000000000000000
0.2500000000000000 0.2500000000000000 0.2500000000000000
550eV条件的完整INCAR:
SYSTEM = cutoff-550
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -0.02
IBRION = -1
NSW = 0
ISIF = 2
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
ISYM = 2
NPAR = 1
截断能扫描的KPOINTS:
Convergence tutorial fixed structure
0
Gamma
6 6 6
0 0 0
只改变INCAR中的ENCUT即可切换截断能。k点扫描保持550eV,改变KPOINTS第四行;8³的实际文件为:
Convergence tutorial fixed structure
0
Gamma
8 8 8
0 0 0
3. 对照实测结果#

截断能组以650eV为有限参照:
| 参数 | E₀ / eV | ΔE₀ / meV·atom⁻¹ | 压力 / GPa | 最大力 / eV·Å⁻¹ |
|---|---|---|---|---|
| 350 | -10.82431074 | 1.113630 | 0.00638 | 0.000000 |
| 450 | -10.82637567 | 0.081165 | 0.04980 | 0.000000 |
| 550 | -10.82637057 | 0.083715 | 0.05184 | 0.000000 |
| 650 | -10.82653800 | 0.000000 | 0.06144 | 0.000000 |
k点组以8³为有限参照:
| 参数 | E₀ / eV | ΔE₀ / meV·atom⁻¹ | 压力 / GPa | 最大力 / eV·Å⁻¹ |
|---|---|---|---|---|
| 2 | -8.33688246 | 1254.614695 | 7.42209 | 0.000000 |
| 4 | -10.66521919 | 90.446330 | 0.56501 | 0.000000 |
| 6 | -10.82637057 | 9.870640 | 0.05184 | 0.000000 |
| 8 | -10.84611185 | 0.000000 | -0.00453 | 0.000000 |
两张图的纵轴都按每原子归一化,k点图用对称对数坐标同时显示接近0和很大的差值。1meV/atom虚线只是本例用于讲解的判据,需要按自己的目标调整。
350与650eV相差1.113630meV/atom,550与650eV相差0.083715meV/atom;450和550eV不是严格单调的。这里的截断能对比固定6³网格,不能据此把其他误差也视为已消除。
6³与8³仍相差9.870640meV/atom,本例的8³不能据此宣布达到1meV/atom收敛。下一步应继续10³、12³等更密网格,再比较相邻点,并用最终选择的组合检查实际目标性质。细胞大小、金属占据、所用泛函改变后都应重新检查。
4. 手工检查与继续加密#
grep 'energy(sigma->0)' work/kmesh-8/OUTCAR | tail -n 1
grep 'EDIFF is reached' work/kmesh-8/OUTCAR
tail -n 5 work/kmesh-8/OSZICAR
若要继续加密,可复制一个已完成条件的三个文本输入到新目录,准备相同POTCAR,编辑KPOINTS第四行为10 10 10或12 12 12,经自己的Slurm脚本重新运行。随包表格只包含实际完成的2³至8³,继续加密的数值由你新任务提取;不要把原参考表当成重算输出。
mkdir si-k10
cp inputs/kmesh-8/{INCAR,POSCAR,KPOINTS,POTCAR} si-k10/
cd si-k10
nano KPOINTS
保持Gamma和末行0 0 0不变。再使用yskit复制提交脚本、核对VASP版本与分区后sbatch 实际脚本名.sh。比较能量差、吸附能时,应对相应能量差本身检查,不能仅检查一个体系的总能量。
环境与输入约定#
本组实算使用VASP6.6.1的P100构建,NVHPC25.3/CUDA12.8;赝势为PAW PBE6.4。输入检查使用VASPKIT1.5.1,分析和绘图使用ASE3.29.0、NumPy2.3.5、Matplotlib3.11.2。本例是小体系操作参考,没有用于CPU平台性能对比。
EDIFF=1E-6控制电子收敛。模板保留EDIFFG=-0.02,但本组NSW=0,不执行原子位置或晶胞优化。所有差值来自固定几何下的单点计算;若需要优化结构,先看结构优化。电子收敛、离子力收敛和目标性质对输入参数的收敛是三个不同检查。
表格中的E₀是OUTCAR的energy(sigma->0),不是直接把TOTEN当作所有场景通用能量。压力和力与所用展宽自由能一致。每组用有限采样点作参照,参照点的差值为0由定义产生,不等于无限精度极限。
方法参考:VASP ENCUT、VASP KPOINTS。