承接上一篇。第 4 章把 Stokes 问题化为鞍点形式的变分问题,并落到代数系统 (4.10) 上;本篇继续第 5 章(完整 Navier–Stokes 方程的有限元处理)、第 6 章(鞍点系统的迭代解法)与附录 A(稀疏矩阵)。行文中穿插了我复习时产生的若干疑问,以及澄清的结果——其中有几处是我原先的理解出了偏差,一并记录下来。

5 Navier–Stokes 方程的有限元方法

第 4 章的变分理论是针对 Stokes 问题发展的,它是丢弃对流加速度之后所得的线性内核。然而真实流动携带惯性,而恰恰是对流项使流体力学既丰富又困难:它令方程非线性化,驱动向湍流的转捩,并且——一旦离散——摧毁了使 Stokes 系统如此易于处理的对称性。本章把有限元框架推广到完整的不可压缩 Navier–Stokes 方程:写出弱形式,记录关于存在唯一性的已知结论,讨论保持离散稳定的有限元空间,并且——对后文而言最为重要——说明非线性如何通过一列线性问题得到消解。这些线性问题中的每一个都是第 4 章那种鞍点系统,只是此时一般不再对称,其高效求解正是第 6 章的主题。

5.1 方程及其弱形式

在定常不可压缩情形下,把第 2 章的动量平衡中的物质导数展开,得

(5.1)ρ(u)udiv(2μD(u))+p=fdivu=0  Ωu=0  Ω.

与 Stokes 问题 (4.2) 唯一的——但具有决定意义的——差别,是对流项 ρ(u)u ,它关于未知速度是二次的。

像第 4 章那样作检验并加入对流贡献,弱问题除了 (4.3) 的粘性形式 a 与约束形式 b 之外,还要用到三线性形式

(5.2)c(w;u,v):=ρΩ(w)uvdxw,u,vV.
定义 5.1(弱 Navier–Stokes 问题)

(u,p)V×Q ,使得

(5.3)a(u,v)+c(u;u,v)+b(v,p)=(v)对所有 vVb(u,q)=0对所有 qQ.

支配分析的是 c 的两条性质。由 Hölder 不等式与 Sobolev 嵌入 H1L4 (对 d4 成立,故在 d{2,3} 中可用),该形式有界,

(5.4)|c(w;u,v)|NwVuVvV

常数 N 只依赖于 Ω ρ 。此外,对无散度的对流场,分部积分给出反对称性

(5.5)c(w;u,v)=c(w;v,u)只要 divw=0特别地c(w;u,u)=0.

恒等式 c(w;u,u)=0 是一条乔装的离散能量平衡:它表明对流输运动量而不创造或销毁动能,这对连续问题的先验估计与离散的稳定性都不可或缺。由于有限元速度未必精确无散度,人们常把 c 换成它的反对称部分 c~(w;u,v)=12(c(w;u,v)c(w;v,u)) ,它恒满足 c~(w;u,u)=0

5.2 存在性与唯一性

非线性改变了适定性理论的性质。Stokes 问题对任意数据都唯一可解(定理 4.5),而 Navier–Stokes 问题只保证至少有一个解;唯一性则要求数据相对于粘性足够小。

定理 5.2(存在性与条件唯一性)

Ω 为有界 Lipschitz 域, fV 。则弱 Navier–Stokes 问题 (5.3) 至少有一个解 (u,p)V×Q 。若数据还满足小性条件

(5.6)NfVα2<1

其中 α a 的强制常数、 N 是三线性形式的范数 (5.4),则解唯一。

存在性由 Galerkin 论证配合 Brouwer 不动点定理给出,唯一性由依赖反对称性 (5.5) 的压缩估计给出。引入 Reynolds 数 Re=UL/ν ν=μ/ρ 为运动粘度, U,L 为特征速度与长度),条件 (5.6) 本质上就是关于 Re 的小性条件:低 Reynolds 数下流动唯一,且通常是定常层流;随着 Re 增大,解可能丧失唯一性,最终丧失定常性——这正映照着通向湍流的物理路径,也是高 Reynolds 数计算中数值困难的解析投影。

5.3 inf–sup 稳定单元

离散从第 4 章继承了这样一条要求:速度/压强对 (Vh,Qh) 必须关于 h 一致地满足假设 4.8 的离散 inf–sup 条件。对流并不放松这一要求——它进一步约束速度空间,而压强稳定性仍由 inf–sup 支配。两族稳定单元贯穿全书:

  • Taylor–Hood 族:速度用 k 次、压强用 k1 次连续分片多项式( k2 ),最低阶成员是三角形上的 P2/P1 ,或四边形上的 Q2/Q1
  • MINI 单元:连续 P1 速度用一个内部泡函数加以富化,配以连续 P1 压强;泡函数恰好提供了在最低阶满足 inf–sup 所需的那些速度自由度。

两种情形下速度空间都比压强空间"更富",这正是离散散度得以满射的原因。相反,等阶插值(如 P1/P1 )违反该条件并容许虚假压强模态——即第 6 章将从代数上分析的棋盘格不稳定性——除非加以稳定化(5.5 节)。

5.4 线性化:Picard 与 Newton 迭代

(5.3) 的离散对应物是一个非线性代数方程组,需迭代求解。两种标准线性化都把每一步化为 Oseen 型线性问题——即围绕一个已知速度场作对流增广的 Stokes 问题。

Picard(Oseen)迭代。 把对流冻结在当前迭代 uk 上,求解 (uk+1,pk+1)

(5.7)a(uk+1,v)+c(uk;uk+1,v)+b(v,pk+1)=(v)b(uk+1,q)=0.

uk 固定后问题是线性的。Picard 迭代全局收敛但只是线性收敛,且其压缩因子随 Reynolds 数增大而恶化;它稳健,是远离解时的首选。

