VASP的BEEF反应能与集合分析
用水生成反应的实际计算,学习BEEF-vdW能量与相关集合误差的组合。
阅读本篇目录
不同交换关联近似可能给出不同反应能。BEEF-vdW及其泛函集合提供了一种观察这种模型敏感性的方法。本例计算H₂+½O₂→H₂O,重点是反应能的参照和集合配对,不把集合宽度当作所有误差的保证范围。
1. 准备三个一致的分子模型#
三个分子均放在12 Å立方盒中心,使用Gamma k点、550 eV、EDIFF=1E-6、PBE PAW64。H₂键长0.75 Å,O₂键长1.23 Å,水使用此前优化得到的几何。O₂采用自旋极化,NUPDOWN=2,固定三重态对应的总自旋差。
这里保持原子位置固定;没有分别进行BEEF几何优化。三个电子总能量组合得到的是这套指定几何下的电子反应能,尚未加入零点能、有限温度、熵或气相标准态修正,不能称作标准生成焓。
2. 加载支持libbeef的分支#
本例使用vasp/5.4.4-8173m-beef的vasp_std,链接libbeef 0.1.3,oneAPI 2023.2中的ICC/ifort 2021.10构建。它是CPU可执行程序,要求相应指令集;附件通过Slurm选择具有兼容宿主CPU的V100资源,计算不等于BEEF GPU加速。
GGA = BF
LUSE_VDW = .TRUE.
ZAB_VDW = -1.8867
LBEEFENS = .TRUE.
使用配套vdw_kernel.bindat,并在OUTCAR中确认读取到核文件及BEEFens集合结果。只有标签存在而库未链接,不能认为相应功能已经启用。SUNCAT的BEEF用法
三个分子分别提交run.sh,完成后保留OUTCAR和vasprun.xml。附件脚本已包含模块、核文件位置和Slurm资源设置。
3. 先计算中心泛函的反应能#
ΔE = E(H₂O) − E(H₂) − 0.5E(O₂)
| 模型 | 反应系数 | 电子能 / eV | 集合条目数 |
|---|---|---|---|
| water | 1.0 | -12.82907588 | 2000 |
| hydrogen | -1.0 | -7.17252554 | 2000 |
| oxygen-triplet | -0.5 | -6.65837991 | 2000 |
本次ΔE为 -2.327360 eV/生成一个H₂O。系数1、−1、−0.5保证两边H、O原子数守恒;不要把O₂整分子的能量直接当作一个O原子的化学势。
4. 集合必须逐项配对#
对第i套泛函参数,先形成同一个反应组合:
δEi = δEi(H₂O) − δEi(H₂) − 0.5δEi(O₂)
再对2000个反应组合求标准差。本次相关集合标准差为 0.088564 eV。图中展示减去集合均值后的反应集合分布,不把输出中的单体系集合条目直接当作中心泛函的绝对总能量。

若忽略同一泛函参数在不同分子之间的相关性,分别求标准差后再独立平方相加,本次会得到8.151990 eV;这不是本反应应使用的BEEF集合宽度。不能打乱各文件的集合顺序,也不能混用不同集合参数生成的输出。
libbeef提供的bee工具同样按化学计量系数组合输出,再计算标准差;本包脚本采用相同的逐项组合思路,并用协方差矩阵交叉核对。libbeef官方说明
5. 这个宽度没有包含什么#
集合主要反映该方法中的交换关联模型变化,不自动包含盒子大小、基组截断、SCF误差、几何选择、遗漏反应路径、热力学校正或自旋态选择的全部影响。较窄的集合也不代表实验误差一定小。
比较两个吸附位点或反应步骤时,同样要先在每个集合成员内做能量差,再分析分布。针对新材料,应保留实际的参照和适用范围,避免只展示一个没有定义的“误差棒”。
输入、脚本和结果#
三项计算完成后,加载ASE环境运行python extract_beef.py,读取自己的三份OUTCAR与vasprun.xml,生成BEEF-DATA.json。参考结果和图为本次实际计算;附件不含POTCAR、波函数或vdW核文件。