跳转至

密度拟合技术

密度拟合是一种数值计算手段,其核心思路就是把两个基函数乘积变成另一套辅助基组的线性组合,对密度拟合支持最全面,最好的软件是ORCA,其支持RIJ,RIK,RIJONX,RIJCOSX等等多种加速方法,是大体系计算的首选.

密度拟合原理

核心表达式为:

\[ \chi_\mu(\mathbf{r})\chi_\nu(\mathbf{r}) = \sum_P d_P^{\mu\nu}\chi'_P(\mathbf{r}) \]

展开系数在计算前就被确定,系数的确定是通过最小化库伦积分的误差实现的.

在数学上,我们实际上就是用了一个假的密度取近似一个真实密度(这里的密度为广义密度,即基函数的乘积),所以方法被称作密度拟合技术.

这样,原本的四指标的双电子积分就可以被转化为三指标的积分.

以原本的四指标库伦积分为例:

\[ (\mu\nu|\sigma\lambda) = \int \int d\mathbf{r_1}d\mathbf{r_2} \chi_\mu(\mathbf{r_1})\chi_\nu(\mathbf{r_1})\frac{1}{r_{12}}\chi_{\lambda}(\mathbf{r_2})\chi_{\sigma}(\mathbf{r_2}) \]

使用DF之后得到:

\[ (\mu\nu|\sigma\lambda) = \int \int d\mathbf{r_1}d\mathbf{r_2} \sum_P d_P^{\mu\nu}\chi'_P(\mathbf{r_1})\frac{1}{r_{12}}\sum_q d_Q^{\lambda\sigma}\chi'_Q(\mathbf{r_2}) = \sum_{P,Q} d_P^{\mu\nu} d_Q^{\lambda\sigma}(P|Q) \]

对于密度拟合系数,其具有解析形式,常见的表达式为:

\[ d_Q^{\mu\nu} = \sum_P(\mu\nu|R)(R|Q)^{-1} \]

所以,积分转化为:

\[ (\mu\nu|\sigma\lambda) = \sum_{P,Q} \sum_{R,S}(\mu\nu|R)(R|P)^{-1}(P|Q)(Q|S)^{-1}(S|\lambda\sigma) = \sum_{R,S}(\mu\nu|R)(S|\lambda\sigma)\sum_{P,Q}(R|P)^{-1}(P|Q)(Q|S)^{-1} \]

注意到:

\[ \sum_{P,Q}(R|P)^{-1}(P|Q)(Q|S)^{-1} = (R|S)^{-1} \]

所以最终四指标积分可以写成:

\[ (\mu\nu|\sigma\lambda) = \sum_{R,S}(\mu\nu|R)(R|S)^{-1}(S|\lambda\sigma) \]

变成两个三指标积分和一个双指标积分的乘积.

密度拟合DF有时候也被称作RI近似,将DF应用于库伦项的加速被称作RIJ,用于交换项的加速被称作RIK,RIJ结合常规计算的K,则被称作RIJONX.

使用密度拟合技术也可以用于加速MP2,CCSD(T)等post-HF方法,但是不一定有熊,ORCA中的RI-CCSD(T)比常规CCSD(T)甚至耗时更久.

辅助基组

DF会给双电子积分带来计算误差,误差取决于辅助基组的大小,对于纯泛函,RIJK的加速效果显著,尽管杂化泛函的加速效果不如纯泛函,但是也能令速度有大幅度的提升.

对于最小化库伦能误差的基组,称之为/J基组,适用于RIJ以及RIJCOSX,最小化交换能而优化的辅助基组称之为/JK类基组,其尺寸更大,同时适用于RIJ和RIJK.

最小化电子相关能的基组为/C或者-RIFIT类基组,适用于双杂化泛函,Post-HF,TDDFT等多行列式方法的计算.

COSX技术

COSX技术是通过解析和数值混合的方法去加速交换项计算的技术,RI计算库伦项与COSX计算交换项合用的方法称之为RIJCOSX.

对于双电子积分\((\mu\sigma|\lambda\nu)\),可以把其中一个变量的积分改成解析计算的形式:

\[ (\mu\sigma|\lambda\nu) = \sum_g w(r_g)\chi_\mu(r_g)\chi_\sigma(r_g)\int \chi_\lambda(r)\chi_\nu(r)\frac{1}{|r_g-r|} d r \]

那这样四指标积分就会转为成一个三维张量和两个二维张量的乘积:

\[ (\mu\sigma|\lambda\nu) = \sum_g X_{\mu g}X_{\sigma g}A^{\lambda \nu}_g \]

然后,交换矩阵元就可以表示为:

\[ K_{\mu\nu} = \sum_{\lambda,\sigma}P_{\lambda\sigma}(\mu\sigma|\lambda\nu) = \sum_{\lambda,\sigma}P_{\lambda\sigma} \sum_g X_{\mu g}X_{\nu g}A^{\lambda \sigma}_g \]

可以进一步判定哪一些基函数之间的耦合对交换项的贡献可以忽略不计从而加速计算.

S-junction是以某基函数为中心画一个使其基函数值<1e-10的区域,如果有基函数在此区域内,则被纳入邻居列表.

P-junction则是以密度矩阵的矩阵元大小来判定基函数的邻居列表.