电荷密度混合算法介绍
作者:孙亮,邮箱:l.sun@pku.edu.cn
审核:陈默涵,邮箱:mohanchen@pku.edu.cn
最后更新时间:2023/11/09
一、背景
做基于 Kohn-Sham Density Functional Theory(KSDFT)的第一性原理计算的过程就是求解 Kohn-Sham (KS)方程
的过程。由于其中
均依赖于电荷密度,KS 方程无法直接求解,只能采取迭代的方法,也就是自洽场迭代法(scf, self-consistent field)。其流程可以概括为
上述过程也可以看作一个不动点问题:,代表从到的映射。
我们常常采用电荷密度混合(charge mixing)方法来提升 scf 迭代过程的稳定性和收敛效率,引入 charge mixing 方法后,scf 流程可概括为
其中表示 charge mixing 方法,它将前几步的电荷密度以一定的比例混合,得到下一步输入映射的电荷密度。
下面我们将介绍几种常用的 charge mixing 方法:plain mixing, Pulay mixing, 以及Broyden mixing方法。这三种算法均已实现在 ABACUS 中。
为了方便,下文中我们统一采用狄拉克符号,比如电荷密度记为。
二、算法介绍
我们一般定义为残差,当它的模时,迭代达到收敛。实际计算中,无法真正做到模为零,一般设置一个阈值来判断是否收敛。
值得一提的是,下面的推导中,我们都以电荷密度作为变量,但这些算法都适用于 charge mixing 过程中其它量的混合,比如动能密度等。它们也不仅适用于电荷密度混合,也可用于其它的优化问题。
1. Plain mixing
Plain mixing,也称 simple mixing,其思路是将和做线性组合,得到下一步的,为了保证混合前后电子数不变,混合的公式为
其中为 mixing 的步长,可以取 0 到 1 间的实数,越小,则迭代越稳定,但收敛所需的步数可能越多。(见第三部分,介绍 ABACUS 里面的相关参数)
一般而言,plain mixing 收敛较慢,不在实际计算中采用。
2. Pulay mixing
Pulay mixing[1]也叫 direct inversion of the iterative sub-space (DIIS) method,其思路是用前步的电荷密度做线性组合,在此线性空间中找到一个“最佳”的电荷密度,使得取极小值,再由和线性组合得到下一步的。
下面我们首先给出算法流程,然后进行相应的推导。
2.1 算法流程
需要存储前步迭代的和,
- 计算大小为的矩阵;
- 计算逆矩阵;
- 计算混合系数;
- 更新密度,为 mixing 的步长。
2.2 算法推导
为了记号方便,我们将参与线性组合的前步电荷密度重新标记为。
首先我们定义,为了保证电子数守恒,要求。
为了找到最佳的组合,使得取极小值,同时满足的条件,我们采用拉格朗日乘子法,定义
进一步假设,即,上式变为
上面我们定义了,它满足。
于是有
两边同乘并对求和,有
由,有,因此
代回上式,我们得到最佳混合比例
最终,我们得到由前步电荷密度线性组合可以得到的“最佳”电荷密度,相应的残差,其中的系数
因此下一次迭代的初始电荷密度
3. Broyden mixing
Broyden mixing 是拟牛顿法的一种,它的思路是对的雅可比矩阵的逆进行近似,从而采用牛顿法进行迭代。
在其发展过程中,曾出现过不同的形式,这里我们介绍的是 1988 年 Johnson 提出的 Simplified modified Broyden method[2],它兼具收敛速度快与内存消耗少的优势,也是 ABACUS 默认采用的 mixing 方法。
我们先给出算法流程,再进行推导,以下推导参考了文献[3]。
3.1 算法流程
首先我们定义,。
需要存储前步迭代的和,
- 计算大小为的矩阵;
- 计算逆矩阵;
- 计算混合系数;
- 更新密度,为 mixing 的步长。
3.2 算法推导
3.2.1 牛顿法
我们首先介绍牛顿法,对于 charge mixing 中的不动点问题,可以改写为
,这里。
假设,且在附近足够光滑,选附近的作为出发点,做泰勒展开,有
其中为雅可比矩阵,做线性近似后,有
由此得到牛顿法的迭代公式
此公式中出现了雅可比矩阵的逆,精确求解将极为耗时,因此一般通过求解线性方程组来得到它:
记,由,有。
综上,牛顿法的完整迭代公式为
牛顿法中,需要先求出矩阵,在 charge mixing 的应用场景中,的大小为,为实空间格点数,因此的求解和储存都很不方便。
3.2.2 Broyden 算法
为了克服牛顿法的问题,人们提出了拟牛顿法(quasi-Newton),其基本思路是对进行近似,而不是精确求解。拟牛顿法中,我们一般要求近似的仍然满足的条件,称为拟牛顿条件。
Simplified modified Broyden method 是拟牛顿法的一种,假设已知,它通过求解以下优化问题得到:
其中,,均为大小为的矩阵,要求对于前步的和均满足拟牛顿条件,
我们仍然采用拉格朗日乘子法,定义
为了方便,这里我们省去了的下标,并且记,其中为拉格朗日乘子组成的大小为的向量。
将上式展开,有
令,由上式有
因此
注意我们将括号中的近似成了,上式写成矩阵形式为
代入拟牛顿条件中,要求,因此上述优化问题给出
假设,上式变为
于是迭代公式为
下面我们将此公式改写成更加清楚的形式,首先令,则,因此
其中。
最终
三、ABACUS 相关参数介绍
上述三种算法均已在 ABACUS 中实现,下面我们简要介绍 ABACUS 中 charge mixing 的相关参数,并将它们与上面的公式对应起来,详细文档见链接。
mixing_type
:选择 mixing 算法,可选项为plain
,pulay
,broyden
,分别对应上述三种算法,一般而言,Broyden 算法收敛最快,Pulay 略慢,plain 最慢。默认选项为broyden
。mixing_beta
:对应上述公式中的参数,绝对值越小,则收敛过程越稳定,但达到收敛所需的步数可能增多。对于难以收敛的体系,特别是收敛过程中能量出现上下波动的例子,可以尝试减小mixing_beta
。mixing_ndim
:对应上述公式中的参数,Pulay 和 Broyden 算法会借助过去步的信息构建下一次迭代的电荷密度,默认值为 8。对于难以收敛的体系,略增大mixing_ndim
可以增强收敛过程的稳定性。mixing_gg0
:是否采用 Kerker scaling 方法,此方法会在倒空间中给乘上的因子,以抑制混合过程中的高频项,其中为波矢,由mixing_gg0
设置。特别是对于难以收敛的金属体系,打开 Kerker 方法可以帮助计算达到收敛。mixing_tau
:是否对动能密度进行混合,适用于使用 meta-GGA 交换关联泛函的场景。mixing_dftu
:是否对密度矩阵进行混合,适用于使用 DFT+U 的场景。scf_thr
:对应于 charge mixing 的收敛判据,对于原子轨道基组(LCAO),默认值为 1e-7,对于平面波基组(PW),默认值为 1e-9。scf_thr_type
:选择上述公式中内积的定义,以及相应收敛判据的计算方式。- 1:,表示取实部,收敛判据为,默认用于 PW 基组;
- 2:,收敛判据为,默认用于 LCAO 基组。