Libxc专题

Libxc编程实例:一阶导数、自旋与二阶响应

两个可编译C程序,120个非自旋点和11个自旋点的真实数值核对。

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

下载输入、C程序、真实结果与绘图脚本。

1 先分清每电子能量和能量密度#

本篇适合需要编程调用Libxc、检查接口或理解宿主数据的人。常规VASP用户可直接使用Si与水实操。所有API输入采用原子单位。

Libxc返回的zk为每电子交换关联能ε;用于密度求导的能量密度是ρ×ε。非自旋LDA的vrho对应∂(ρε)/∂ρ,而不是∂ε/∂ρ。GGA另外返回对σ的导数;meta-GGA还可返回对拉普拉斯与动能密度的导数。

2 编译并运行真实例子#

bash api/run.sh
head api/results.csv
head api/spin.csv

入口会用oneAPI 2024.2的icx编译两个短C程序,调用集群Libxc 7.1.2。完整源码和编译命令都在下载包,不需要修改共享软件。非自旋LDA最小调用形式:

#include <xc.h>
xc_func_type f;
xc_func_init(&f, 1, XC_UNPOLARIZED);
double rho=0.1, exc, vrho;
xc_lda_exc_vxc(&f, 1, &rho, &exc, &vrho);
xc_func_end(&f);

完整可编译程序请使用api/xc_demo.c。非自旋六种分量各20点的解析一阶导数,与ρ、σ、τ方向的中心有限差分逐项核对,最大绝对差9.43×10⁻¹⁰。meta-GGA示例的τ固定独立变化;改变ρ做偏导时不能顺手把σ和τ也跟着变化。

3 自旋输入怎么排列#

XC_POLARIZED的密度数组为[ρ↑,ρ↓]。本次保持总密度0.2 electron/bohr³,将ρ↑从0.10增加到0.15、ρ↓从0.10降到0.05,得到11个不同极化点。调用:

xc_func_init(&f, 1, XC_POLARIZED);
double rho[2]={0.12,0.08}, exc, v[2], fxc[3];
xc_lda_exc_vxc_fxc(&f, 1, rho, &exc, v, fxc);
/* v: up,down; fxc: up-up,up-down,down-down */
xc_func_end(&f);

程序同时对总能量密度做一阶有限差分、对势做二阶核对,最大绝对差2.18×10⁻¹⁰。这里例子验证LDA自旋交换,不把它扩展为所有自旋GGA/meta-GGA接口已经验证。

固定总密度下自旋LDA交换能与两个自旋通道的势

4 结果怎样看,哪些不能直接推出#

api/spin.csv列出两个自旋密度、每电子能量、两个势、三个对称二阶分量与数值差。零极化时上下自旋势相同,极化增加后分开。该曲线不能直接给出铁的磁矩;真实Fe还需要自洽电子结构,相关实例见下载包的vasp/fe-*。

xc-info输出所列的可用导数阶数只针对对应泛函。宿主还要提供所需输入并实现对应响应流程;不能因为库能算二阶导数,就宣称任意宿主的声子、介电或更高阶响应都已可用。不同版本的Libxc也不应替换共享链接库来尝试,先选择已配好的宿主模块。

绘图:

module load py4vasp/0.11.3
python plots.py

本次图表直接使用实算CSV。完整函数签名以安装目录的include/xc.h为准;参考Libxc官方源码。

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

查看配图

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

100%查看原图 ↗