VASP单点外加D4:文件、单位与防重复
先计算IVDW=0的PBE单点,再对相同POSCAR独立计算D4并且只加一次。
阅读本篇目录
本篇适用于已有纯PBE单点、希望对同一固定结构做一次D4能量补充的情况。使用独立程序读POSCAR后处理,不会让VASP获得原生D4的优化、MD、应力或声子能力;这些工作需要主程序真正启用对应接口。
下载输入、真实参考结果与绘图脚本。解压后进入资料包所在目录,先画已有结果:
bash view.sh
图片和逐条件数值分别写入 analysis/figures、analysis/bookkeeping.csv。脚本使用集群的 ASE3.29.0、NumPy、Matplotlib 环境,画参考数据不提交计算。结果目录已存在时,指定一个新目录:
bash view.sh --output another-analysis
本组在鸢算科技集群实际计算了中性水、相同几何的带电水,以及氧原子间距2.9 Å、4.2 Å的两个水分子对。水分子对按同一朝向侧向摆放,属于固定结构的能量记账示例,没有做氢键构型优化。带电水总电荷为+1、多重度为2;其余为中性单重态。不同主程序使用不同基组与电子芯层处理,只比较各自开关D4的差,不能直接相减两种软件的绝对DFT能量。

1 先确认是否已经加过色散#
VASP原生D4使用 IVDW=13,还要求二进制链接相应DFT-D4库。现有默认6.6.1 CPU/P100/V100构建未启用原生D4,应选择明确支持的主程序或另行准备链接D4的构建,不能只改一个INCAR关键词。上游6.6.0起支持DFT-D4新4.x API;老版本的原生接口需注意3.7.0及更早API的兼容范围,具体按官方说明选择。
本文实算使用 vasp/6.5.1-p100,IVDW=0,随后由独立DFT-D4 4.2.0读取文件。独立文件后处理不链接VASP,和原生库API兼容问题不同。
2 准备完整VASP输入#
POTCAR由有合法授权的PBE O、H势依次拼接,顺序与POSCAR保持一致。下载包不包含势文件。其余三个输入如下。
INCAR:
SYSTEM = Neutralwater plainPBE externalD4post
GGA = PE
PREC = Accurate
ENCUT = 500
EDIFF = 1E-6
ISMEAR = 0
SIGMA = .05
ISPIN = 1
ISYM = 0
NSW = 0
IBRION = -1
NELM = 100
NBANDS = 16
IVDW = 0
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.
POSCAR:
Neutralwater;plainPBE;externalD4postonly
1.0
24 0 0
0 24 0
0 0 24
O H
1 2
Cartesian
12.00000000 12.00000000 12.39753933
12.00000000 12.76323900 11.80123033
12.00000000 11.23676100 11.80123033
KPOINTS:
Gamma
0
Gamma
1 1 1
0 0 0
EDIFF=1E-6是电子收敛阈值;NSW=0只做单点。24 Å立方晶胞、Γ点和ENCUT500 eV是这个小分子的教学设置,不代表任意体系的真空或截断收敛参数。
python3 prepare.py vasp
cd cases/vasp-water-plain
sbatch job.slurm
squeue -u "$USER"
本例模板使用P100核时分区、1GPU/1CPU。套餐用户按账户规则调整分区。程序在计算节点运行,不在登录节点直接执行。
3 确认DFT能量和电子收敛#
grep 'aborting loop because EDIFF is reached' OUTCAR
grep 'free energy TOTEN' OUTCAR
grep 'energy without entropy' OUTCAR
本例纯PBE的TOTEN约为 −14.21664611 eV。由于展宽与体系情况,本例无熵能和σ→0能在打印精度内相同;其他体系不能假设三者相等。比较不同结构时要统一选择TOTEN、无熵能或σ→0能的口径。
4 对完全相同的POSCAR运行D4#
仍在案例目录中:
export PATH=/public/software/cp2k/deps/2026.2/p100/dftd4-4.2.0/bin:$PATH
export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
dftd4 POSCAR --func pbe --charge 0 --json --grad
独立程序读取完整周期晶胞和原子坐标。不要换成忽略晶胞的XYZ后再把结果称为相同周期修正。--func pbe与 GGA=PE一致;如果VASP使用不同泛函,必须同步选择D4参数。改变VASP电子数形成带电体系时,总电荷也必须相符。
5 统一单位,只加一次#
在自己的计算目录执行以下完整命令,它从当前OUTCAR和D4结果读取数值:
python3 - <<'PY'
import json,re
text=open('OUTCAR').read()
assert 'aborting loop because EDIFF is reached' in text
toten=float(re.findall(r'free\s+energy\s+TOTEN\s*=\s*([-\d.]+)',text)[-1])
e4=json.load(open('dftd4.json'))['energy']*27.211386245988
print('Plain PBE TOTEN / eV:',toten)
print('External D4 / eV:',e4)
print('PBE + D4 once / eV:',toten+e4)
PY
D4 JSON能量单位为Hartree,乘27.211386245988才得到eV。输出对应 E(PBE+D4)=E(PBE)+E(D4)。如果主程序已经启用D4,最终能量已经含该项,不能再次执行这个加法;其他D3或非局域色散也不能与D4随意叠加。

reference-results/vasp-water-plain/energy-summary.json提供实际VASP能量摘录与源文件SHA256,reference-d4/vasp-periodic/dftd4.json提供实际周期D4结果。原始VASP许可相关文件留在授权环境。
外部能量补加适合固定几何单点比较,不会回写VASP内部力和应力。结构优化、MD、声子或应变能计算应使用完整耦合且经过验证的方法,不能仅凭后处理能量曲线宣称已含D4动力学。