VASP分子与二维真空测试
水分子与MoS2共8个实际条件,保持内部几何、比较尺寸影响并解释晶胞高度与真空间隙。
阅读本篇目录
分子与二维材料通常放在周期性晶胞中计算,因此要检查周期镜像之间的影响。本例分别改变水分子的立方盒边长和MoS2的晶胞高度,保持笛卡尔内部几何不变。
下载后先查看结果#
下载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. 依次运行两种真空扫描#
sbatch run.slurm vacuum
水分子盒边长为10、12、15、18Å;结束后:
bash analyze-new.sh vacuum
sbatch run.slurm vacuum2d
MoS2晶胞高度为15、20、25、30Å,面内晶胞和原子层厚度固定;结束后:
bash analyze-new.sh vacuum2d
head analysis-new/vacuum2d/results.csv
改变盒子时,本工作流先保持笛卡尔原子间矢量,再平移到盒中居中。不能只改POSCAR晶胞而保持所有分数坐标原样,否则可能把水分子或原子层一起拉伸。
2. 水分子的实际输入#
18Å盒子的POSCAR:
H O
1.0000000000000000
18.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 18.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 18.0000000000000000
H O
2 1
Direct
0.5000000010091792 0.5426357912053908 0.4834395933794760
0.5000000010139720 0.4573642087946092 0.4834395938815593
0.4999999989860280 0.4999999996385176 0.5165604066205242
Cartesian
0.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 0.0000000000000000
INCAR:
SYSTEM = vacuum-18
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
孤立分子在本例使用Gamma单点:
Convergence tutorial fixed structure
0
Gamma
1 1 1
0 0 0

差值以18Å盒为有限参照:
| 参数 | E₀ / eV | ΔE₀ / meV·atom⁻¹ | 压力 / GPa | 最大力 / eV·Å⁻¹ |
|---|---|---|---|---|
| 10 | -14.23659568 | -0.970487 | -0.00888 | 0.012186 |
| 12 | -14.23534642 | -0.554067 | -0.00502 | 0.015481 |
| 15 | -14.23428678 | -0.200853 | -0.00251 | 0.017824 |
| 18 | -14.23368422 | 0.000000 | -0.00144 | 0.018780 |
表格按每原子归一化;水分子有3个原子,要换成每个水分子的能量差应乘3。15与18Å相差0.200853meV/atom,即约0.602560meV/个水分子。本例没有添加偶极修正,显示的是这一组未修正周期盒的实际变化;18Å不是已证明的无限真空极限。
3. MoS2二维真空的实际输入#
30Å晶胞高度的POSCAR:
Mo S
1.0000000000000000
3.1830562896538486 0.0000000761206557 0.0000000000000000
-1.5915280796073561 2.7566076466831655 0.0000000000000000
0.0000000000000000 0.0000000000000000 30.0000000000000000
Mo S
1 2
Direct
0.9999999998368795 0.9999999987702611 0.4999999998624562
0.6666666634277522 0.3333333309185883 0.5519893438394563
0.6666666700686971 0.3333333369778219 0.4480106561605436
Cartesian
0.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 0.0000000000000000
INCAR:
SYSTEM = vacuum2d-30
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只在面内加密,真空方向取1:
2D fixed geometry vacuum tutorial
0
Gamma
6 6 1
0 0 0

差值以30Å为有限参照:
| 参数 | E₀ / eV | ΔE₀ / meV·atom⁻¹ | 压力 / GPa | 最大力 / eV·Å⁻¹ |
|---|---|---|---|---|
| 15 | -21.84141143 | -0.383427 | 0.00151 | 0.021714 |
| 20 | -21.84079984 | -0.179563 | 0.00147 | 0.021711 |
| 25 | -21.84048706 | -0.075303 | 0.00097 | 0.021723 |
| 30 | -21.84026115 | 0.000000 | 0.00116 | 0.021682 |
晶胞高度与真空间隙不是同一个量:
| 晶胞高度 Lz / Å | 原子层z向厚度 / Å | 跨周期真空间隙 / Å |
|---|---|---|
| 15 | 3.119361 | 11.880639 |
| 20 | 3.119361 | 16.880639 |
| 25 | 3.119361 | 21.880639 |
| 30 | 3.119361 | 26.880639 |
这里的间隙按Lz−(zmax−zmin)定义,不包含电子云外延。25与30Å的单点能量相差0.075303meV/atom;如果目标是功函数、带边、吸附能或偶极响应,应对相应目标另做尺寸检查,不能只看本征单层总能量。
4. 迁移到自己的结构#
module load ase/3.29.0
python - <<'PYCODE'
from ase.io import read, write
atoms = read('POSCAR')
cell = atoms.cell.array.copy()
cell[2] *= 30.0 / atoms.cell.lengths()[2]
atoms.set_cell(cell, scale_atoms=False)
atoms.center(axis=2)
write('POSCAR-vacuum30', atoms, format='vasp', direct=True, vasp5=True)
PYCODE
这段用于第三晶矢沿真空方向的常见二维结构;若晶胞倾斜、层跨边界或真空方向不沿第三晶矢,先调整结构表示再修改。写入新文件后用VESTA检查,确认层厚与键长未被改变,再放入新任务目录。随包MoS2输入来自固定几何处理,4个高度均保持同一面内晶胞和笛卡尔原子间矢量。
不对真空方向使用三维各向同性晶胞优化。非对称吸附、极性层或带电模型要另外处理偶极/电荷与有限尺寸问题,不能仅把真空无限加大;可继续看表面与界面及真空参照带边。
环境与输入约定#
本组实算使用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静电修正、VASP KPOINTS。