跳转至

21. 化简 11:SCF 自洽迭代

1. 化简位置

12 步化简链的第 11 步。到这一步我们已经完成了:化简 1-5 把多体问题压缩到 Kohn-Sham 单粒子方程 + XC 泛函;化简 6-10 把 KS 方程离散化成平面波 + k 点网格 + 对称性上的有限矩阵特征值问题

但还剩最后一个循环依赖没解开——这就是本步要处理的。


2. 上一步的困难:\(V_{eff}\)\(\rho\) 的鸡生蛋

Kohn-Sham 方程形式上是一个单粒子本征问题:

\[\left[ -\frac{1}{2}\nabla^2 + V_{eff}[\rho](\vec{r}) \right] \phi_i(\vec{r}) = \varepsilon_i \phi_i(\vec{r})\]

其中有效势

\[V_{eff}[\rho] = V_{ext} + V_H[\rho] + V_{xc}[\rho]\]

Hartree 势 \(V_H[\rho](\vec{r}) = \int \frac{\rho(\vec{r}')}{|\vec{r}-\vec{r}'|} d\vec{r}'\)XC 势 \(V_{xc}[\rho]\) 都是密度 \(\rho\) 的泛函。而 \(\rho\) 又是通过 KS 轨道求出的:

\[\rho(\vec{r}) = \sum_i f_i |\phi_i(\vec{r})|^2\]

这是一个非线性耦合\(\rho \to V_{eff}[\rho] \to H \to \phi_i \to \rho'\)。求解不能一步到位。

ML 视角:这就像 EM 算法里的隐变量——你需要参数才能算出隐变量的后验,需要后验才能更新参数。解法也类似:固定点迭代


3. 引入的假设 / 解法

假设:该固定点存在且可达(对几乎所有常规体系成立)。

解法:Self-Consistent Field (SCF) 迭代 + 混合算法。

一次 SCF 迭代的完整流程(calculation='scf' 内部循环):

  1. 初猜 \(\rho_0\)
  2. 原子密度叠加(superposition of atomic densities),或上一次计算的结果
  3. 构造 \(V_{eff}[\rho_{in}]\)
  4. \(V_H\)(FFT 解泊松方程)、\(V_{xc}\)(逐点评估泛函)
  5. 构造 H 算符在平面波基组里的作用
  6. 注意是"作用"而非"显式矩阵"——基组维度可达 \(10^5\)-\(10^6\),显式 H 根本装不下
  7. 解广义特征值问题 \(H \vec{c} = \varepsilon S \vec{c}\)
  8. QE 默认用 Davidson 对角化diagonalization='david'
  9. Davidson 只需要 H·ψ 的作用,属于 Krylov 子空间方法
  10. 类比:GMRES / Lanczos / CG,矩阵-向量积 O(N²) 而不是显式分解 O(N³)
  11. 填充占据态
  12. 绝缘体:按 Aufbau 原则,能量最低 N 个轨道填 1,其他填 0
  13. 金属:费米面附近用 smearing(Gaussian / Marzari-Vanderbilt / Methfessel-Paxton),把阶跃函数平滑成温度类似的分布
  14. 算新密度 \(\rho_{new}(\vec{r}) = \sum_i f_i |\phi_i(\vec{r})|^2\)
  15. 混合 \(\rho_{in}^{(n+1)} \leftarrow \text{Mixer}(\rho_{in}^{(n)}, \rho_{new}^{(n)}, \text{历史})\)
  16. 检查收敛
  17. |ρ_new - ρ_old| < conv_thr(QE 实际用的是能量意义下的估计收敛性:estimated scf accuracy
  18. 或总能量变化 |E_new - E_old| < conv_thr
  19. 若未收敛,回到第 2 步

4. 引入的新概念

4.1 Davidson 对角化

广义特征值问题 \(H\vec{c}=\varepsilon S\vec{c}\) 在平面波表示下维度 \(\sim 10^5\)。但我们只要最低的 \(N_{band}\) 个(\(\sim\) 价电子数),用 Davidson 算法

  • 维护一个子空间 \(V\)(初始含 N_band 个试向量)
  • 扩展方向:\(H\vec{v}_i - \varepsilon_i S\vec{v}_i\) 的预条件残差
  • \(V\) 里做小规模 Rayleigh-Ritz(几百维),得当前特征值估计
  • 迭代扩展到收敛

关键:只需要 H·ψ 的作用(在平面波基下是 FFT + 局部乘 + 投影),不构造完整 H 矩阵。复杂度 \(O(N_{band}^2 \cdot N_{PW} \cdot \log N_{PW})\)

ML 类比:就像做 PCA 时的 power iteration / Lanczos,不需要算完整协方差矩阵。

4.2 密度混合 (mixing)

为什么要混合?如果直接 \(\rho_{in}^{(n+1)} = \rho_{new}^{(n)}\),绝大多数体系会振荡或发散——电子气的介电响应很强,密度扰动被放大。

线性混合 (plain): $\(\rho_{in}^{(n+1)} = \alpha \rho_{new}^{(n)} + (1-\alpha) \rho_{in}^{(n)}\)$

其中 \(\alpha \in (0, 1]\) 就是 mixing_beta。它起的作用是低通滤波——抑制高频振荡。

Anderson / Broyden 混合:用历史若干步 \((\rho_{in}^{(k)}, \rho_{new}^{(k)} - \rho_{in}^{(k)})\) 估计一个近似的逆 Jacobian,把迭代从一阶收敛加速到准牛顿的超线性收敛。

ML 类比非常直接: - 线性混合 = SGD with momentum(\(\alpha\) 小 ≈ 学习率小) - Broyden / Anderson = quasi-Newton(类似 L-BFGS 里维护历史差分) - mixing_ndim = 保留的历史步数,类似 L-BFGS 的 m

QE 默认用 Broyden 的一个变体(mixing_mode='plain' 其实已是 Broyden-风格 mixing,只是命名历史遗留)。

4.3 Smearing(金属特有)

费米面上的占据函数是阶跃 \(f(\varepsilon) = \Theta(\varepsilon_F - \varepsilon)\),但在数值上:k 点附近的本征值会穿过 \(\varepsilon_F\),造成占据数剧烈变化(0 跳到 1)→ 对 k 点采样极敏感 → 能量不收敛。

解法:用一个宽度 degauss (Ry) 的光滑函数替代阶跃: - smearing='gaussian':高斯 - smearing='mv' / 'cold':Marzari-Vanderbilt(推荐) - smearing='mp':Methfessel-Paxton(可消除一阶误差)

物理上类比有限电子温度 \(T \sim\) degauss,但只是数值 trick,不代表真实温度。

4.4 SCF 不收敛的"难体系"

体系 为什么难 应对
金属 费米面态密度高,占据变化剧烈 smearing + 较小 mixing_beta
磁性(Fe, Ni, NiO) 存在非磁解 / 反铁磁解多个局部极小;易塌到非磁解 显式 starting_magnetization
强关联 (NiO, 过渡金属氧化物) DFT 本身定性错误(把 Mott 绝缘体预测成金属) 不是 SCF 的问题,需要 DFT+U、DMFT
大晶胞 / 低维 长程电荷转移被混合算法误处理 mixing_mode='local-TF''TF'

5. 对应 QE 字段

&ELECTRONS 名字空间全部关于 SCF:

字段 含义 典型值
calculation='scf' 触发单点 SCF(无原子移动)
conv_thr 收敛阈值(Ry,能量意义) 1e-6(粗)→ 1e-8(常规)→ 1e-10(超严)
mixing_beta 线性混合系数 α 0.7(绝缘体),0.3(金属),0.1(难体系)
mixing_mode 混合算法 'plain'(默认,含历史)/ 'TF' / 'local-TF'
mixing_ndim 混合历史长度 8(默认)
electron_maxstep 最大迭代步数 100(默认足够),磁性 200+
diagonalization 对角化器 'david'(默认)/ 'cg'(更稳但慢)

&SYSTEM 里与 SCF 相关的:

字段 含义
occupations 'smearing' / 'fixed' / 'tetrahedra'
smearing 'mv' / 'gaussian' / 'mp'
degauss smearing 宽度(Ry),典型 0.01-0.02
nspin=2 打开自旋极化(磁性体必需)
starting_magnetization(i) 第 i 种原子初始磁矩(Bohr magneton 数)

输出中的 SCF 监控

每轮迭代 QE 输出:

iteration #  3     ecut=    40.00 Ry     beta=0.70
Davidson diagonalization with overlap
ethr =  1.00E-08,  avg # of iterations =  2.3

total cpu time spent up to now is        1.8 secs

total energy              =     -15.84528512 Ry
estimated scf accuracy    <       0.00000041 Ry
  • estimated scf accuracy:当前与自洽解的能量差估计,要降到 conv_thr 以下
  • avg # of iterations:内层 Davidson 步数,如果一直 >20 说明对角化预条件不好
  • 最后 convergence has been achieved in N iterations 表示成功

6. 对应 benchmark 条目

DFTBench 中涉及 SCF 收敛的字段:

  • questions/*.json 里的输入模板有 conv_thr 参数
  • questions/vc_relax_scf.json 要求 conv_thr = 1.0e-8(高于常规 scf,因为结构弛豫对力的精度要求高)
  • 输出 total energy → 评分字段 total_energy_ev_per_fu(每 formula unit 的总能量,eV 单位)
  • SCF 不收敛时 benchmark 直接失败(计 0 分)

tritonDFT-src/benchmark/questions/ 下 9 个任务模板。


7. ML 类比速查

DFT/SCF 概念 ML 对应
SCF 迭代 EM 算法(E 步:给定 V_eff 解对角化得轨道;M 步:由轨道算 ρ 更新 V_eff)
线性混合 SGD with momentum,mixing_beta ≈ 学习率
Broyden/Anderson 混合 quasi-Newton / L-BFGS,mixing_ndim = 历史长度 m
Davidson 对角化 Krylov 方法(Lanczos / GMRES / CG),只需矩阵-向量积
conv_thr early stopping 的阈值
SCF 不收敛 训练发散(梯度爆炸 / loss 振荡)
smearing 类似 softmax 温度,消除不可导阶跃
starting_magnetization 网络权重初始化(初始化不好会掉进差的 local min)

特别要注意:SCF 是内层循环。下一步 BFGS 是外层循环。整个 vc-relax 是一个双层优化结构(像 MAML / bilevel optimization),本笔记处理内层。


8. 典型取值与常见坑

典型参数

体系类型 conv_thr mixing_beta degauss electron_maxstep
半导体/绝缘体(Si, NaCl) 1e-8 0.7 — (fixed) 100
简单金属(Al, Cu) 1e-8 0.3-0.5 0.01 Ry 100
磁性(Fe, Ni) 1e-8 0.3 0.01 Ry 200+
强关联(NiO, MnO) 1e-7 0.1-0.3 0.01 Ry 300+,常配 DFT+U

常见坑

  1. SCF 不收敛 / 振荡
  2. mixing_beta(0.7 → 0.3 → 0.1)
  3. mixing_ndim(8 → 20)
  4. mixing_mode='local-TF'(对长程电荷转移有效)
  5. electron_maxstep
  6. 检查初始结构是否合理(原子距离过近会导致密度奇异)

  7. 磁性体塌到非磁解

  8. 必须显式设 starting_magnetization(1)=0.5(每种原子)
  9. 反铁磁需要不同 site 给相反初始磁矩 → 用 nspin=2 + 人工 site 区分

  10. 金属 k 点不够 / degauss 不对

  11. 金属需要比绝缘体密得多的 k 网格(Si 8×8×8 够,Fe 可能要 16×16×16)
  12. degauss 太大 → 能量有系统偏差;太小 → 需要更多 k 点
  13. degauss 收敛测试:外推到 degauss→0

  14. Davidson 卡住 / avg # of iterations 很大

  15. 初猜密度差 → startingwfc='random' 换成 'atomic'
  16. 对角化阈值 ethr 自动调节,一般不用碰

  17. Si SCF 实战参考(你之前跑过的)

  18. Si 体系在 ecutwfc=40, k=6×6×6, conv_thr=1e-8 下约 10 轮收敛
  19. Ge 稍难,15-20 轮
  20. Fe 磁性体可能 50+ 轮
  21. NiO DFT+U 可能要 100+ 轮

  22. conv_thr 太松导致力不准 — 这是下一步 BFGS 会踩的坑,见 22-bfgs-relax.md


下一步阅读

  • 22-bfgs-relax.md — 化简 12:BFGS 结构弛豫(外层优化,内层就是本篇的 SCF)
  • 30-observables.md — SCF 收敛后能直接读出哪些可观测量