Newton 迭代。 把映射 uc(u;u,v) uk 处沿方向 δu 线性化,产生两项 c(δu;uk,v)+c(uk;δu,v) 。于是 Newton 步对增量 (δu,δp) 求解

(5.8)a(δu,v)+c(uk;δu,v)+c(δu;uk,v)+b(v,δp)=rk(v)b(δu,q)=sk(q)

其中 (rk,sk) 是当前迭代的残量。Newton 二次收敛但只是局部收敛,故实践中常先作几步 Picard 再切换到 Newton。

我的疑问 1:Gâteaux 导数里的 到底是什么?

习题纸上把 Newton 线性化写成

DFν((vk,pk);(u,r),(w,q))=ddε|ε=0Fν((vk+εu, pk+εr);(w,q)).

这里的 (u,r) 是不是"更新 (vk,pk) 所朝的方向"?

正是如此。 Fν((v,p);(w,q))=0 (对所有检验函数 (w,q) 成立)是定常 Navier–Stokes 的弱非线性残量形式,而 Newton 法求解 Fν=0 需要 Fν 在当前迭代 (vk,pk) 处的 Fréchet(Gâteaux)导数。按定义,它就是沿方向 (u,r) 的方向导数:把当前迭代沿 (u,r) 扰动一个小量 ε ,代入 Fν ,对 ε 求导,再在 ε=0 处取值。

因此三组变量的角色是:

  • (vk,pk) :当前的速度/压强迭代;
  • (u,r)V×Q :每步待求的 Newton 增量,即上文 (5.8) 中的 (δu,δp)
  • (w,q) :一如既往的检验函数。

Newton 步即求解线性问题 DFν((vk,pk);(u,r),(w,q))=Fν((vk,pk);(w,q)) (对所有 (w,q) ),再更新 (vk+1,pk+1)=(vk,pk)+(u,r) 。之所以说这是"线性化",正是因为该问题关于未知的 (u,r) 是线性的。

推导中出现的两个线性化对流项 ((u)vk,w)+((vk)u,w) ,恰是三线性形式 c 的线性化:由于 v=vk+εu 同时出现在 c 前两个变量位置上,对 ε 求导时每一处各贡献一项。这也解释了 Newton 与 Picard 的分野:Picard 只冻结一个位置上的 vk (给出单独一项 c(vk;u,w) ),Newton 则对两处出现同时求导并保留两项——多出来的那一项换来的是局部二次收敛,而非 Picard 的线性收敛。

在两种情形下,每步所解线性问题的代数形式都是

(5.9)(FBTB0)(UP)=(F0)F=A+N(w)

其中 A 是第 4 章那个对称的(矢量 Laplace)扩散矩阵, N(w) 是围绕当前速度 w c(w;,) 装配出的对流矩阵(对 Newton 而言, F 中还多一个由 c(;w,) 来的类反应项)。由于对流是一阶、非自伴算子,Oseen 块 F 不对称——与 (4.10) 中对称的 Stokes 块形成对照。于是 (5.9) 是一个非对称鞍点系统。第 6 章为对称 Stokes 系统发展的块预条件子可以推广到它,只是 Krylov 方法要由 MINRES 换成 GMRES。

5.5 对流主导流动的稳定化

标准 Galerkin 离散只在扩散控制对流时才准确。当网格 Péclet 数(单元 Reynolds 数) PeK=|w|hK/(2ν) 超过 1 时——也就是在可负担的网格上作对流主导计算时——Galerkin 速度会发展出非物理振荡,与标量对流–扩散方程的情形完全一致。稳定化格式通过添加依赖网格的加权残量项来治愈它:这些项相容(对精确解为零),却能恢复对对流导数的控制。

流线迎风 Petrov–Galerkin(SUPG) 方法在动量方程上增添

(5.10)KThτKK(ρ(w)udiv(2μD(u))+pf)(ρwv)dx

即用流线导数 wv 去检验强残量,单元参数 τKhK/|w| 。因为被加权的只是残量,精确解不受影响,最优精度得以保留,而添加项沿流线方向注入了恰好足够的数值扩散来压制振荡。相关的 Galerkin/最小二乘法与基于残量的变分多尺度法遵循同一原则。

另有两种稳定化常与 SUPG 联用:PSPG 用压强梯度去加权残量,从而彻底绕开 inf–sup 条件,容许方便的等阶插值——它正是第 6 章中代数稳定化 Q1 Q1 对的连续对应物;grad-div 稳定化添加 γΩ(divu)(divv)dx 以改善质量守恒与压强稳健性。对线性代数而言,稳定化把 (5.9) 中原本为零的压强–压强块填成一个对称半正定矩阵 C ,从而给出下一章处理的一般形式 (6.1),而并不改变所解系统的鞍点性质。

5.6 非定常流动的时间离散

对含时流动,动量方程保留局部加速度 ρtu 。先作空间离散——线方法——把弱问题化为关于系数矢量的微分代数方程组

(5.11)MU˙(t)+(A+N(uh))U(t)+BTP(t)=F(t)BU(t)=0

其中 M 是速度质量矩阵。不可压缩约束不带时间导数,故 (5.11) 是指标为 2 的微分代数系统,压强扮演把速度约束在无散度流形上的代数乘子。

隐式时间积分器—— θ 格式(后向 Euler、Crank–Nicolson)或后向差分公式——在新时间层上处理刚性的粘性项与约束项。于是一步需要求解

(5.12)(1ΔtM+θ(A+N)BTB0)(Un+1Pn+1)=(rn0)

其结构与 (5.9) 相同,只是速度块被 M/Δt 平移。这一平移使该块更接近对角占优、条件数更好,且 Δt 越小越好——正如第 6 章所示,这对迭代求解器及其预条件子是有利的。对流可以隐式处理(每步内作 Picard 或 Newton 求解),也可以在半隐式(IMEX)格式中显式处理,以对 Δt 的限制换取免去非线性求解。

