atomscf.hf.angular
角动量耦合系数模块
本模块提供 HF 非局域交换所需的角动量耦合系数计算:
Wigner-3j 系数(通过 sympy 包装)
径向中心场耦合因子 a_k(l, l')
k 值选择规则(三角条件 + 奇偶性)
物理背景
在径向 HF 中心场近似下,非局域交换通过多极展开表示:
对径向波函数的作用经球谐积分后,角动量耦合因子为:
选择规则
k 值必须满足:
三角条件: \(|\ell - \ell'| \leq k \leq \ell + \ell'\)
奇偶性: \(\ell + \ell' + k\) 为偶数
这确保了 Wigner-3j 系数非零且物理合理。
引用
Varshalovich, D. A., Moskalev, A. N., & Khersonskii, V. K. (1988) "Quantum Theory of Angular Momentum" World Scientific
Cowan, R. D. (1981) "The Theory of Atomic Structure and Spectra" University of California Press, Chapter 7
Functions
|
计算允许的多极指标 k 值列表。 |
|
计算径向中心场角动量耦合因子 a_k(l, l')。 |
|
获取耦合因子(带预计算缓存)。 |
|
计算 Wigner-3j 系数的平方。 |
- atomscf.hf.angular.allowed_k_values(l, l_prime)[源代码]
计算允许的多极指标 k 值列表。
- 参数:
- 返回:
允许的 k 值列表(按升序)
- 返回类型:
备注
- 选择规则:
三角条件: \(|\ell - \ell'| \leq k \leq \ell + \ell'\)
奇偶性: \(\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}\]备注
归一化: 因子 \((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}\]备注
符号约定: 使用 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