Libxc专题

Libxc版本与组合泛函:查编号、辨别名、正确配PBE0

用三个实际安装版本导出名称与编号,分清交换、关联、别名和杂化泛函的半局域部分。

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

要给VASP或其他电子结构软件选择Libxc泛函,先确认当前宿主用的是哪一套库,再查询名称和编号。本篇提供三个版本的实际查询表、组合计算结果及完整C程序。常规VASP计算可先看Si和水的实操。

下载源码、版本表、真实数值与绘图程序。

1 下载后先做什么#

下载资料包,保存为libxc-example.zip,然后在允许使用的CPU环境中执行:

unzip libxc-example.zip -d libxc-example
cd libxc-example
cat libraries.json
bash run.sh

run.sh加载oneAPI 2024.2,用icx分别编译同一份probe.c,链接三个既有私有前缀,再运行检查和绘图。程序串行运行,不使用GPU;不安装新库,不修改个人环境。需要从新目录运行,已有results时会退出,避免覆盖上次结果。输出在results和figures;reference保存本次实际结果供比较。

cat results/7.1.2/metadata.csv
head results/7.1.2/catalog.csv
ls figures

绘图使用集群现有ASE Python中的Matplotlib;如果用自己的Python,设置PLOTPY=/你的环境/bin/python再运行。库前缀必须同时含配套头文件及库文件,不能混用不同版本的xc.h和libxc。

2 三个版本分别服务于谁#

本例直接链接的库 现有用途 可查询名称数 不同编号数
6.2.2 ABACUS 3.10.1的CPU私有依赖 657 657
7.0.0 CP2K 2026.2的CPU私有依赖 679 679
7.1.2 VASP Libxc扩展的CPU私有依赖 712 702

这些是本例选取的三个具体前缀,并不代表所有宿主的构建参数相同。VASP扩展的7.1.2关闭了FHC强制处理,不能拿来替换ABACUS或CP2K的依赖。普通用户选择已经配置好的软件模块即可;不能通过更改LD_LIBRARY_PATH把旧宿主直接“升级”为另一版本。

三个实际库的名称、唯一编号和LDA导数能力

图左:7.1.2的712个名称中有10个别名,不能解释为712个不同泛函。图右是本例实际链接后查询到的LDA交换导数标志,详细解释见导数接口实操。

3 按名字找编号,别把别名当新方法#

python3 - <<'PY'
import csv
p = 'results/7.1.2/catalog.csv'
for row in csv.DictReader(open(p)):
    if row['name'] in ['gga_x_pbe', 'gga_c_pbe', 'mgga_x_r2scan']:
        print(row['name'], row['id'], row['canonical_name'])
PY

实际得到PBE交换101、PBE关联130、r²SCAN交换497。C接口的基本写法:

int id = xc_functional_get_number("GGA_X_PBE");
/* 检查id是否有效,再xc_func_init;不要把未知标签直接传下去 */

catalog.csv的name是可接受输入标签,canonical_name是编号对应的规范标签,roundtrip_id是规范标签再查询的结果。本例逐项核对三个版本全部名称。7.1.2中的例子:

可接受标签 规范标签 共同编号
lda_c_1d_csc lda_c_1d_css 18
mgga_x_mk00 mgga_x_gp86 230
hyb_gga_xc_bhlyp hyb_gga_xc_bhandhlyp 436

这些只是名称映射示例,不表示本集群的三维VASP计算适合使用一维泛函。不同维度、动能泛函以及交换关联泛函,要按用途区分。

4 X、C、XC怎么组合#

X为交换,C为关联,XC已经包含交换与关联。以PBE为例,VASP的设置为:

GGA = LIBXC
LIBXC1 = GGA_X_PBE
LIBXC2 = GGA_C_PBE

交换与关联也可以来自不同族;只要一项为meta-GGA,VASP入口应使用METAGGA = LIBXC。这只说明接口允许组合,不能据此认定任意组合都有适当的物理依据或文献支持。VASP官方组合规则说明了上述入口及版本条件。

如果LIBXC1选的是完整XC泛函,不要再用LIBXC2重复加入关联。程序中也要先分清返回值究竟是单独交换、单独关联还是合在一起的半局域部分。

5 PBE0的25%在哪里#

本例在20个局域密度点,分别计算PBE交换、PBE关联和Libxc的PBE0局域部分:

head results/7.1.2/mixing.csv

三个版本均得到:

PBE0半局域部分 = 0.75 × PBE交换 + PBE关联
精确交换系数 = 0.25

20点逐项相减在本次输出精度下均为0。这里的局域输入为rho = 0.01…0.20 electron/bohr³、sigma = 0.02 rho²,返回值为每电子能量,单位Ha。完整体系的PBE0能量还需要宿主计算精确交换及其余能量项;本程序没有计算Si、水或任何材料的完整PBE0总能。

PBE分量、PBE0半局域部分和实际可调用的LDA第三阶导数

VASP使用已配置的Libxc扩展模块时,PBE0的关键参数为:

LHFCALC = .TRUE.
AEXX = 0.25
GGA = LIBXC
LIBXC1 = HYB_GGA_XC_PBEH

这里不再填写LIBXC2,也不把AEXX设为0.75。真实结构、完整INCAR/KPOINTS和提交步骤见Libxc的VASP实操。

6 最后得到什么#

results/版本/catalog.csv回答“这个具体库接受什么名字、对应哪个编号”;mixing.csv展示PBE与PBE0半局域分量;VALIDATION.json保留逐项数值检查;三张PNG可直接用于查看和比较。它们不能代替材料计算的收敛检查,也不能说明所有宿主已支持目录里的所有泛函。

更多输入族和标签说明见泛函选择。名称解析API及版本变化参考Libxc官方变更记录;完整函数签名以本例各安装前缀的include/xc.h为准。

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

查看配图

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

100%查看原图 ↗