求解完全耦合系统 (5.12) 之外的另一条路是投影(压强修正)方法:把每个时间步拆成速度更新,再跟一次恢复不可压缩性的压强 Poisson 求解。它以一列更简单的椭圆求解替换耦合的鞍点求解,在大规模非定常计算中被广泛使用。

5.7 小结

Navier–Stokes 方程的有限元处理建立在与 Stokes 问题相同的变分基础上,由三线性对流形式加以扩展,并受同一 inf–sup 条件约束。其特征性的困难是非线性,它在定常计算中由 Picard 或 Newton 迭代、在非定常计算中由隐式时间推进,消解为一列线性鞍点系统 (5.9)、(5.12)。这些系统一般非对称,且在细网格上规模极大;它们的高效迭代求解因此是任何实用 Navier–Stokes 求解器的关键所在。

6 鞍点系统的迭代解法

6.1 动机与问题设定

Stokes 方程——以及更一般地,任何以压强作为施行不可压缩约束的 Lagrange 乘子的流动模型——的有限元离散,导致具有特征性 2×2 块结构的大型稀疏线性系统。稀疏性是有限元基函数局部支集的直接后果,使每个未知量只与少数几个邻居耦合。记 uRn 为离散速度自由度矢量、 pRm 为离散压强自由度矢量,这类系统取如下形式:

(6.1)A(up)=(ABTBC)(up)=(fg)

其中 ARn×n BRm×n CRm×m ,且通常 mn

假设 6.1
  1. A 对称正定(SPD);
  2. B 具有满行秩,即 rank(B)=m
  3. C 对称半正定(SPSD);对未稳定化的 Galerkin 离散 C=0 ,稳定化离散则给出(小的) C0

在假设 6.1 之下,矩阵 A 对称但不定:它同时具有正、负特征值(见下面的定理 6.3)。这一不定性是大部分数值困难的根源,并且排除了共轭梯度法的直接应用——后者要求系统是定的。

"鞍点系统"之名反映了 (6.1) 的变分来源。当 C=0 时,解 (u,p) 是 Lagrange 泛函

(6.2)L(u,p)=12uTAufTu+pT(Bug)

的唯一驻点,它对应于等式约束二次极小化问题

(6.3)minuRn12uTAufTusubject toBu=g.

(6.3) 的一阶最优性(KKT)条件恰是 C=0 时的 (6.1)。 (u,p) 关于原变量 u 是极小点、关于乘子 p 是极大点,故 L 在此有一个鞍点,压强 p 即施行离散不可压缩约束 Bu=g 的 Lagrange 乘子。

6.2 代数结构与 Schur 补

由于 A 是 SPD,特别地它可逆,于是速度未知量可以从 (6.1) 中消去。由第一块行解出

(6.4)u=A1(fBTp)

代入第二块行 BuCp=g ,得到只关于压强的约化系统

(6.5)Sp=BA1fgS:=BA1BT+C.

矩阵 S 就是 A A 中的(负)Schur 补。它把速度与压强之间的全部耦合浓缩进一个 m×m 矩阵,在分析与预条件子构造中都居于核心地位。

引理 6.2(Schur 补的性质)

在假设 6.1 之下,Schur 补 S=BA1BT+C 对称正定。

证明。 对称性由 A1 C 的对称性立得。为证正定性,取 qRm q0 ,则

qTSq=(BTq)TA1(BTq)+qTCq0

因为 A1 是 SPD、 C 是 SPSD。取等号要求两项同时为零;特别地 (BTq)TA1(BTq)=0 迫使 BTq=0 (因 A1 为 SPD)。而 B 满行秩,故 BT 单射, BTq=0 蕴含 q=0 ,矛盾。

定理 6.3(块分解与惯性)

在假设 6.1 之下,系统矩阵允许块 LDLT 分解

(6.6)A=(I0BA1I)(A00S)(IA1BT0I).

因此 A 非奇异,系统 (6.1) 有唯一解;并且 A 恰有 n 个正特征值与 m 个负特征值。

我的疑问 2:Schur 补是"猜出" 再反解出来的吗?

我最初的理解是:先设 A=LDLT ,其中 D=diag(A,S) L=(I0XI) ,然后解出 X ,再据此得到 Schur 补 S ;最后用惯性定理判断 A 的谱性质。

大方向对,但推导的顺序恰好相反,而且有两处需要更正。

第一, S 并不是从假设的分解中"反解"出来的,而是直截了当消元的结果:由 (6.4) 解出 u 、代回第二块行,剩下的关于 p 的矩阵就是 S 。分解 (6.6) 是事后对这一消元过程的识别; L 的非对角块 BA1 是把块乘法展开、与 A 的各块相比对而读出的(验证式 BA1BTS=C ),而非独立待解的未知量。

第二,我漏掉了使惯性论证得以成立的关键一环:引理 6.2( S 为 SPD)。没有它, D 的惯性无从谈起。

第三,是 Sylvester 惯性律(Sylvester’s law of inertia),不是我写的"Silver"。它断言:两个实对称矩阵若合同 N=LMLT L 非奇异),则它们有相同的惯性 In(M)=(n+,n,n0) ——合同可以改变特征值本身,但不改变它们的符号。

于是完整链条是: D=diag(A,S) A 为 SPD(贡献 n 个正特征值)、 S 为负定(贡献 m 个负特征值),故 In(D)=(n,m,0) ;而 L 是单位下三角阵, detL=1 非奇异,故 A=LDLT D 合同,由 Sylvester 律 In(A)=(n,m,0) A 对称不定,无零特征值——这也再度确认了非奇异性,而且无需显式形成 S (形成 A1BT S 一般会摧毁稀疏性)。

6.3 可解性与离散 inf–sup 条件

定理 6.3 保证了固定离散问题的可解性。但在有限元语境下,人们求解的是由网格尺度 h 标记的一整族系统,真正的问题是解算子在 h0 时是否保持有界。这一稳健性由离散 inf–sup(LBB)条件支配。

定义 6.4(离散 inf–sup 条件)

