为什么 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
4. 为什么 Matrix-Free 有吸引力?
构造残差
R(U)
R(U)
→
传统隐式法
显式形成 J
显式形成 J
→
GMRES / ILU
需要存大量块
需要存大量块
构造残差
R(U)
R(U)
→
Matrix-Free
只实现 J·v
只实现 J·v
→
Krylov 迭代
避免完整存 J
避免完整存 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。 这正是卢义博士论文后半部分数值求解器研究的逻辑。
