DFT-D4专题

VASP单点外加D4:文件、单位与防重复

先计算IVDW=0的PBE单点,再对相同POSCAR独立计算D4并且只加一次。

更新于 2026-11-06约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇适用于已有纯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随意叠加。

同一VASP单点只加一次与误加两次的区别

reference-results/vasp-water-plain/energy-summary.json提供实际VASP能量摘录与源文件SHA256,reference-d4/vasp-periodic/dftd4.json提供实际周期D4结果。原始VASP许可相关文件留在授权环境。

外部能量补加适合固定几何单点比较,不会回写VASP内部力和应力。结构优化、MD、声子或应变能计算应使用完整耦合且经过验证的方法,不能仅凭后处理能量曲线宣称已含D4动力学。

参考:VASP官方DFT-D4说明、IVDW关键词、DFT-D4官方实现。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