一族速度/压强有限元对满足常数为 β>0 的离散 inf–sup 条件,若

(6.7)infqRm{0} supvRn{0} qTBvvAqMpβ.

这里的两个范数是相应有限元函数的自然能量范数: A Mp 分别是 a L2 内积在两组基下的 Gram 矩阵,故 vA H1 能量范数度量速度, qMp L2 范数度量压强。

我的疑问 3: 为什么叫"能量范数"?它是 Frobenius 范数的别名吗?

不是,两者毫无关系。

Frobenius 范数矩阵上的范数: MF=ijMij2=tr(MTM) ,即把矩阵元当作一个长矢量取 Euclid 范数,纯属记账,与任何物理能量无关。

能量范数则是**矢量(或函数)**上的范数,由一个 SPD 双线性形式 A (连续情形下为 a(,) )诱导:

vA:=vTAv=a(v,v).

它之所以是真正的范数,正是因为 A 是 SPD:正定性给出 v0vA>0 ,双线性与对称性经由 A -内积 u,vA:=uTAv 上的 Cauchy–Schwarz 给出三角不等式。

"能量"之名是字面意义上的物理陈述而非记号巧合:对本课程的 Stokes/弹性型问题, a(u,u)=Ω2μD(u):D(u)dx 恰是(两倍的)粘性耗散率;在结构力学的历史源头处,线弹性问题的 a(u,u)=σ:εdx 就是变形 u 中储存的应变能的两倍。离散地,由 Korn 不等式 a(vh,vh)=2μD(vh)L22μ|vh|H12 ,故 vA H1 半范数等价。

这也解释了它在第 6 章反复出现的原因:CG 所极小化的正是能量范数(见 6.5 节),这与 Céa 引理在上一层的最佳逼近性质是同一个变分原理。

6.3.1 三种代表性单元对

离散 inf–sup 常数 β 完全由速度与压强有限元空间的选取决定。在四边形网格上写 Qk 表示每个坐标方向上 k 次的连续分片(映射)多项式空间,三种定性不同的结局如下。

(i) 不稳定的等阶对 Q1 Q1 对速度各分量与压强使用同一连续双线性空间,是最自然、也最危险的选择。这一对直接违反 inf–sup 条件:存在非零压强矢量 q ——即虚假压强模态——它对每一个离散速度都是"不可见的",

(6.10)BTq=0q0.

在均匀网格上,典型的这类模态就是棋盘格模态:由于 Q1 压强是节点型(连续)的,它对网格顶点 (i,j) 赋以交替值 (1)i+j

我的疑问 4:怎样验证棋盘格模态确实满足

我的思路是:在参考单元 [0,1]2 上研究 Q1 的基,发现棋盘格模态可由基的线性组合表示;再回忆 BTq=0vBTq=0 (对所有 v ),以及 vBTq 作为散度积分的定义,通过算积分即可验证 vBTq0

网格/基的策略是对的,但记号 vBTq 不成立——那不是一个合法的对象( vRn 是列矢量, BTqRn 也是,两者不能相乘)。正确的写法是转置:

vTBTq=(Bv)Tq=Ωqhdiv(vh)dx

最后一步用的是 (4.9) 中 B 的定义 Bki=b(φi,ψk) 。于是

BTq=0Ωqhdivvhdx=0对所有 vhVh

这才是要逐单元验证的对象。把 qh 展开为棋盘格模态、 vh 展开为 Q1 速度基,在每个单元上算 Kqhdivvhdx qh ±1 节点值贡献在相邻单元之间成对相消——分片双线性的散度分辨不出波长为 2h 的振荡,这就是"棋盘格模态与任何离散速度都不产生散度配对"的具体含义。

结论必须显式写出(这是我原先漏掉的):既然对非零的 q BTq=0 ,则 B 不满行秩,假设 6.1(2) 被违反; S=BA1BT 奇异(因 Sq=BA1(BTq)=0 ,即 q 落在 S 的核里),等价地离散 inf–sup 常数 β=0 。这与引理 6.2 的证明严丝合缝:那里正是 BTq=0 q0 )破坏了 S 的正定性。

顺带: 基与 的展开

参考单元 [0,1]2 上的 Q1 节点基(双线性,每顶点一个,满足 Lagrange 性质 Ni(nodej)=δij )为

N1=(1x)(1y)N2=x(1y)N3=(1x)yN4=xy

分别对应节点 (0,0),(1,0),(0,1),(1,1) ,张成 Q1=span{1,x,y,xy} 。由于节点基对本就属于该空间的函数插值即精确复现,而 f=α+βx+γy 落在子空间 {1,x,y}Q1 中,故其系数就是各节点值:

f=αN1+(α+β)N2+(α+γ)N3+(α+β+γ)N4.

直接展开可验证:常数项靠单位分解 iNi1 复原, β 项靠 x(1y)+xy=x γ 项靠 (1x)y+xy=y 。单位分解也正是"无害的常压强模态"总能被表示的原因——它由 Q 上的零均值约束固定,与棋盘格模态那种病态虚假模态性质不同。

(ii) 稳定的 Taylor–Hood 对 Q2 Q1 把速度次数提高一阶即可治愈不稳定性;在形状正则的网格族上,它满足 (6.7) 且常数 β>0 h 无关( d=2,3 皆然)。标准途径是 Fortin 判据,它把离散 inf–sup 条件的验证归结为构造单一的插值型算子。

引理 6.6(Fortin 判据)

设连续速度空间为 V ,且散度的连续 inf–sup 条件以常数 β0>0 成立。若存在与 h 无关的线性 Fortin 算子 Πh:VVh 与常数 c>0 ,使得对所有 vV

(6.11)Ωqhdiv(Πhvv)dx=0对所有 qhQh (6.12)ΠhvH1(Ω)cvH1(Ω)

则离散 inf–sup 条件 (6.7) 以 ββ0/c 成立。

