3.2.5. 隐式 LU-SGS 时间推进格式
(1) 方法简介
LU-SGS 方法是一种迭代求解算法,意为三角分解-对称 Gauss-Seidel 迭代方法 (A lower-upper factorization and a symmetric Gauss-Seidel relaxation scheme)。
式 Eq.3.2.63 和 Eq.3.2.65 在全场联立后, 三维结构网格 (网格量 \(N \times N \times N\)) 会得到一个大小为 \((5N)^3\) 的对角块线性方程组 (block-banded matrix)。 每一行中非零块的宽度 (bandwidth) 大致为 \(B=(5N)^2\), 那么,求解线性方程组的计算量大致为 \((5N)^3 B^2\), 计算代价难以接受。
Jameson 提出的 LU-SGS 方法采用了简化的正、负特征矩阵分裂,使得构造的 \(L, U\) 算子不包含块矩阵求逆。 算子 \(D\) 为简单的标量矩阵求逆,因此求逆过程只是一个全场逐点扫描的过程。 只需要进行 \(L, U\) 两次扫描:一次从左上到右下的 GS 迭代,一次相反的迭代,大大提高了计算效率。 由于迭代是两个方向对称进行的,所以称为对称 Gauss-Seidel 迭代。
LU-SGS 方法把求解对角快线性方程组的过程,简化为 两次显式扫描过程 。 这种方法编程比较简单,每步的计算量也较小。在计算中, 物理时间步长 可根据对非定常数值解时间方向精度的要求选取; 数值计算表明,物理时间步长的选取对计算过程的稳定性影响不大。 虚拟时间步长 理论上可以选任意值,但是数值实验表明, 在流场的初始值变化较为剧烈或光滑性不好时,选用较小的虚拟时间步长有利于计算的稳定。 在经过一定步数的计算后,虚拟时间步长可以选取较大的值,一般虚拟时间步长对应的 CFL 数为数十至数百时,计算可以收敛。非定常计算内迭代的次数,可以根据数值解是否满足条件 \(||\mathbf{U}^{(m+1)} - \mathbf{U}^{(m)}|| \le \Delta \tau \cdot \epsilon\) 自动确定。其中 \(\epsilon\) 为指定的小正数。
Note
求解 Euler 和 Navier-Stoke 方程的隐式方法,除了 LU-SGS 方法外, 还有近似隐式分解方法、点隐式方法、ADI 方法、线松弛方法 LU-SSOR 等等多种方案。 某些显式格式,也可以通过隐式残差光滑等方法,达到隐式格式的效果。
大部分显式格式和隐式格式在求解定常问题(或者用双时间步方法求解非定常问题) 时,均可采用一些加速收敛的措施。这些措施包括:局部时间步长、预处理(preconditioning) 和多重网格 (multigrid) 方法。根据需要,这些措施可以分别或者同时采用。
(2) 空间差分算子的处理
双时间步隐式时间推进格式 (Eq.3.2.63) 中的 \(\delta_\xi, \delta_\eta, \delta_\zeta\) 空间差分算子, 首先按照有限体积格式 (式 Eq.3.2.71) 进行近似:
将粘性净通量显式处理,即式 Eq.3.2.64 忽略粘性通量: \(A = \partial \hat{\mathbf{F}} / \partial \mathbf{U}\)。 其中, \(\Delta \mathbf{U}\) 代表 \(\Delta \mathbf{U}_{i,j,k}\)。
对无粘净通量使用矢通量分裂方法 (Eq.3.2.47) 进行拆分, 将界面上的无粘通量 Jocobian 矩阵按正负特征值分裂,采用一阶迎风法则。
那么,原隐式时间推进格式 Eq.3.2.63 变为:
其中, \(J\) (坐标转换雅可比矩阵 Eq.3.2.15 的模) 代表 \(J_{i,j,k}\) 。 残差项 \(\mathbf{R}(\mathbf{U}^{(m)})\) 见式 Eq.3.2.59, 其计算方法与显式时间推进中的处理方法相同 (式 Eq.3.2.38)。
为了保证下面 LU 分解的 \(L, U\) 算子在最大程度上对角占优, 应使得 \(+\) 特征矩阵的特征值非负,\(-\) 特征矩阵的特征值非正。 因此,采用式 Eq.3.2.47 中的矢通量分裂方法。
Yoon 和 Jameson 利用上述无粘通量 Jacobian 矩阵的近似分裂形式,使构造的 \(L, U\) 算子具有最大程度的对角占优,从而得到如下形式的一种快速有效的隐式 LU-SGS 形式:
其中, \(\text{RHS}^{(m)}\) 是 Eq.3.2.83 的右端项,为已知量。
其中, \(\sigma_A = (1+\varepsilon)|\lambda|_{\text{max}, A_i} + 2\nu_a\), \(\varepsilon \in [0,0.01]\), 稳定因子 \(\nu_a\) (Eq.3.2.48) 根据具体情况添加。
(3) 时间推进步骤
L 块向前扫描运算:
首先使用已知时间步的数据计算式 Eq.3.2.83 右端项 \(\text{RHS}\)。 执行 \(L\) 块算子运算, 进行全场逐点向前扫描得到中间预测值 \(\Delta \mathbf{U}^*\)。
即:
U 块向后扫描运算:
之后,进行全场逐点向后扫描得到式 Eq.3.2.83 的解 \(\Delta \mathbf{U}^{(m)}\):
即:
为了提高格式的鲁棒性,加快收敛速度,可对 \(\Delta \mathbf{U}^{(m)}\) 进行一次光顺处理。