atomscf.hf.slater
Slater 径向积分模块
本模块实现 HF 非局域交换所需的 Slater 径向积分核计算。
核心算法:两段累积(Y^k/Z^k)
Slater 径向积分定义:
其中 \(r_< = \min(r, r')\), \(r_> = \max(r, r')\)。
分解为向前/向后累积:
数值稳定性
r→0 处理: 使用 \(r_{\mathrm{safe}} = \max(r, \epsilon)\) 避免除零
r→∞ 处理: 边界显式设极限值(通常为零,因波函数衰减)
权重一致性: 使用项目梯形权重 w
引用
Herman, F. & Skillman, S. (1963) "Atomic Structure Calculations" Prentice-Hall
Koelling, D. D. & Harmon, B. N. (1977) "A technique for relativistic spin-polarised calculations" J. Phys. C: Solid State Phys. 10, 3107
Functions
|
计算 k=0 Slater 积分(库仑积分,s-s 交换)。 |
|
计算 Slater 径向积分 \(R^k_{ij}(r)\)。 |
Classes
Slater 积分缓存管理器。 |
- atomscf.hf.slater.slater_integral_radial(r, w, u_i, u_j, k, eps=1e-30)[源代码]
计算 Slater 径向积分 \(R^k_{ij}(r)\)。
使用两段累积算法(向前 Y^k + 向后 Z^k)计算非局域交换核。
- 参数:
r (numpy.ndarray) -- 径向网格 (shape: [n])
w (numpy.ndarray) -- 积分权重(梯形权重,shape: [n])
u_i (numpy.ndarray) -- 第一个径向波函数 (shape: [n])
u_j (numpy.ndarray) -- 第二个径向波函数 (shape: [n])
k (int) -- 多极指标 (k ≥ 0)
eps (float, optional) -- 数值安全常数(避免除零),默认 1e-30
- 返回:
Slater 积分 \(R^k_{ij}(r)\) (shape: [n])
- 返回类型:
备注
算法复杂度: \(O(n)\) 时间,\(O(n)\) 空间
- 数值稳定性:
r→0: 使用 r_safe = max(r, eps) 避免 \(r^{-k-1}\) 发散
r→∞: 边界条件由波函数衰减自然满足
- 物理意义:
k=0: 库仑积分(s-s 交换)
k=1: s-p 交叉项
k=2: p-p 交换
示例
>>> r = np.linspace(1e-6, 50, 1000) >>> w = trapezoid_weights(r) >>> u_1s = ... # 氢样 1s 波函数 >>> R0 = slater_integral_radial(r, w, u_1s, u_1s, k=0)
- atomscf.hf.slater.slater_integral_k0(r, w, u_i, u_j, eps=1e-30)[源代码]
计算 k=0 Slater 积分(库仑积分,s-s 交换)。
k=0 特化版本,物理意义为库仑相互作用:
\[\begin{split}R^0(r) = \\frac{1}{r} \\int_0^r u_i u_j r'^2 \\, dr' + r \\int_r^\\infty u_i u_j \\, dr'\end{split}\]- 参数:
r (numpy.ndarray) -- 径向网格
w (numpy.ndarray) -- 积分权重
u_i (numpy.ndarray) -- 第一个径向波函数
u_j (numpy.ndarray) -- 第二个径向波函数
eps (float, optional) -- 数值安全常数,默认 1e-30
- 返回:
k=0 Slater 积分
- 返回类型:
备注
此函数是 slater_integral_radial(r, w, u_i, u_j, k=0) 的等价实现, 但公式更清晰地表达了库仑积分的物理意义。
示例
>>> # 氢原子 1s 态自交换 >>> r = radial_grid_linear(1000, 1e-6, 50.0)[0] >>> w = trapezoid_weights(r) >>> u_1s = 2 * np.exp(-r) / np.sqrt(4*np.pi) # 归一化 1s >>> R0 = slater_integral_k0(r, w, u_1s, u_1s) >>> # 验证: 对 r→∞, R0 → 1/r (总电荷为1)
- class atomscf.hf.slater.SlaterIntegralCache[源代码]
Slater 积分缓存管理器。
用于缓存占据态之间的 Slater 积分,避免重复计算。
备注
- 缓存策略:
缓存占据态之间的 R^k_{ij}(r)(数量有限)
不缓存涉及目标态 u 的积分(每次 SCF 迭代都变)
- 内存估计:
对 C 原子(6 个占据态),k_max=2
最多 6×6×3 = 108 个积分
每个积分 ~8KB(1000 点网格),总计 ~1MB
示例
>>> cache = SlaterIntegralCache() >>> # 第一次计算并缓存 >>> R0 = cache.get(r, w, u_1s, u_2s, k=0) >>> # 第二次直接从缓存读取 >>> R0_cached = cache.get(r, w, u_1s, u_2s, k=0) # 快速
- get(r, w, u_i, u_j, k, i_index=None, j_index=None)[源代码]
获取 Slater 积分(自动缓存)。
- 参数:
r (
ndarray
) -- 同 slater_integral_radial 参数w (
ndarray
) -- 同 slater_integral_radial 参数u_i (
ndarray
) -- 同 slater_integral_radial 参数u_j (
ndarray
) -- 同 slater_integral_radial 参数k (
int
) -- 同 slater_integral_radial 参数i_index (int, optional) -- 轨道 i 的索引(用于缓存键)
j_index (int, optional) -- 轨道 j 的索引(用于缓存键)
- 返回:
Slater 积分
- 返回类型:
备注
若 i_index 和 j_index 均提供,则启用缓存;否则直接计算。