(iii) 稳定化的 Q1 Q1 方便的等阶对可以由稳定化拯救:添加一个控制虚假模态、而对光滑解保持相容的压强相关项。经典例子是 Brezzi–Pitkäranta 稳定化,它在第二块行上增添双线性形式

(6.13)c(ph,qh)=αKhK2Kphqhdxα>0

在矩阵形式下,(6.13) 恰好贡献 (6.1) 中那个对称半正定块 C ,使 A (2,2) 元变为 C0

从" S=S+C 正定故非奇异"这一层说,事情就完结了;但值得再补两句,说明为什么恰好治得住棋盘格。虚假模态满足 BTq=0 ,故 Sq=0 —— q 正落在 S 的核里,这才是 S 单独奇异的方向;而稳定化项 qTCq=αKhK2qhL2(K)2 对逐节点振荡的棋盘格模态取严格正值。也就是说, C 恰在 S 消失的那个方向上为正,这才把 S+C 从奇异推成 SPD,而不是笼统地"加了个正则项"。

注 6.7(稳定化的优化解释)

稳定化系统是修正鞍点泛函

(6.14)LC(u,p)=12uTAufTu+pT(Bug)12pTCp

的驻点条件。消去 u=A1(fBTp) 后,对 p 的极大化变成

maxp[12pT(S+C)p+(BA1fg)Tp]

故稳定化不过是把 Schur 补 S 换成 S+C :这是对偶(压强)问题的 Tikhonov 正则化。虚假模态处 Sq=0 使对偶目标沿 q 方向"平坦",压强因而只被确定到相差虚假振荡;加上 C 后目标严格凹,压强唯一确定。

6.4 谱性质

迭代方法的收敛速率通常由所作用矩阵的谱——或预条件后算子的谱——支配。对未预条件的鞍点矩阵( C=0 ),命题 6.8 给出:设 0<λmin(A)λmax(A) A 的极端特征值、 σminσmax B 的极端奇异值( σmin>0 B 满行秩),则 A 的每个正特征值 λ+ 与负特征值 λ 满足

(6.15)λ+[λmin(A), 12(λmax(A)+λmax(A)2+4σmax2)] (6.16)λ[12(λmin(A)λmin(A)2+4σmax2), 12(λmax(A)λmax(A)2+4σmin2)].

两个区间由原点分开:正特征值以 λmin(A)>0 为下界,负特征值以一个严格负的数为上界——之所以严格负,正是因为 σmin>0 ,即 B 满行秩(离散 inf–sup 性质)。对未预条件的 Stokes 矩阵,这两个区间在网格加密时会展开( cond(A)=O(h2) ),谱分布愈发恶劣,迭代步数随网格加密而增长——这使 6.6 节的有效预条件不可或缺。

注 6.9(inf–sup 条件与 Schur 补的条件数)

命题 6.8 中一切都在 Euclid 内积下度量,其中的量都依赖于网格,没有一个关于 h 一致。稳健的陈述要在自然范数下度量:速度用能量范数 A 、压强用 L2 范数 Mp 。此时支配可解性的对象是质量矩阵预条件的 Schur 补 Mp1S ,而定义 6.4 的离散 inf–sup 常数恰是它的最小特征值:

(6.22)β2=minq0qTSqqTMpq=λmin(Mp1S)λmax(Mp1S)d

从而 cond(Mp1S)d/β2 h 无关。换言之: S 自身的特征值随网格漂移(其标度如同质量矩阵 Mp ),但 Mp1S 的特征值不漂移;inf–sup 条件恰恰断言下端 β2 h0 时不趋于 0。

6.5 Krylov 子空间方法

在三维中,对 A 作稀疏 LDLT 直接分解会因填充而在内存与运算量上都变得不可行。大规模问题因此转向 Krylov 子空间方法,它们只通过矩阵–矢量乘积访问 A ,从而保持稀疏性(稀疏存储格式与该乘积内核见附录 A)。

6.5.1 投影方法与 Krylov 子空间

本节所有方法共享一个原则。求解 Ax=b 投影方法 m 维仿射搜索空间 x0+Km 中抽取近似 xm ,要求残量正交于 m 维检验空间 Lm

(6.23) xmx0+Km使得bAxmLm.

Lm=Km 时投影正交(Galerkin 条件),否则斜交(Petrov–Galerkin 条件)。

定义 6.10(Krylov 子空间)

由矩阵 A 与矢量 r0 生成的第 m 个 Krylov 子空间为

(6.24)Km(A,r0)=span{r0,Ar0,A2r0,,Am1r0}.

这些空间是嵌套的,并带有解释方法及其收敛性的多项式结构:每个 xmx0+Km 形如 xm=x0+q(A)r0 degqm1 ),故残量为

(6.25)rm=bAxm=(IAq(A))r0=pm(A)r0pm(0)=1degpmm.

于是 Krylov 方法隐式地构造了一个以 pm(0)=1 归一化的残量多项式,其收敛性取决于这样的多项式在 A 的谱上能被压到多小。

注 6.11(一串变分表述的级联)

投影条件 (6.23) 正是支撑整个离散的那条原则,只是又下沉了一层。连续问题以弱形式提出, a(u,v)=(v) (对所有 vV );有限元法把它限制到子空间, a(uh,vh)=(vh) (对所有 vhVhV ),即 Galerkin 正交性 a(uuh,vh)=0 ,对对称的 a 而言这刻画了 uh u 能量范数下的最佳逼近(Céa 引理)。Krylov 方法在代数系统 Ax=b 上重复了完全相同的构造。整条数值管线因此是同一个变分原理在依次更小的空间 VVhx0+Km 上的级联。

