atomscf.operator.solve_bound_states_transformed
- atomscf.operator.solve_bound_states_transformed(r, l, v_of_r, delta, Rp, k=4, use_sparse=True)[源代码]
使用变量变换方法求解径向束缚态(适用于指数网格)。
方法基于文献 [1]_:
- 网格:
\(r(j) = R_p(\exp(j\delta) - 1) + r_{\min}, \quad j=0,1,\ldots,j_{\max}\)
- 变量变换:
\(u(j) = v(j) \exp(j\delta/2)\)
- 变换后的方程(没有一阶导数项):
\(v''(j) - \frac{\delta^2}{4}v(j) = 2R_p^2\delta^2 \exp(2j\delta)(E - V_{\text{eff}}(r(j)))v(j)\)
- 有限差分离散:
\(v(j+1) - 2v(j) + v(j-1) - \frac{\delta^2}{4}v(j) = 2R_p^2\delta^2 \exp(2j\delta)(E - V_{\text{eff}}(j))v(j)\)
- 广义特征值问题:
\(H v = E B v\)
- 其中:
\(H[i,i] = 2 + \frac{\delta^2}{4} + \text{exp\_factor} \cdot V_{\text{eff}}(i+1)\)
\(H[i,i\pm1] = -1\)
\(B[i,i] = 2\delta^2 R_p^2 \exp(2\delta(i+1))\)
关键处理:去掉 j=0 点避免奇异性(参考 [1]_ 第54行)
- 参数:
r (numpy.ndarray) -- 指数网格,由 radial_grid_exp_transformed 生成,满足 r[j] = Rp*(exp(j*delta)-1) + rmin。
l (int) -- 角动量量子数。
v_of_r (numpy.ndarray) -- 势能数组(包含核势能),长度与 r 一致。
delta (float) -- 网格参数 δ(从 radial_grid_exp_transformed 返回)。
Rp (float) -- 网格参数 R_p(从 radial_grid_exp_transformed 返回)。
k (int, optional) -- 返回最低能的本征态个数(默认 4)。
use_sparse (bool, optional) -- 是否使用稀疏矩阵求解器(默认 True,适用于大型矩阵)。
- 返回类型:
- 返回:
eps (numpy.ndarray) -- 低端 k 个本征值(按升序)。
U (numpy.ndarray) -- 对应的径向波函数矩阵,形状 (k, N),已归一化。
备注
去掉 j=0 点后,实际求解的网格索引为 j=1,2,...,j_max
v[0] 在边界条件下为 0(不参与求解)
求解后变换回 u = v * exp(j*delta/2) 并归一化
引用
[ExpGridTransform]指数网格变量变换方法 来源:Computational Physics Fall 2024, Assignment 7, Problem 2 https://github.com/bud-primordium/Computational-Physics-Fall-2024/tree/main/Assignment_7/Problem_2 problem_2.tex 第155-235行(矩阵元推导)