atomppgen.tm
Troullier-Martins (TM) 伪化器
实现 TM 方法生成赝轨道,满足范数守恒和连续性约束。
主要功能
tm_pseudize : 对给定 AE 轨道进行 TM 伪化 TMResult : 存储伪化结果的数据类
参考文献
Troullier & Martins, PRB 43, 1993 (1991)
算法文档
详见 docs/source/algorithm/tm_method.rst
Functions
|
在指定点 x0 处计算导数(使用局部三次样条) |
|
使用 Troullier-Martins 方法构造伪轨道 |
Classes
|
TM 伪化结果 |
- class atomppgen.tm.TMResult(u_ps, a_coeff, rc, eps, l, norm_error, continuity_orders, continuity_check, solver_info)[源代码]
TM 伪化结果
- 参数:
- u_ps
伪轨道 u(r)(径向波函数,已拼接内外区)
- Type:
np.ndarray
- a_coeff
TM 多项式系数 [a_0, a_2, a_4, ...] 内区形式:u = r^{l+1} exp(Σ a_{2i} r^{2i})
- Type:
np.ndarray
- norm_error
范数守恒相对误差 |Q_PS - Q_AE| / Q_AE
- Type:
- continuity_check
rc 处的连续性检查结果 {'u': {...}, 'du': {...}, 'd2u': {...}}
- Type:
Dict
- solver_info
求解器收敛信息 {'ier': int, 'nfev': int, 'mesg': str, 'fallback': bool}
- Type:
Dict
- atomppgen.tm.tm_pseudize(r, w, u_ae, eps, l, rc, continuity_orders=2)[源代码]
使用 Troullier-Martins 方法构造伪轨道
- 在 r ≤ rc 内区,伪轨道形式为:
u(r) = r^{l+1} · exp(Σ_{i=0}^{N} a_{2i} r^{2i})
约束条件: 1. 在 r = rc 处,u 及其导数(到 continuity_orders 阶)与 AE 轨道连续 2. 内区范数守恒:∫_0^{rc} |u|^2 dr = ∫_0^{rc} |u_ae|^2 dr
- 参数:
- 返回:
包含伪轨道、系数、范数误差等信息
- 返回类型:
- 抛出:
ValueError -- 如果 rc 不在网格范围内 如果 continuity_orders 不是 2 或 4
备注
TM 方法关键点: 1. 系数数量由连续性条件决定:
continuity_orders = 2: 需要 4 个系数 [a_0, a_2, a_4, a_6]
continuity_orders = 4: 需要 6 个系数 [a_0, ..., a_10]
数值稳定性:使用对数形式避免指数溢出
范数守恒通过非线性方程组保证(scipy.optimize.fsolve)
网格推荐:强烈建议使用 exp_transformed 或 log 网格类型。 linear 网格的导数精度不足,可能导致 TM 非线性方程组不收敛。
引用
Troullier & Martins, PRB 43, 1993 (1991), 方程 (14)-(18)