Libxc泛函选择:LDA、PBE、SCAN与r²SCAN
实际查询编号、VASP参数组合和六种泛函分量的数值曲线。
阅读本篇目录
1 用标签查清楚泛函含义#
本篇针对集群实际安装的Libxc 7.1.2。X表示交换、C表示关联、XC表示合在一起的交换关联;LDA、GGA、MGGA表示输入依赖不同,不能仅按编号大小判断“更准确”。在CPU环境执行:
XCINFO=/public/software/vasp/deps/libxc/7.1.2/oneapi-2024.2/8173m-nofhc/bin/xc-info
"$XCINFO" 101
"$XCINFO" 130
"$XCINFO" 497
实际输出分别对应PBE交换、PBE关联和r²SCAN交换。查询结果还列出参考文献、参数、可用导数阶数。下载包的api/functional-*.txt保存本次查询结果。
| 功能 | 7.1.2编号 | 标签 | 需要的局域输入 |
|---|---|---|---|
| LDA交换 | 1 | LDA_X | ρ |
| PW关联 | 12 | LDA_C_PW | ρ |
| PBE交换 | 101 | GGA_X_PBE | ρ、σ |
| PBE关联 | 130 | GGA_C_PBE | ρ、σ |
| SCAN交换/关联 | 263 / 267 | MGGA_X_SCAN / MGGA_C_SCAN | ρ、σ、τ |
| r²SCAN交换/关联 | 497 / 498 | MGGA_X_R2SCAN / MGGA_C_R2SCAN | ρ、σ、τ |
| PBE0 | 406 | HYB_GGA_XC_PBEH | 半局域输入与宿主精确交换 |
这里σ是密度梯度平方,τ为动能密度。其他meta-GGA还可能需要密度拉普拉斯,不能把所有MGGA都当成相同接口要求。
2 在VASP里写哪一组参数#
PBE:
GGA = LIBXC
LIBXC1 = GGA_X_PBE
LIBXC2 = GGA_C_PBE
SCAN:
METAGGA = LIBXC
LIBXC1 = MGGA_X_SCAN
LIBXC2 = MGGA_C_SCAN
r²SCAN:
METAGGA = LIBXC
LIBXC1 = MGGA_X_R2SCAN
LIBXC2 = MGGA_C_R2SCAN
PBE0:
LHFCALC = .TRUE.
AEXX = 0.25
GGA = LIBXC
LIBXC1 = HYB_GGA_XC_PBEH
一次只保留一种方案。PBE0的XC标签已经含交换与关联,不再添加LIBXC2;精确交换仍由VASP计算。包内四种方法都有Si实算输入和OUTCAR,可以从已有目录复制修改。
meta-GGA分支的Libxc按VASP要求以--disable-fhc编译;普通用户不需重新配置。库里有某个泛函,并不等于每个宿主、每个版本都完整支持它。VASP 6.3.x与6.4及之后的接口范围也有差别,尤其涉及密度拉普拉斯与meta-GGA杂化时,先核对版本说明。
3 用小程序观察各族泛函#
下载包api/xc_demo.c在ρ=0.01至0.20 electron/bohr³的20个点上,分别调用LDA交换、PW关联、PBE交换/关联、r²SCAN交换/关联。GGA和meta-GGA使用σ=0.02ρ²,meta-GGA使用τ=0.3+ρ、拉普拉斯为0,全部为原子单位。
bash api/run.sh
head api/results.csv
module load py4vasp/0.11.3
python plots.py
编译入口加载oneAPI 2024.2,用icx链接实际Intel编译的Libxc静态库。该例是局域泛函函数值演示,不是Si或水的自洽计算,也不代表这些局域变量对应唯一真实材料。图中的交换和关联分量未相加,不应把单独的关联曲线当作完整XC能量。

左图为每电子能量,右图为解析导数与中心有限差分的最大绝对差。120个点最大差为9.43×10⁻¹⁰(各导数原子单位)。不同导数的量纲不同,图用于检查数值调用一致性,不用于比较物理量大小。