libbeef随机种子与VASP集合复现
libbeef 0.1.3实际编译运行:C接口、导数、随机种子与VASP集合核对。
阅读本篇目录
使用已有DFT输出,不再做一次自洽计算#
本例读取四份真实VASP 5.4.4 BEEF输出:干净Cu表面、气相CO、顶位和fcc位吸附结构。OUTCAR中除了2000个集合值,还给出32项BEEF xc energy contributions。将这32项传给同版本libbeef,可重建默认集合,再比较自定义随机种子对有限样本统计的影响。
第一步:编译与运行#
bash run.sh
cat REAL-RESULTS.json
ls real/
replay_real.py从input/*/OUTCAR提取32项贡献,regenerate.c调用库生成2000个成员。整个流程仅需一个CPU核。完整源码和四份OUTCAR均在下载包中。
也可以直接对已经提取的基展开贡献运行:
# 不传参数:使用库默认随机种子
./regenerate < real/CO-top-basis.txt > top-default.txt
# 指定一个种子
./regenerate 27129 < real/CO-top-basis.txt > top-seed27129.txt
第二步:检查默认结果能否复现#
默认种子重建的四组2000成员,与原始OUTCAR逐成员最大差异不超过1.11×10⁻¹¹ eV,属于本例文本输出精度量级。它验证了当前库、贡献顺序和VASP接口在这些文件中的对应关系。
这里输入是VASP输出的能量贡献,单位eV,因此生成值也为eV;库只做线性组合,不会自动转换单位。
第三步:同一种子下组合反应能#
对顶位吸附,逐成员计算top − clean − CO。每个体系生成之前都重置到同一个种子,使成员代表相同参数扰动。不要连续生成四次而不重置状态,否则成员之间失去应有的配对关系。
| 种子设置 | 顶位吸附集合标准差/eV |
|---|---|
| 默认 | 0.136251 |
| 27129 | 0.133058 |
| 12345 | 0.137112 |

图中各组已减去本组平均值。三种种子的结果接近但不完全相等,这是有限集合抽样的变化,不是重新训练泛函或重新自洽得到的三个吸附能。改变种子不能用于挑选“更好看”的不确定性。
默认参数、自定义种子和自定义泛函不要混淆#
本例自定义的是随机种子,不修改BEEF-vdW的拟合参数。beefsetmode_允许调用交换展开的单个基函数及关联分量,用于构造贡献和后处理;它不是普通VASP用户任意提交一套新泛函系数的通用输入接口。改变32项贡献也不等于为一个新泛函完成自洽计算。
regenerate读入32个数,固定输出2000个成员,这与libbeef 0.1.3源码的规模一致。需要改变集合规模或训练参数时,应另行开展方法验证,不能只改CSV标题。本文和配对集合分析配合使用,先保证能量定义、成员配对和物理模型一致,再解释不确定性。