6.5.2 三种方法

  • 共轭梯度(CG,用于 SPD 块)。 Lm=Km 。Galerkin 条件说残量正交于 Km ,等价地误差** A -正交**于搜索空间;对 SPD 的 A ,这就是能量范数下的最佳逼近 xxmA=minzx0+KmxzA ,与极小化二次能量 ϕ(z)=12zTAzbTz 等价。优点:能量范数下最优、存储恒定、收敛只由 cond(A) 支配。缺点:只适用于 SPD 系统,在不定的 A 上失效。因此 CG 在本章只用于 SPD 子问题:速度块 A 、Schur 补 S ,以及 Uzawa 与块预条件迭代的内层求解。
  • 极小残量(MINRES,用于对称不定系统)。 A 对称但不定,能量范数(以及 CG)不可用。改取 Lm=AKm ,即极小化 bAz2 。对称性使 H¯m 三对角,其 QR 因子经短递推更新,故每步代价恒定。预条件子 P 必须 SPD 才能保持对称性,此时 MINRES 在 P1 范数下极小化残量,收敛由 P1A 的特征值支配:若它们落在 [a,b][c,d] 中( a,b,c,d>0 ),则 2k 步后残量降低约
(6.30)2(adbcad+bc)k.
  • 广义极小残量(GMRES,用于非对称预条件)。 非对称预条件子使 P1A 非对称, H¯m 退化为满上 Hessenberg 阵,Lanczos 缩短失效。同样的残量极小化定义了 GMRES。缺点是完整 Arnoldi 递推使工作量与存储随迭代指标线性增长,实践中须重启(GMRES( k ))。

6.5.3 CG 的具体形式

我的疑问 5:CG 中 的更新规则是怎么导出的?什么叫 -共轭?

定义。 对 SPD 矩阵 A ,两个非零矢量 u,v 称为 A -共轭(或 A -正交),若 uTAv=0 ,即它们在 A -内积 u,vA:=uTAv 下正交——正是上文诱导能量范数的那个内积。一组方向 {p0,p1,} 互相 A -共轭,若 piTApj=0 ij )。

为什么要这个性质。 CG 在 x0+Kk 上极小化能量范数误差。若搜索方向 p0,,pk1 张成 Kk 且互相 A -共轭,则在 Kk 上的极小化解耦为沿各个 pi k 个独立一维极小化——一旦沿某个方向走过,就再也不必回头重新优化。这一解耦正是 CG 能塌缩成短而廉价的递推、而不必像完整 GMRES/Arnoldi 那样作不断增长的正交化的全部原因。

导出 βk 把新方向取为残量被前一方向修正的形式 pk+1=rk+1+βkpk ,并要求 pk+1 pk 共轭,即 pk+1TApk=0

rk+1TApk+βkpkTApk=0βk=rk+1TApkpkTApk.

再用递推中已有的两条事实化简。由 rk+1=rkαkApk Apk=(rkrk+1)/αk ,故

rk+1TApk=rk+1Trkrk+1Trk+1αk=rk+1Trk+1αk

最后一步用了残量互相正交(这是 Galerkin 条件的推论,与共轭性一同归纳地证明)。又由步长公式 αk=(rkTrk)/(pkTApk) pkTApk=(rkTrk)/αk ,代入即得

βk=rk+1Trk+1rkTrk

αk 恰好抵消,且不需要任何额外的矩阵–矢量乘积。

一个值得能答上来的细节: 为什么只让 pk+1 pk 共轭,就能保证整族方向互相共轭?这正是 Krylov 子空间结构发挥作用之处:归纳地 piKi+1 ,故 ApiKi+2 ;而 rk+1Kk (残量对迄今整个搜索空间的 Galerkin 正交性),于是自动有 rk+1TApi=0 对所有 i<k 成立。也就是说,递推中只对 pk 施加共轭性,就白得了对所有先前方向的共轭性——这正是把一般的(稠密、 O(m2) 存储的)Lanczos 型 Galerkin 投影,变成 CG 的两项、 O(1) 存储短递推的机制。

6.6 块预条件子

块分解 (6.6) 提示了由对角块 A S 的(近似)构造预条件子。先分析理想版本,其中 A S 被精确使用;它们给出可观的特征值聚集,是实用变体的理论蓝本。

定理 6.12(Murphy–Golub–Wathen,块对角情形)

C=0 且假设 6.1 成立。对块对角预条件子 PD=diag(A,S) ,预条件矩阵 PD1A 可对角化,且恰有三个相异特征值

(6.32)11+52152

其中 1 的重数为 nm ,两个黄金分割值的重数各为 m 。因此极小残量型 Krylov 方法在精确算术下至多 3 步终止。

证明的要点是: q=0 的情形给出 λ=1 (对应 kerB 中的 (nm) 维解空间); q0 时消去 v=(λ1)1A1BTq 并利用 S=BA1BT ,化为标量关系 λ(λ1)=1 ,即 λ2λ1=0 ,其根正是黄金分割值。极小多项式次数为 3,故 3 步终止。

保留非对角耦合则给出块上三角预条件子 PT=(ABT0S) 。它非对称,须与 GMRES 联用。此时 APT1=(I0BA1I) ,只有单一特征值 1 且 (APT1I)2=0 ,故 GMRES 至多 2 步终止(定理 6.13)。

实用版本。 理想预条件子不能直接使用:每次作用都要精确求解带 A 与带稠密 S 的系统,代价与解原问题相当。实用配方是把 A1 S1 换成谱等价且易于作用的近似 A^1 S^1

  • 近似速度求解 A^1 :由于 A 是离散(矢量)Laplace 算子,单个多重网格 V-循环或代数多重网格(AMG)循环即可给出与 A 谱等价、常数与网格无关的 A^ ,代价线性。
  • 近似 Schur 补 S^1 :由谱等价性,对 Stokes 问题,压强质量矩阵 Mp (按粘度倒数缩放)是 S 的网格无关近似; Mp 良态,故几步 Chebyshev 或 Jacobi 扫描——甚至只取其对角——就足以廉价地作用 S^1

A^,S^ A,S 以网格无关的常数谱等价时, P^D1A 的特征值仍聚集在远离零的固定区间内,MINRES 界 (6.30) 便预言与 h 无关的迭代步数。

