静态散度校正详解
在大地电磁(MT)和其它频率域电磁勘探方法中,通常要数值求解以下频率域Maxwell方程组:
以交错网格有限差分方法为例,对电场旋度方程(法拉第定律)两边取旋度并代入忽略位移电流的磁场旋度方程(麦克斯韦-安培定律),可得到以下有限差分控制方程(双旋度方程):
1. 双旋度方程的有限差分线性系统¶
将双旋度方程在每个单元格按空间方向展开,得到以下三分量耦合方程:
上式中\sigma_x、\sigma_y和\sigma_z分别为各向同性电导率在非均匀网格棱边上对不同空间方向的各向异性近似,若电磁场交错采样(如图1),理论上已满足了两个散度条件(Yee, 1966):

使用差商代替微分,对三维矢量电场E经网格编号的待解三维电场向量e=[e_x, e_y, e_z]^T及边界条件b可得到以下大型稀疏线性方程组:
若使用直接法(如LU分解,多波前法)等解此线性方程组内存需求巨大,时间和空间复杂度都为O(n^3),因此对于大规模问题,使用Krylov子空间迭代法(如Bicgstab,QMR等)更合适。
2. 静态散度校正的原理¶
迭代法求解差分方程组时,若模型电导率空间分布函数\sigma(x,y,z)非平缓,或者频率非常低的时候收敛速度极慢甚至无法收敛。原因有二:(1)双旋度线性方程组的复系数矩阵K在i \omega \mu_0很小时非严格主对角占优;(2)当模型复杂时,迭代早期e_k会过早拟合b的“高频”成分,一旦陷入某个局部奇异解便无法保证整体收敛。(理解第2条需要参考代数多重网格法的原理)。
对于问题(1),需对Krylov子空间迭代施加预条件。选择非耦合部分的标量Helmhoz方程部分作为预条件问题,如下:
预条件的本质是把条件数不好的Ke=b转换为MKe=Mb来求解,其中M为上式左边的离散算子矩阵,解Mv=u需使用不完全分解+回代方法,经测试不完全Cholesky分解(ICC)和不完全LU分解(ILU)均可大幅提高收敛效率,但模型复杂时无填充的ICC(0)和ILU(0)效果仍然不好(现在MT正演领域没人测试这个),从内存管理和编码实用性来说,带填充的ILU(k)分解性价比相对最高(k=8)。
对于问题(2),则需用到静态散度校正技术(smith,1996)。若e_k为迭代早期满足残差r_k=K e_k - b的当前解。因为e_k本身并不满足K e_k = b,且r_k的“高频”成分过多。
若e_k = e^c_k + e^r_k,e^c_k即为满足电流密度散度为0的部分(对应“低频”成分),e^r_k是不满足散度条件的“高频”成分。在第k次迭代只保留e^c_k即可避免迭代陷入奇异解而极大加速收敛速度。
考虑电场散度条件的连续性问题,且设E_k=E^c_k+E^r_k,下式成立:
引入标量势\varphi_k满足E^r_k = \nabla \varphi_k,并代入以上方程,则可得到:
对\nabla \cdot \sigma \nabla算子离散化,可得到以下新线性方程组:
其中向量p为\varphi_k的离散向量,右端项c是对e_k应用\nabla \cdot \sigma离散算子得到的向量。向量p的采样点位于每个长方体单元的节点处,差分算子及采样方式如下图所示:

求解方程组Dp=c得到p之后,对p应用离散梯度算子即可得到需校正的E^r_k。
3. 带静态散度校正的迭代法¶
电场双旋度方程的静态散度校正迭代解法流程如下:
(1) e := 0
(2) for \space\space i = 1,..., N
(3) 求相对拟合差res:={||b-Ke||}_2 / {||b||}_2,若小于10^{-8}则跳出循环
(4) 常规SQMR或Bicgstab迭代M次得到新的e
(5) for \space\space j = 1,..., L (一般L=5即可)
(6) 计算向量c:=Ve, 其中V为算子\nabla \cdot \sigma的离散矩阵形式
(7) 计算div={||c||}_2,若小于10^{-10}则跳出(1,...,L)循环
(8) 求解Dp=c得到p
(9) 更新e := e - Gp,其中G为离散梯度算子矩阵
以上流程里求解Dp=c也是一个耗时过程,如果使用迭代法,单次迭代耗时大致为求解Ke=b的⅓。所以内部Ke=b的迭代次数M和外部循环次数N的选择是算法快慢的关键。通过大量模型实验,取M=100和N=20一般是耗时最短的。不同组合的实验收敛曲线见下图。

虽然图3显示M=50(蓝色)的Ke=b的迭代次数最少,但由于求解Dp=c的次数是M=100(红色)的两倍,总耗时最短的却是M=100。
总而言之,静态散度校正是求解低频复杂介质扩散场双旋度方程的迭代法必要过程。究竟多少次Ke=b迭代施加一次散度校正是一个trade off,目前还没有最佳的理论方案。