Troullier-Martins 伪化方法
本节详细介绍 Troullier-Martins (TM) 方法的数学推导和数值实现。
数学基础
伪化目标
给定全电子(AE)轨道 \(\phi_{\text{AE}}(r)\) 和本征能量 \(\varepsilon_l\), 构造伪轨道 \(\phi_{\text{PS}}(r)\),满足:
外区一致性 (\(r > r_c\)):
\[\phi_{\text{PS}}(r) = \phi_{\text{AE}}(r), \quad r > r_c\]内区光滑性 (\(r \leq r_c\)):
无节点(避免不必要的振荡)
足够光滑(高阶导数连续)
范数守恒:
\[\int_0^{r_c} |\phi_{\text{PS}}(r)|^2 dr = \int_0^{r_c} |\phi_{\text{AE}}(r)|^2 dr\]
径向波函数形式
使用径向波函数 \(u_{nl}(r) = r R_{nl}(r)\),在 \(r \leq r_c\) 内采用 TM 参数化:
说明: - 因子 \(r^{l+1}\) 保证原点处行为正确(\(u_l(0) = 0\)) - 指数形式 \(\exp(p(r))\) 保证正定性 - 偶次幂 \(r^{2i}\) 保证光滑性(所有导数在原点连续)
为什么选择指数形式?
TM 方法选择 \(u(r) = r^{l+1} \exp(\sum a_{2i} r^{2i})\) 而不是简单多项式,有三个原因:
正定性:\(\exp(\cdot) > 0\),保证内区无节点。 多项式可能有零点,导致非物理的节点。
解析性:偶次幂 \(r^{2i}\) 保证所有导数在 \(r=0\) 连续。 如果包含奇次幂,奇数阶导数在原点会有奇异性。
柔性:指数的参数空间比多项式更“平坦”,非线性方程组更容易收敛。
直观理解:伪波函数在内区的形状像一个“隆起”——在原点是零(因为 \(r^{l+1}\)), 向外先上升后下降,最终在 \(r_c\) 处平滑接到真实波函数。
TM 方法
连续性约束
在截断半径 \(r = r_c\) 处,要求伪轨道与 AE 轨道的函数值及前 \(2N-1\) 阶导数连续:
原始 TM 方法使用 \(N=3\) (6 个约束),我们简化为 \(N=2\) (4 个约束):
函数值匹配:\(u(r_c)\)
一阶导数匹配:\(u'(r_c)\)
二阶导数匹配:\(u''(r_c)\)
范数守恒:\(\int_0^{r_c} |u|^2 dr\)
这给出 4 个方程,求解 4 个系数 \(a_0, a_2, a_4, a_6\)。
导数计算
设 \(p(r) = \sum_{i=0}^N a_{2i} r^{2i}\),则:
其中:
范数积分
内区范数:
这是一个超越积分,需要数值求解(使用 Simpson 法则或 Gauss 积分)。
非线性方程组
定义残差函数 \(\mathbf{F}(\mathbf{a})\) 如下(\(\mathbf{a} = [a_0, a_2, a_4, a_6]^T\)):
求解 \(\mathbf{F}(\mathbf{a}) = \mathbf{0}\),使用 scipy.optimize.fsolve (混合 Powell 算法)。
数值实现
初值选择
系数初值对收敛性影响很大。推荐初值:
内外区拼接
完整伪轨道:
数值稳定性
指数溢出保护:
在计算 \(e^{p(r)}\) 时,如果 \(p(r)\) 过大(\(> 100\)),可能溢出。 使用对数形式处理:
\[\ln u(r) = (l+1) \ln r + p(r)\]范数积分精度:
使用自适应积分(如
scipy.integrate.quad)或高阶 Simpson 法则。求解器容差:
fsolve的容差设为xtol=1e-8, maxfev=1000。
数值实现指南
伪代码框架
def tm_pseudize(r, w, u_ae, eps, l, rc, N=2):
# 1. 找到 rc 对应的网格索引
i_rc = find_index(r, rc)
# 2. 计算 AE 在 rc 处的导数
u_rc, du_rc, d2u_rc = compute_derivatives(r, u_ae, i_rc)
# 3. 计算 AE 内区范数
Q_ae = simpson_integral(u_ae[:i_rc]**2, r[:i_rc])
# 4. 定义残差函数
def residuals(a):
u_ps, du_ps, d2u_ps = eval_tm_at_rc(rc, l, a)
Q_ps = compute_tm_norm(r[:i_rc], l, a)
return [
u_ps - u_rc,
du_ps - du_rc,
d2u_ps - d2u_rc,
Q_ps - Q_ae
]
# 5. 求解
a_init = [log(u_rc / rc**(l+1)), 0, 0, 0]
a_solution = fsolve(residuals, a_init)
# 6. 拼接
u_ps = splice(u_ae, a_solution, l, i_rc)
return u_ps, a_solution
精度检验
范数守恒误差
定义相对误差:
验收标准:\(\delta_{\text{norm}} < 10^{-5}\)
连续性误差
检查在 \(r_c\) 处的相对误差:
验收标准:\(\delta_k < 10^{-4}\) for \(k = 0, 1, 2\)
参考文献
原始论文:N. Troullier and J. L. Martins, "Efficient pseudopotentials for plane-wave calculations," Phys. Rev. B 43, 1993-2006 (1991). 方程 (14)-(18) 定义了 TM 方法的核心公式。
QE 实现指南:P. Giannozzi, Notes on pseudopotential generation (2019), 第 2.2-2.3 节详细说明了 TM 伪化、截断半径选择与实现要点。 https://www.quantum-espresso.org/wp-content/uploads/2022/03/pseudo-gen.pdf