6.7 Uzawa 方法及其变体

我的疑问 6:Uzawa 迭代是怎么导出的?

核心思想一句话:Uzawa 就是对 6.2 节的 Schur 补系统作 Richardson 迭代,只是包装得让你从不必显式形成 S

第一步:回忆约化系统。 由 (6.5),消去 u 后得关于 p m×m SPD 系统 Sp=c ,其中 c:=BA1fg S 的 SPD 性由引理 6.2 保证)。

第二步:对该系统作 Richardson 迭代。 求解 Sp=c 的一般定常(Richardson)迭代为

pk+1=pk+ω(cSpk)=pk+ω((BA1fg)BA1BTpk)

其中 ω>0 为松弛参数。由标准 Richardson 理论,迭代矩阵为 IωS ,谱半径小于 1 当且仅当 0<ω<2/smax smax S 的最大特征值)。

第三步:不形成 S ,改用一次速度求解替代。 关键的观察是

BA1fgBA1BTpk=B(A1(fBTpk))g

因此只要定义 uk+1:=A1(fBTpk) ——字面意思就是:把当前压强迭代冻结为已知载荷,解一个 Stokes 型的速度问题——所需残量就只是 Buk+1g ,全程不出现 S 。这就给出

(6.35)uk+1=A1(fBTpk) (6.36)pk+1=pk+ω(Buk+1g).

结构上,每个 Uzawa 步就是"给定当前压强猜测精确求解速度块,再沿减小散度约束违反量 Buk+1g 的方向轻推压强";但把 uk+1 重新消去后,它与 S 上的纯 Richardson 在代数上完全等同。最优参数与收敛率随之由同一套 SPD 理论给出: ω=2/(smin+smax) 使谱半径最小,此时渐近收敛因子为 (cond(S)1)/(cond(S)+1)

实用版本为何不同。 精确版本有两处不足:(i) 每个外迭代都要作一次完整的速度求解 A1() ,昂贵;(ii) 收敛随 cond(S) 增大而恶化(网格加密时它通常确实增大)。补救办法与前面"谱等价替身"的思路一致:把精确的 A1 换成廉价近似求解 A^1 (例如一个 AMG V-循环),把压强更新用 S^1 (例如 Mp 上的几步 Chebyshev 扫描)预条件。

算法 5:非精确、预条件的 Uzawa 迭代

输入:初始猜测 (u0,p0) ,松弛参数 ω>0 ,容差 ε

k=0,1,2,

  1. uk+1uk+A^1(fAukBTpk)   (近似速度求解)
  2. rpBuk+1Cpkg   (约束残量)
  3. pk+1pk+ωS^1rp   (预条件压强更新)
  4. rpε 则终止

采用与 6.6.3 节相同的谱等价构件 A^,S^ ,非精确 Uzawa 以与网格无关的速率收敛。密切相关的 Arrow–Hurwicz 方法把内层速度求解换成单步梯度步,以更慢的收敛率换取更快的单步迭代。另一个稳健变体是增广 Lagrange 预条件:把 (1,1) 块换成 Aγ=A+γBTW1B ,其 grad-div 型项不改变 (6.1) 的解(因解处 Bu=g ),却改善了 Schur 补的近似质量;代价是 Aγ 更病态、更各向异性,需要专门设计的多重网格。

6.8 应用于 Stokes 系统

对 Stokes 问题, C=0 ,块 A 是按粘度 ν 缩放的离散矢量 Laplace 算子, B 是离散散度。决定性的性质是 Schur 补与压强质量矩阵之间的谱等价,对 Stokes 算子它取如下尖锐形式:

(6.37)β2qTMpqνqTSqqTMpqq

其中 β 是定义 6.4 的离散 inf–sup 常数。上界常数为 1,下界为 β ,对 inf–sup 稳定的单元对(如 Taylor–Hood P2 P1 族)两者都与 h 无关。这就为选取

(6.38)S^=1νMp

作为 Schur 补近似提供了依据。配合矢量 Laplace 算子的多重网格近似 A^1 ,块对角预条件子 P^D 使 P^D1A 的特征值落在端点只依赖于 β 与多重网格循环质量、而不依赖于 h 的固定区间内。于是预条件 MINRES 迭代以与网格无关的步数收敛——这正是最优求解器的标志。同样的构件装配成块三角预条件子 P^T 并配以 GMRES,常被观察到只需大约一半的迭代步数,与定理 6.12、6.13 的比较相符。

对定常与非定常 Navier–Stokes 方程,同样的结构依然成立,但 (1,1) 块额外含有非对称的对流项。此时 A 非对称,MINRES 不再适用,Schur 补也不再允许简单的质量矩阵近似 (6.38);专门的近似(如压强对流–扩散 PCD 与最小二乘交换子 LSC 预条件子)才能在该情形下恢复网格稳健的收敛。

6.9 小结

离散 Stokes 方程给出对称不定的鞍点系统 (6.1),其结构由 Schur 补 S 与块分解 (6.6) 刻画。可解性由假设 6.1 保证,而网格稳健的可解性要求离散 inf–sup 条件,等价地要求 S 与压强质量矩阵谱等价。高效求解经由 Krylov 方法进行——对称系统用 MINRES,非对称预条件下用 GMRES——并由块预条件子加速,后者由速度块的多重网格近似与 Schur 补的压强质量矩阵近似装配而成。理想版本把谱聚集到几个点上(定理 6.12、6.13),其谱等价的实用对应物继承了与网格无关的收敛性。6.7 节的 Uzawa 家族则基于同样的构件,提供了一个轻量的定常迭代替代方案。

附录 A 稀疏矩阵

A.1 有限元矩阵的稀疏性

