DG / FR Jacobian 为什么会变大?

为什么 DG / FR 的 Jacobian 会迅速变大?

这个页面用一个简化的非结构高阶 CFD 模型演示:当每个单元从 FVM 的“1 个空间自由度” 变成 DG / FR 的“多个高阶求解点”后,未知量维数、单元块大小以及隐式 Jacobian 的存储量如何增长。 数值是教学估算,用于观察数量级和趋势。

1. 调参数:看看自由度怎样增长

每单元空间自由度
Np
全局未知量
cells × Np × equations
单元 Jacobian block
(Np × equations)²
估算稀疏 Jacobian 存储
仅数值项,double

2. Jacobian 稀疏块结构

本单元 block 邻居耦合 block 零区域

FVM 中一个单元的 block 通常接近 “方程数 × 方程数”;DG/FR 中 block 变成 “(求解点数 × 方程数) × (求解点数 × 方程数)”。高阶最先把 block 本身放大。

3. 同一网格:FVM vs DG/FR

FVM 未知量
DG/FR 未知量
FVM Jacobian
DG/FR Jacobian

4. 为什么 Matrix-Free 有吸引力?

构造残差
R(U)
传统隐式法
显式形成 J
GMRES / ILU
需要存大量块
构造残差
R(U)
Matrix-Free
只实现 J·v
Krylov 迭代
避免完整存 J

5. 阶次 p 对每单元自由度的影响

三角形:Np=(p+1)(p+2)/2;四面体:Np=(p+1)(p+2)(p+3)/6。 Jacobian block 的元素数近似与 Np² 成正比,所以增长比自由度本身更快。

6. 你可以怎样理解论文里的“Jacobian 太大”

不是简单指矩阵行数多,而是三件事叠加:第一,高阶单元内部有很多解自由度;第二, Navier–Stokes 每个求解点还有多个守恒变量;第三,隐式线性化后,一个单元与自己及邻居形成大块耦合。

FVM: cell -> [rho, rho*u, rho*v, rho*w, rho*E] DG/FR: cell -> solutionPoint[0..Np-1] -> each point has 5 conservative variables implicit: J = dR/dU blockSize = Np * N_equations blockEntries ≈ blockSize²

所以高阶方法很自然地把研究推向 Block LU-SGS、GMRES、预处理、Matrix-Free 和 p-Multigrid。 这正是卢义博士论文后半部分数值求解器研究的逻辑。