DFT-D4专题

ORCA使用D4:开关对照与结果提取

使用D4关键词、总电荷与多重度,提取已经计入色散的总能量和梯度。

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

给ORCA输入增加 D4即可启用相应色散修正。容易出错的地方是把输出中的色散项又加到最终总能量上。本篇用四个固定模型的PBE与PBE-D4实际单点结果说明输入、提取和检查方法。

下载输入、真实参考结果与绘图脚本。解压后进入资料包所在目录,先画已有结果:

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 建立目录并提交#

本例使用ORCA6.1.1官方预编译程序及OpenMPI4.1.8运行环境,模块为 orca/6.1.1,PBE/def2-SVP、VeryTightSCF、DEFGRID3。官方二进制所用编译器不根据MPI编译器推测。主程序输出的内置D4版本为3.4.0;独立对照程序为4.2.0,本篇相同结构及参数的数值逐项比较,不能据此认为全部版本和参数都无差别。

python3 prepare.py orca
cd cases/orca-water-plain
sbatch job.slurm
cd ../orca-water-d4
sbatch job.slurm

每个模板申请1张对应GPU、1个CPU核心,核时用户使用模板里的核时分区;套餐用户按账户规则选择分区。ORCA在这里走CPU程序路径,申请GPU资源不表示ORCA本例有GPU加速。CP2K采用对应GPU构建。不要在登录节点直接运行完整DFT计算。

准备与运行分开:prepare.py按所选软件建立输入目录,随后只提交所需的目录。若已有 cases,请重新解压到新目录,避免覆盖已有结果。只有选择VASP时需要您已有合法授权的O、H PAW势,它们不在下载包中;选择CP2K或ORCA不会读取VASP势文件。

2 查看完整ORCA输入#

中性水、D4开启:

! PBE def2-SVP EnGrad VeryTightSCF DEFGRID3 D4
%pal nprocs 1 end
%maxcore 1000
* xyzfile 0 1 structure.xyz

EnGrad同时计算单点能量与解析梯度;nprocs 1与本例申请的一个CPU核一致。将第一行的 D4删除便是plain对照。带电水输入为:

! PBE def2-SVP EnGrad VeryTightSCF DEFGRID3 D4 UKS
%pal nprocs 1 end
%maxcore 1000
* xyzfile 1 2 structure.xyz

xyzfile后面依次是总电荷、多重度、坐标文件。改变电荷后应同步修改独立D4的 --charge,不能沿用中性体系设置。

ORCA主程序由完整路径直接启动一次,不能用 mpirun多次启动驱动程序。下载包的Slurm脚本加载模块后调用的核心命令为:

"$ORCA_ROOT/orca" orca.inp > orca.out

3 提取能量并检查收敛#

grep 'SCF CONVERGED AFTER' orca.out
grep 'ORCA TERMINATED NORMALLY' orca.out
grep 'Dispersion correction' orca.out
grep 'FINAL SINGLE POINT ENERGY' orca.out

中性水的最终能量为 −76.272750392776 Hartree,色散项约为 −0.000196920 Hartree。最终能量已经包含色散项。与同一设置的plain结果相减,差值为 −0.000196920342 Hartree。色散打印行的小数位少于最终能量,因此可以看到末位舍入差。

四个模型中两种主程序的D4能量差

总电荷+1的水在相同几何下,D4修正约为 −0.000098867458 Hartree。它说明EEQ电荷模型会影响修正项,不是水分子的电离能。

4 从engrad读出梯度,再换算为力#

在任一已结束的ORCA案例目录执行:

python3 - <<'PY'
import numpy as np
lines=open('orca.engrad').read().splitlines()
v=[float(x) for x in lines if not x.startswith('#') and len(x.split())==1]
n=int(v[0])
energy=v[1]
gradient=np.array(v[2:2+3*n]).reshape(n,3)
forces=-gradient*27.211386245988/0.529177210903
print('Energy / Hartree:',energy)
np.savetxt('forces-eV-A.txt',forces,header='Fx Fy Fz / eV Angstrom^-1')
PY

orca.engrad保存的是总能量梯度,力要加负号。其原始梯度单位为Hartree/Bohr,不能直接当作eV/Å。比较D4修正时,取D4开启和关闭的两组总力之差,而不是把总力直接与独立D4的力相等。

5 批量比较自己的结果#

回到根目录:

python3 d4.py
bash view.sh --cases cases --d4 d4-results --output my-analysis --partial

已完成的模型需要成对plain/d4结果。analysis/bookkeeping.csv是下载包整组参考表;自己的表在指定输出目录。本例四种模型的D4梯度传递与独立工具吻合。

D4能量与力修正的比较误差

def2-SVP属于小基组,水分子对还可能有基组叠加误差。上述结果演示启用、提取和避免重复修正,没有证明结合能、优化几何或电离能的收敛。

参考:ORCA色散修正手册、ORCA官方色散教程。

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

查看配图

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

100%查看原图 ↗