每个有限元基函数 φi 的支集都很小,只覆盖与其节点相邻的那些网格单元。因此刚度矩阵元 a(φj,φi) 除非 φi φj 共享某个单元否则为零,装配后矩阵的第 i 行只有有界个非零元——这个数由局部网格连通性决定,与网格尺度 h 无关。于是非零元总数线性增长, nnz=O(n) ,而非关于未知数 n 二次增长。

后果是决定性的:稠密数组需要 n2 个数—— n=106 时在双精度下已是 8 TB——且每次矩阵–矢量乘需 n2 次运算,两者都远不可及。稀疏数据结构只存储、只对非零元运算,把存储与矩阵–矢量乘的代价降到 O(nnz)=O(n) 。这一线性标度正是大规模模拟得以可行的原因,也正是第 6 章那些只通过矩阵–矢量乘接触矩阵的迭代求解器所要利用的。

A.2 存储格式

以小例子说明:

(A.1)A=(10002390007800005)n=4nnz=7.

坐标表(COO)。 最简单的格式存三个长度为 nnz 的数组——行指标、列指标与数值——使第 k 个非零元为 Arow[k],col[k]=val[k] 。对 (A.1) 逐行列出:

row=[0,0,1,1,2,2,3]col=[0,3,0,1,1,2,3]val=[10,2,3,9,7,8,5].

COO 在装配时很方便——单元贡献直接追加、事后求和——但不支持对给定行的快速访问,很少用于算术。

压缩稀疏行(CSR)。 主力格式压缩了行数组:数值与列指标逐行有序存放,另有长度 n+1 的行指针数组 ptr ,使第 i 行的元素占据区间 ptr[i],,ptr[i+1]1 ,且 ptr[n]=nnz 。对 (A.1):

(A.2)val=[10,2,3,9,7,8,5]col=[0,3,0,1,1,2,3]ptr=[0,2,4,6,7].

CSR 给出对整行的即时访问,这恰是矩阵–矢量乘所需,因而是迭代求解器事实上的标准。其按列存放的对应物 CSC 则更适合列抽取、转置乘积以及许多稀疏直接分解。

结构化变体。 块 CSR 用小的稠密 b×b 块代替标量;取 b=d 时它正好匹配第 5 章矢量值离散的节点 d×d 速度块,可削减指标开销并改善缓存利用。对称矩阵(如 Stokes 速度块)只需存上(或下)三角,内存减半。ELLPACK 与对角存储则针对结构网格与图形处理器上的规则稀疏模式。

A.3 稀疏矩阵–矢量乘积

CSR 下的乘积 y=Ax 逐行计算:每个 yi 是第 i 行所存元素与 x 中相应指标元素的内积。

1
2
3
4
5
6
7
输入:A 的 val, col, ptr;矢量 x
for i = 0, 1, ..., n-1:
s = 0
for k = ptr[i], ..., ptr[i+1]-1:
s = s + val[k] * x[col[k]]
y[i] = s
return y

该算法执行 2nnz 次浮点运算——每个非零元一次乘、一次加——故代价 O(nnz) ,关于问题规模线性。然而其性能几乎从不受算术限制:每个矩阵元只被读一次却只参与两次运算,算术强度很低,该内核是访存受限的,速度由内存带宽而非处理器峰值浮点率决定。此外访问 x[col[k]] 是间接且不规则的,矩阵的模式与未知量的排序会强烈影响缓存行为,因而降带宽重排序与块格式是值得的。

两点与全书其余部分的联系:其一,转置乘积 ATx ——鞍点系统 (6.1) 的非对角块 BT 需要它——在 CSR 下没有干净的按行形式(它会向 y 散射贡献),最好把 AT 存成 CSR,也即把 A 存成 CSC。其二,由于各行相互独立,该乘积可立即并行化:在共享内存上跨线程或图形处理器通道,以及——配以行(或区域)划分与所需 x 元素的 halo 交换——跨超级计算机的分布式节点。正是这种按行并行性,使第 6 章的 Krylov 方法能扩展到极大规模问题。

A.4 重排序

未知量的排序不改变数学问题,却对计算有显著影响。对第 6 章提到的直接 LDLT 分解,糟糕的排序会造成灾难性的填充——消元过程中由零变为非零的元素——而降填充置换(最小度,或三维中的嵌套剖分)能保持因子稀疏,对可行性起决定作用。对迭代求解器虽不形成分解,但降带宽排序(如逆 Cuthill–McKee)能改善矩阵–矢量乘的缓存行为以及不完全分解预条件子的质量。

A.5 软件库

稀疏存储、矩阵–矢量乘、重排序、Krylov 求解器与预条件子,都由若干成熟的库以经过测试且高度优化的形式提供,其中与本书框架最贴合的是 PETSc(Argonne 国家实验室):它提供分布式稀疏矩阵类型(AIJ,即并行 CSR;BAIJ,其面向矢量值问题的块变体)、分布式矢量、Krylov 求解层(KSP,含 CG、MINRES、GMRES 等)与预条件层(PC,从 Jacobi、不完全分解到加性 Schwarz、专为块与鞍点系统构建的 FieldSplit 预条件子,以及到多重网格的接口)。由于 Krylov 方法与预条件子在运行时选取,本书的各种求解器可以无需重新编译地装配、组合与比较。

其他覆盖相近领域的包包括:Trilinos(Sandia,含 Tpetra 稀疏线性代数、Belos Krylov 求解器、MueLu 代数多重网格)、hypre(LLNL,尤以 BoomerAMG 著称)、SuiteSparse(UMFPACK、CHOLMOD、KLU 等稀疏直接求解器)、Eigen(仅头文件的 C++ 模板库,适合串行与中等规模问题),以及厂商稀疏 BLAS 库如 Intel MKL 与 NVIDIA cuSPARSE。更高层的有限元框架——deal.IIFEniCSFiredrake——从变分描述装配稀疏矩阵,并把线性求解委托给 PETSc 或 Trilinos,使得从第 4 章的弱形式到第 6 章的预条件 Krylov 求解这一整条链路都能在同一环境中完成。