算法原理 ======== 本节详细介绍赝势生成的数学原理和数值方法。 .. toctree:: :maxdepth: 2 tm_method potential_inversion kb_method validation_methods 概述 ---- 赝势生成流程包含以下关键步骤: 1. **全电子原子解** - 获取参考态波函数和能级 2. **TM 伪化** - 在截断半径内构造光滑伪轨道 3. **势反演** - 从伪轨道反演半局域势 4. **KB 转换** - 构造可分离非局域投影 5. **可转移性检验** - 验证赝势质量 物理动机:为什么需要赝势? -------------------------- **核心矛盾** 在平面波 DFT 计算中,基组是 :math:`\phi_{\mathbf{G}}(\mathbf{r}) = e^{i\mathbf{G}\cdot\mathbf{r}}`。 真实的价电子波函数在核附近有剧烈振荡(为了与芯态正交),需要极高频的平面波才能描述。 但价电子的化学性质主要由核外区域决定。我们是否可以“重新定义”核内的波函数, 使其平滑,同时保持核外物理性质不变? **赝势的回答** 是的。在某个截断半径 :math:`r_c` 内,用平滑的“伪波函数”替代振荡的真实波函数: - :math:`r > r_c`:伪波函数 = 真实波函数(外区不变) - :math:`r \leq r_c`:伪波函数平滑、无节点 **代价是什么?** 需要同时修改势能,使得平滑的伪波函数仍然是薛定谔方程的解。 这个修改后的势就是“赝势”。 **模守恒的物理意义** 为了保证散射性质不变,我们要求内区电荷守恒: .. math:: \int_0^{r_c} |\phi_{\text{PS}}|^2\,dr = \int_0^{r_c} |\phi_{\text{AE}}|^2\,dr 这保证了: 1. 静电势在 :math:`r > r_c` 处正确 2. 散射相移在相关能量范围内尽可能一致 3. 赝势在不同化学环境下具有可转移性 赝势生成流程 ------------ .. code-block:: text ┌──────────────────────────┐ │ 全电子求解(AE) │ solve_ae_atom() │ 输出:u_l(r), ε_l, n(r) │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────────┐ │ TM 伪化 │ tm_pseudize() │ r ≤ r_c:内区平滑化 │ │ r > r_c:外区保持不变 │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────────┐ │ 势反演(半局域势) │ invert_semilocal_potential() │ V_l = ε + u''/(2u) - l(l+1)/(2r²) │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────────┐ │ KB 转换(可分离形式) │ kb_transform() │ V = V_loc + Σ |β⟩D⟨β| │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────────┐ │ 验证(可转移性/稳定性) │ run_full_validation() │ 范数 / 对数导数 / 幽灵态 │ └──────────────────────────┘ 理论基础 -------- 径向 Schrödinger 方程 ~~~~~~~~~~~~~~~~~~~~~ 对于球对称势,径向波函数 :math:`u_{nl}(r) = r R_{nl}(r)` 满足: .. math:: \left[-\frac{1}{2}\frac{d^2}{dr^2} + V_l(r) + \frac{l(l+1)}{2r^2}\right] u_{nl}(r) = \varepsilon_{nl} u_{nl}(r) 其中 :math:`V_l(r)` 是半局域势(依赖于角动量 :math:`l`)。 范数守恒条件 ~~~~~~~~~~~~ 在截断半径 :math:`r_c` 内,伪轨道 :math:`\tilde{u}_{nl}` 与全电子轨道 :math:`u_{nl}` 的范数相等: .. math:: \int_0^{r_c} |\tilde{u}_{nl}(r)|^2 dr = \int_0^{r_c} |u_{nl}(r)|^2 dr 这保证了电荷分布在 :math:`r \leq r_c` 内的一致性。 可分离非局域形式 ~~~~~~~~~~~~~~~~ 完整的非局域势可表示为: .. math:: V_{\text{NL}}(r, r') = V_{\text{loc}}(r) \delta(r - r') + \sum_l |\beta_l\rangle D_l \langle\beta_l| 其中: - :math:`V_{\text{loc}}(r)` - 局域势 - :math:`|\beta_l\rangle` - 投影算符 - :math:`D_l` - 耦合系数(能量单位:Hartree 原子单位)