libxc 接口#
REST 使用外部 crate libxc-rs(docs.rs)作为 libxc C 库的安全 Rust 封装。通过 Cargo feature dynamic_loading 在运行时动态链接,无需编译时静态链接。
架构#
┌─────────────────────┐
│ DFA4REST (mod.rs) │ 核心 DFT 数据结构,通过 DFA 调用 libxc
│ libxc_itrf.rs │ 数值积分接口,为 num_int/response 提供高阶导数
└────────┬────────────┘
│ xc_func_init / lda/gga/mgga_exc_vxc / eval_libxc_func_new
┌────────▼────────────┐
│ libxc_helper.rs │ 薄封装层,屏蔽 libxc-rs 细节
└────────┬────────────┘
│ LibXCFunctional / compute_lda/gga/mgga
┌────────▼────────────┐
│ libxc (外部 crate) │ 安全 Rust 封装,FFI 调用 C libxc
└─────────────────────┘
关键数据结构#
LibXCFunctional(外部 crate libxc)#
构造:LibXCFunctional::from_number(id, spin),或通过 xc_func_init(code, spin)。
实现了 Drop,离开作用域时自动释放 C 端资源,不再需要手动调用 xc_func_end()。
方法 |
返回 |
说明 |
|---|---|---|
|
|
泛函家族( |
|
|
Exact-exchange 系数,非杂化返回 |
|
|
CAM 参数 |
|
|
是否为 range-separated 杂化泛函 |
|
|
是否需要动能密度(MGGA) |
|
|
是否需要拉普拉斯量 |
|
|
特性标志位(如 |
|
|
引用文献列表 |
|
|
人类可读的描述信息 |
LibXCFamily 枚举#
旧名称(手写) |
新名称(外部 crate) |
|---|---|
|
|
|
|
(无) |
|
DFA4REST(src/dft/mod.rs)#
方法 |
说明 |
|---|---|
|
从 func ID 初始化 |
|
带参数(如 omega)初始化 |
|
遍历 SCF 泛函计算总 HFX 系数 |
|
遍历 SCF 泛函获取 RSH 参数 |
|
按 family 分发调用 |
libxc_helper.rs 公共 API#
函数 |
说明 |
|---|---|
|
从 libxc 编号初始化泛函,spin=1 非极化 / 2 极化 |
|
将泛函名称(如 |
|
LDA 能量 + 势 |
|
GGA 能量 + 势 |
|
MGGA 能量 + 势 |
|
通用计算入口,输出到预分配缓冲区 |
libxc_itrf.rs 数值积分接口#
eval_xc_eff(func_ids, factors, xc_type, spin, rho_array, np, deriv) 是 num_int.rs 和 response.rs 的主要调用入口。接受多个 libxc 功能 ID 及其系数,计算 XC 能量、一阶势、二阶/三阶导数,并将 libxc 原始输出转换为 REST 内部格式。
接口迁移对照#
旧接口( |
新接口( |
|---|---|
|
|
|
(删除,RAII 自动释放) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
依赖配置#
libxc = { version = "0.1", features = ["api-v7_0", "dynamic_loading"] }