atomscf.hf.angular

角动量耦合系数模块

本模块提供 HF 非局域交换所需的角动量耦合系数计算:

  • Wigner-3j 系数(通过 sympy 包装)

  • 径向中心场耦合因子 a_k(l, l')

  • k 值选择规则(三角条件 + 奇偶性)

物理背景

在径向 HF 中心场近似下,非局域交换通过多极展开表示:

\[\frac{1}{|\mathbf{r} - \mathbf{r}'|} = \sum_{k=0}^\infty \frac{4\pi}{2k+1} \frac{r_<^k}{r_>^{k+1}} \sum_{q=-k}^k Y_{kq}(\hat{r}) Y_{kq}^*(\hat{r}')\]

对径向波函数的作用经球谐积分后,角动量耦合因子为:

\[\begin{split}a_k(\ell, \ell') = (2\ell'+1) \cdot \begin{pmatrix} \ell & k & \ell' \\ 0 & 0 & 0 \end{pmatrix}^2\end{split}\]

选择规则

k 值必须满足:

  1. 三角条件: \(|\ell - \ell'| \leq k \leq \ell + \ell'\)

  2. 奇偶性: \(\ell + \ell' + k\) 为偶数

这确保了 Wigner-3j 系数非零且物理合理。

引用

[Wigner3j]

Varshalovich, D. A., Moskalev, A. N., & Khersonskii, V. K. (1988) "Quantum Theory of Angular Momentum" World Scientific

[HFAngular]

Cowan, R. D. (1981) "The Theory of Atomic Structure and Spectra" University of California Press, Chapter 7

Functions

allowed_k_values(l, l_prime)

计算允许的多极指标 k 值列表。

coupling_factor_ak(l, k, l_prime)

计算径向中心场角动量耦合因子 a_k(l, l')。

get_coupling_factor(l, k, l_prime[, use_cache])

获取耦合因子(带预计算缓存)。

wigner_3j_squared(l, k, l_prime)

计算 Wigner-3j 系数的平方。

atomscf.hf.angular.allowed_k_values(l, l_prime)[源代码]

计算允许的多极指标 k 值列表。

参数:
  • l (int) -- 第一个角动量量子数(l ≥ 0)

  • l_prime (int) -- 第二个角动量量子数(l' ≥ 0)

返回:

允许的 k 值列表(按升序)

返回类型:

list[int]

备注

选择规则:
  1. 三角条件: \(|\ell - \ell'| \leq k \leq \ell + \ell'\)

  2. 奇偶性: \(\ell + \ell' + k\) 为偶数

物理意义:
  • s-s (l=0, l'=0): k = [0](仅库仑项)

  • s-p (l=0, l'=1): k = [1](单个偶极项)

  • p-p (l=1, l'=1): k = [0, 2](库仑 + 四极)

示例

>>> allowed_k_values(0, 0)  # s-s
[0]
>>> allowed_k_values(0, 1)  # s-p
[1]
>>> allowed_k_values(1, 1)  # p-p
[0, 2]
>>> allowed_k_values(1, 2)  # p-d
[1, 3]
atomscf.hf.angular.coupling_factor_ak(l, k, l_prime)[源代码]

计算径向中心场角动量耦合因子 a_k(l, l')。

定义:

\[\begin{split}a_k(\ell, \ell') = (2\ell'+1) \cdot \begin{pmatrix} \ell & k & \ell' \\ 0 & 0 & 0 \end{pmatrix}^2\end{split}\]
参数:
  • l (int) -- 第一个角动量(目标态)

  • k (int) -- 多极指标

  • l_prime (int) -- 第二个角动量(占据态)

返回:

耦合因子 a_k

返回类型:

float

备注

归一化: 因子 \((2\ell'+1)\) 来源于 m 球对称平均

选择规则: 若 k 不在 allowed_k_values(l, l') 中,返回 0

物理意义: 该因子出现在 Fock 交换矩阵元中:

\[K_{\ell}[u](r) = -\sum_{\ell'} \sum_k a_k(\ell,\ell') R^k(r) u_{\ell'}(r)\]

示例

>>> coupling_factor_ak(0, 0, 0)  # s-s, k=0
1.0
>>> coupling_factor_ak(1, 0, 1)  # p-p, k=0
0.3333...  # 1/3
>>> coupling_factor_ak(1, 2, 1)  # p-p, k=2
0.6666...  # 2/3
atomscf.hf.angular.wigner_3j_squared(l, k, l_prime)[源代码]

计算 Wigner-3j 系数的平方。

计算:

\[\begin{split}W^2 = \begin{pmatrix} \ell & k & \ell' \\ 0 & 0 & 0 \end{pmatrix}^2\end{split}\]
参数:
  • l (int) -- 第一个角动量

  • k (int) -- 多极指标

  • l_prime (int) -- 第二个角动量

返回:

Wigner-3j 系数的平方

返回类型:

float

备注

符号约定: 使用 sympy.physics.wigner.wigner_3j 标准相位

对称性:
  • 偶置换不变: (l k l') = (l' k l) = (k l l')

  • 奇偶性: 若 l+k+l' 为奇数,结果为 0

实现: sympy 返回符号表达式,需转换为浮点数

示例

>>> wigner_3j_squared(0, 0, 0)  # s-s, k=0
1.0
>>> wigner_3j_squared(1, 0, 1)  # p-p, k=0
0.1111...  # 1/9