VASP 专题

libbeef接口实操:交换、关联与导数

libbeef 0.1.3实际编译运行:C接口、导数、随机种子与VASP集合核对。

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

下载完整C源码、原始数据与一键运行脚本。

适合什么需求#

普通VASP用户可先看BEEF计算流程。本篇适合需要理解接口或把libbeef接入自己程序的用户。我们实际编译运行了libbeef 0.1.3的C调用例,检查交换、局域关联、能量导数、自旋分支和集合生成。这个小程序计算给定电子密度上的泛函值,不是完整材料DFT计算;非局域vdW项需要由调用它的电子结构程序处理。

运行完整例子#

下载解压后,在已分配的一个CPU核上运行:

bash run.sh
cat api.log
cat spin.log

脚本使用已安装的VASP 5.4.4 BEEF模块提供Intel oneAPI 2023.2、ICC/ifort 2021.10和MKL环境,GPUMDkit 1.5.8模块提供Python与绘图依赖。没有重新安装或修改公共库。

关键编译命令:

module purge
module load vasp/5.4.4-8173m-beef gpumdkit/1.5.8
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1
icc beef_api.c \
  /public/software/vasp/libbeef/0.1.3/oneapi-2023.2-icc/8173m/lib/libbeef.a \
  -qmkl -lm -o beef_api
./beef_api

运行时也要保留MKL环境。不要编译后立刻module purge,否则动态加载MKL可能失败。当前安装前缀不提供公共头文件,示例中的函数声明依据该版本源码;升级版本后应重新核对ABI。

密度与梯度分别是什么#

本例使用原子单位。r为电子密度ρ,单位bohr⁻³;g是σ=|∇ρ|²,而不是|∇ρ|。交换和局域关联接口的e为每体积能量,单位Ha/bohr³;不是每电子能量。

返回的dr是对ρ的导数;返回的dg是(∂e/∂|∇ρ|)/|∇ρ|,等于2∂e/∂σ。有限差分时必须保留这个因子2。测试取20个正密度点,σ=0.03ρ²;计算ρ导数时保持σ不变,计算σ导数时保持ρ不变。零密度和零梯度的极限处理不属于本例覆盖范围。

最小调用形式:

extern void beefx_(double*, double*, double*, double*, double*, int*);
extern void beefsetmode_(int*);
int mode = -1, addlda = 1;
double rho = 0.1, sigma = 0.0003, e, drho, dgrad;
beefsetmode_(&mode);
beefx_(&rho, &sigma, &e, &drho, &dgrad, &addlda);

addlda=1包含相应LDA基线,0用于调用程序已经单独处理LDA的情况。本例分别检查两种设置,不应把二者当作同一种绝对能量直接比较。

哪些入口做了实际调用#

接口 本例操作与文件
beef_set_type_ 选择该版本支持的类型0,即BEEF-vdW
beefsetmode_ 默认−1、PBE关联−2、LDA关联−3、关闭分支−4、0至29阶交换基函数;modes.csv
beefx_ / beefxpot_ 交换能及导数,对照仅能量入口;derivatives.csv
beeflocalcorr_ / beeflocalcorrpot_ 局域关联能及导数;derivatives.csv
beeflocalcorrspin_ / beeflocalcorrpotspin_ 自旋极化ζ从−0.8至0.8,两种LDA设置和多个模式;spin.csv
beefrandinit_ / beefrandinitdef_ 自定义及默认随机种子
beefensemble_ 32个基展开贡献生成2000成员;另与实际VASP输出核对

自旋导数通过独立变化ρ↑或ρ↓核对,同时更新总密度与ζ=(ρ↑−ρ↓)/ρ。与直接固定ζ改变总密度不是同一种导数。

实际结果与图#

max_derivative_error 1.22055547891e-08
seed_repeat_error 0
max_spin_derivative_error 1.49837642294e-11

能量密度和有限差分核对

上述误差是本例采样点的绝对数值差;没有证明任意密度、所有平台和极限输入都满足同样精度。synthetic_ensemble.csv使用人为构造的32维向量演示接口重复性,不能解释为某种材料的能量。真实材料输出的复现见随机种子与VASP集合核对。

调用时的边界#

该版本使用全局模式和随机状态,示例采用串行调用。不要在多个线程里无保护地交错修改模式和种子。交换基函数索引限0至29,类型使用0;不要假定超范围参数会替你完成安全校验。直接调用接口也不会替代VASP中的自洽迭代、非局域关联或结构优化。

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

查看配图

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

100%查看原图 ↗