数值分析的基础 — FEMFVMFDM的理論精度
PDE与数值解法的全景
CAE的所有分析工作,归根结底是用数值方法求解偏微分方程(PDE)。为了在计算机上处理PDE,需要将连续体离散化为有限个点、单元或网格。其中FDM、FEM、FVM三种方法是主要的求解方式。
老师,我经常听到FEM,OpenFOAM是FVM。这两个从根本上有什么不同吗?有一个比另一个更好吗?
从哲学上讲,FEM是"在整体上张开试验函数",FVM是"直接守护各单元的守恒律"的方法论差异。FEM擅长复杂边界形状和各向异性材料,是结构分析的主流。FVM保证质量、动量、能量守恒,成为流体分析(CFD)的主流。不是"哪一个更好",而是"根据问题对象进行分工",这样想才是准确的。
1.1 PDE的分类
二阶线性PDE根据系数的性质可分为3种:
| 分类 | 典型PDE | 数学特征 | 代表物理现象 |
|---|---|---|---|
| 椭圆型 | $\nabla^2 u = f$(拉普拉斯/泊松方程) | 稳态状态。所有边界条件都有影响 | 稳态热传导、静电场、线性弹性(稳态) |
| 抛物型 | $\partial u/\partial t = \alpha \nabla^2 u$(扩散方程) | 时间演化。初值+边界值问题 | 非稳态热传导、扩散、粘性流动 |
| 双曲型 | $\partial^2 u/\partial t^2 = c^2 \nabla^2 u$(波动方程) | 有限传播速度。具有特征线 | 弹性波、音波、冲击波 |
1.2 各方法的哲学差异
| 方法 | 离散化思想 | 守恒性 | 主要应用领域 |
|---|---|---|---|
| FDM | 用泰勒展开近似微分为差分 | 一般不保证(通常) | 简单域、学术研究、DNS |
| FEM | 用基函数近似解并最小化残差 | 在弱形式中自然满足 | 结构、热、电磁、多物理耦合 |
| FVM | 直接离散化各单元的积分形守恒律 | 局部严格满足 | 流体(CFD)、热流耦合 |
有限差分法(FDM)
2.1 泰勒展开与差分近似
泰勒展开式:
由此推导一阶导数的近似:
二阶导数的二阶中心差分:
「二阶精度」是什么意思?当差分的网格变细时,误差会减少多少?
$p$ 阶精度的意思是"当格子宽度 $h$ 减半时,误差会变为 $1/2^p$"。一阶精度的话,把网格减半误差也减半;二阶精度的话,把网格减半误差会变成1/4。中心差分是二阶精度,用一阶精度要达到相同精度的话需要4倍的网格点。在三维问题中,那就是 4³ = 64倍的计算量差异!所以高阶精度方案从计算效率的角度来说是非常重要的。
2.2 显式法的稳定性条件 — CFL条件与冯·诺依曼稳定性分析
一维扩散方程 $\partial u/\partial t = \alpha \partial^2 u/\partial x^2$ 用FTCS(前向时间·中心空间)格式离散化:
冯·诺依曼稳定性分析:将 $u_i^n = G^n e^{ikx_i}$ 代入得放大因子 $G$:
稳定性条件 $|G| \leq 1$ 给出:
平流方程 $\partial u/\partial t + c\partial u/\partial x = 0$ 的CFL(Courant-Friedrichs-Lewy)条件:
物理含义:一个时间步内平流距离不能超过网格宽度。
2.3 高阶差分方案对比
| 方案 | 精度 | 模板(所需网格点) | 特点 |
|---|---|---|---|
| 前向差分(一阶) | O(h) | i, i+1 | 简单·数值扩散大 |
| 中心差分(二阶) | O(h²) | i-1, i, i+1 | 标准·注意无界条件 |
| 四阶中心差分 | O(h⁴) | i-2, i-1, i, i+1, i+2 | 高精度·DNS/LES中使用 |
| 一阶迎风差分 | O(h) | i-1, i(上游侧) | 无条件稳定·有数值扩散 |
| 三阶迎风差分(QUICK) | O(h³) | i-2, i-1, i, i+1 | CFD广泛使用 |
| WENO(五阶) | O(h⁵) | 各方向5点 | 冲击波周围非振荡·高精度 |
有限元法(FEM)的数学基础
3.1 加权残差法与伽辽金法
椭圆型PDE的例子:$-\nabla \cdot (k\nabla u) = f$ in $\Omega$,边界条件: $u = g$ on $\Gamma_D$。
强形式: $r(u) = -\nabla \cdot (k\nabla u) - f = 0$ 在所有点都成立。
加权残差法: 对于权函数 $v$:
弱形式(用格林定理分部积分):
伽辽金法: 从同一空间选择近似解和权函数 — $u \approx \sum_j u_j N_j(\mathbf{x})$, $v = N_i(\mathbf{x})$:
这以矩阵形式表示为 $\mathbf{K}\mathbf{u} = \mathbf{f}$。
3.2 形状函数的种类
代表性的形状函数:
- 拉格朗日插值基函数: $N_i$ 在节点 $j \neq i$ 处为零,在节点 $i$ 处为1。$C^0$ 连续性。结构·热分析的标准选择。
- 埃尔米特(Hermite)基函数: 节点值包含变位和梯度。$C^1$ 连续性。梁·板分析中使用。
- 塞伦迪皮蒂单元: 具有边中点节点的高阶拉格朗日单元(8节点四边形等)。
一维拉格朗日形状函数(2节点线性单元,$\xi \in [-1,1]$):
3节点二阶单元($\xi \in [-1,1]$):
二阶单元(Quadratic element)比一阶单元精度好我理解,但为什么有些问题就是用不了二阶单元呢?
二阶单元在单元大变形并被压扁的问题上很困难。在显式法碰撞分析中,当网格发生剧烈变形时,中间节点会飞到单元外面,雅可比矩阵会变得奇异(行列式≒0),计算就停止了。还有体积锁定现象 — 在不可压缩性很强的材料(橡胶)或塑性上,二阶单元的完全积分会"过度约束体积不变"。对此需要低减积分或非协调模式的处理。
3.3 等参数单元与数值积分
物理坐标 $\mathbf{x}$ 与参考坐标 $\boldsymbol{\xi}$ 的变换(等参数变换):
积分的变换:
高斯-勒让德求积($n_g$ 点):
可精确积分至 $2n_g - 1$ 次多项式($n_g$ 点高斯积分的精度)。
| 积分点数 $n_g$ | 高斯点 $\xi_i$ | 权重 $w_i$ | 多项式精度 |
|---|---|---|---|
| 1 | 0 | 2 | 1阶 |
| 2 | ±1/√3 ≈ ±0.5774 | 1, 1 | 3阶 |
| 3 | 0, ±√(3/5) ≈ ±0.7746 | 8/9, 5/9 | 5阶 |
| 4 | ±0.3399, ±0.8611 | 0.6521, 0.3479 | 7阶 |
有限体积法(FVM)
4.1 守恒律的积分形式
一般性保存方程(平流-扩散)的积分形式(应用于每个控制体积CV):
$\phi$:通用变量(密度·动量·能量等),$\Gamma$:扩散系数,$S_\phi$:源项。
物理意义:「CV中积累的量 = 流入平流通量 - 流出平流通量 + 扩散通量 + 体积源」。
4.2 单元中心 vs 单元顶点
| 配置 | 特点 | 使用求解器 |
|---|---|---|
| 单元中心(Cell-centred) | 变量定义在单元中心。边界通量用插值计算 | OpenFOAM, Ansys Fluent |
| 单元顶点(Cell-vertex) | 变量定义在节点。CV构造在节点周围 | 某些CFD求解器、结构流体混合 |
4.3 界面通量的插值方案
界面 $f$ 处标量值 $\phi_f$ 的计算方案比较:
$F_f = \mathbf{v}_f \cdot \mathbf{S}_f$ 是界面通量。
高分辨率方案(TVD: Total Variation Diminishing)用通量限制器 $\psi(r)$ 兼顾精度与有界性:
| 限制器名称 | $\psi(r)$ 的式子 | 特点 |
|---|---|---|
| minmod | $\max(0, \min(1,r))$ | 最保守。适于冲击波周围 |
| van Leer | $(r + |r|)/(1+|r|)$ | 光滑流中高精度 |
| superbee | $\max(0,\min(2r,1),\min(r,2))$ | 最积极。注意过压缩 |
| limitedLinear | OpenFOAM默认 | 光滑流中保持二阶精度 |
OpenFOAM的fvSchemes中的「divSchemes」设定成「Gauss linearUpwind」或「Gauss limitedLinear」这种。实务中该选哪个呢?
最初用「Gauss limitedLinear 1」或「Gauss linearUpwind grad(U)」比较平衡。纯粹的中心差分「Gauss linear」精度高,但在湍流分析中容易出现数值振荡。初始解不收敛时,临时用「Gauss upwind」(一阶迎风)制作粗糙解,之后再切换到高阶方案,这种"两段式方法"是实务的定式。对于高速压缩性流动(有冲击波的情况)则需要weno等高阶有界方案。
线性方程组求解器
FEM/FVM最终需要求解大规模稀疏矩阵方程 $\mathbf{A}\mathbf{x} = \mathbf{b}$。根据问题规模和性质选择求解器。
5.1 直接法
LU分解: $\mathbf{A} = \mathbf{L}\mathbf{U}$($\mathbf{L}$:下三角,$\mathbf{U}$:上三角)。通过前代和回代求解。
Cholesky分解(对称正定矩阵用): $\mathbf{A} = \mathbf{L}\mathbf{L}^T$。计算量约为LU分解的一半。结构分析静力学中常用。
直接法的复杂度(带状矩阵,半带宽 $b$):
- 内存:$O(n \cdot b)$
- 计算量:$O(n \cdot b^2)$
- 三维问题中半带宽 $b \sim \sqrt{n}$,故计算量 $O(n^2)$ — 大规模问题需迭代法
5.2 迭代法 — 共轭梯度法(CG法)
对称正定矩阵 $\mathbf{A}$ 的CG法算法:
初值: x₀(通常 x₀ = 0)
残差: r₀ = b - Ax₀
搜索方向: p₀ = r₀
for k = 0, 1, 2, ...
α_k = (r_k^T r_k) / (p_k^T A p_k) // 步长
x_{k+1} = x_k + α_k p_k // 解的更新
r_{k+1} = r_k - α_k A p_k // 残差的更新
β_k = (r_{k+1}^T r_{k+1}) / (r_k^T r_k)
p_{k+1} = r_{k+1} + β_k p_k // 搜索方向更新
收敛条件:$\|r_k\| / \|b\| < \varepsilon$(通常 $\varepsilon = 10^{-6}$ 〜 $10^{-8}$)
5.3 预处理(Preconditioning)
条件数 $\kappa(\mathbf{A})$ 较大(病态)的矩阵收敛缓慢。用预处理矩阵 $\mathbf{M} \approx \mathbf{A}$ 求解等价系统 $\mathbf{M}^{-1}\mathbf{A}\mathbf{x} = \mathbf{M}^{-1}\mathbf{b}$。
| 预处理方法 | 计算成本 | 收敛改善 | 用途 |
|---|---|---|---|
| 对角缩放(Jacobi) | 低 | 小 | 简单问题·初期测试 |
| 不完全LU(ILU(0)) | 中 | 中〜大 | 通用(OpenFOAM默认) |
| ILU(k)(fill-in层级k) | 中〜高 | 大 | 更难问题 |
| 代数多重网格(AMG) | 高(初期) | 非常大 | 大规模结构·流体分析 |
| 几何多重网格(GMG) | 高(设计成本) | 最大 | 结构化网格CFD |
Ansys分析很慢时,求解器设定里有各种选项很烦恼。PCG、SPARSE、JCG什么的...该选哪个?
Ansys Mechanical的话,静力分析首选SPARSE(直接法稀疏求解器)。问题规模较小(不超过数十万自由度)的话一般没问题。PCG是预处理共轭梯度法,大规模问题·节省内存时适用。JCG在非均质问题或非线性分析时,SPARSE内存不足的代选方案。大规模并行的话用Distributed SPARSE或基于AMG的PCG。实务的做法是先试试,再改。
5.4 稀疏矩阵的存储格式
高效存储大规模稀疏矩阵的数据结构:
- CSR(Compressed Sparse Row): 按行存储非零元素的列指标和值。行运算(矩阵-向量乘积)高速。FEM·FVM中标准。
- CSC(Compressed Sparse Column): 按列存储。LU分解合适。
- COO(Coordinate List): (行, 列, 值)的列表。组装容易但运算慢。
$n$ 节点、$nnz$ 非零元素的CSR矩阵内存:$3 \times nnz + (n+1)$ 整数 + $nnz$ 浮点数。
特征值求解器
6.1 幂法与反迭代法
幂法(Power method): 求最大特征值的最简单方法:
收敛速率:$|\lambda_2/\lambda_1|$(第二大特征值与最大特征值之比)。特征值密集时收敛非常慢。
反迭代法(Inverse iteration): 用位移 $\mu$ 的反迭代求与指定值 $\lambda \approx \mu$ 最接近的模式:
6.2 Lanczos法
大规模对称特征值问题中应用最广的方法。对Krylov子空间 $\mathcal{K}_m(\mathbf{A}, \mathbf{v}_1) = \text{span}\{\mathbf{v}_1, \mathbf{A}\mathbf{v}_1, \ldots, \mathbf{A}^{m-1}\mathbf{v}_1\}$ 进行三对角化:
$\mathbf{T}_m$ 是 $m \times m$ 三对角矩阵,其特征值(Ritz值)是 $\mathbf{A}$ 特征值的良好近似。即使 $n = 10^6$ 自由度的系统,$m = 100 \sim 300$ 个Lanczos向量也足以达到足够精度。
6.3 子空间反迭代法与ARPACK
实用的大规模特征值求解器多数基于ARPACK(Arnoldi PACKage),实现了对非对称矩阵也适用的隐式重启Arnoldi法(IRAM)。
基于ARPACK的特征值求解器例子:
- SLEPc(OpenFOAM, FEniCS等)
- LAPACK/ScaLAPACK(中小规模)
- FEAST特征值求解器(特定频带特征值的高并行计算)
数值精度与误差管理
7.1 误差的种类
| 误差类型 | 定义 | 原因 | 削减方法 |
|---|---|---|---|
| 舍入误差(Round-off error) | 浮点运算的精度限界 | IEEE 754双精度: $\varepsilon_\text{mach} \approx 2.2 \times 10^{-16}$ | 使用双精度、选择数值稳定算法 |
| 截断误差(Truncation error) | 差分·有限元近似引入的误差 | 泰勒展开的截断 | 网格细化·高阶单元 |
| 离散化误差 | 离散近似不满足连续方程的误差 | 网格宽度·时间步的有限性 | 网格收敛性验证 |
| 建模误差 | 物理模型的近似(湍流模型等) | 现实复杂性的简化 | 采用更高级模型·实验验证 |
7.2 Richardson外推与GCI
网格收敛研究中用3个网格解估计真解的Richardson外推法(Richardson Extrapolation):
从两个网格($h_1 < h_2$,细化比 $r = h_2/h_1$)得到:
网格收敛指数(GCI: Grid Convergence Index): Roache(1994)提出的标准误差评价指标:
$e_{12} = (f_2 - f_1)/f_1$(相对误差),$F_s = 1.25$(安全系数,Roache推荐)。
GCI < 5%时"收敛充分"被普遍认可。ASME V&V 20-2009标准也采纳了这一指标。
听说有论文评审"因没计算GCI被拒"。实务中也需要GCI吗?
学术论文基本已必须。Journal of Fluids Engineering和International Journal for Numerical Methods in Engineering等都在作者指南中要求GCI。产业CAE中,汽车·航空认证分析(把仿真作为证据时)也要按ASME V&V和NASA GCI指南。"做两个网格变化5%以下就OK"这种定性法太笼统。GCI虽然多花2小时工作,但证明分析可信性不可或缺。
7.3 数值陷阱与对策
| 问题 | 原因 | 对策 |
|---|---|---|
| 有效数字丧失 | 差不多大小的数相减(上位数字抵消) | 改变运算顺序、引入辅助变量 |
| 信息丧失 | 大数与小数的和(舍入误差累积) | Kahan补偿求和算法 |
| 数值振荡(振铃) | 高阶方案通过急剧变化(不连续) | 限制器·迎风化·WENO |
| 零主元(直接法) | 矩阵奇异或病态 | 主元选择·预处理·检查边界条件 |
| 沙漏模式(Hourglass) | 低减积分单元的零能模式 | 沙漏控制(稳定化) |
最优求解方法选择指南
8.1 问题类型别求解器选择表
| 问题类型 | 典型方法 | 代表求解器/库 |
|---|---|---|
| 线性静分析(小规模 <50万DOF) | 直接法(Cholesky/LU) | PARDISO, MUMPS, SuperLU |
| 线性静分析(大规模 >50万DOF) | PCG + AMG | BoomerAMG, AMGCL, ML/MueLu |
| 特征值分析(少数模式) | Lanczos/子空间反迭 | ARPACK, SLEPc, FEAST |
| 特征值分析(多数模式) | 分布式+Lanczos | ScaLAPACK, SLEPc |
| 非线性静分析 | NR + 直接法(内部) | 求解器内置(Abaqus, Marc) |
| 非定常显式法 | 中心差分+集中质量 | LS-DYNA, Abaqus/Explicit |
| CFD 不可压缩 | SIMPLE/PISO + PCG/GAMG | OpenFOAM, Fluent |
| CFD 可压缩 | 高阶FVM + Runge-Kutta + AMG | OpenFOAM rhoCentralFoam, SU2 |
8.2 并行计算可扩展性
阿姆达尔定律: 可并行化比例 $p$ 时,$N$ 处理器的理论最大加速比:
$p = 0.95$(95%可并行化)时,理论极限 $N \to \infty$ 仅 $1/(1-0.95) = 20$ 倍。
大规模FEM/FVM并行计算的注意事项:
- 域分割(Domain Decomposition): MeTIS、SCOTCH等图分割。最小化halo交换通信成本。
- AMG的并行化: 粗化阶段需进程间通信。可扩展性有限。
- 实际并行效率: 实务上50〜70%。通信支配时更低。
相关交互式工具
动手验证理论
- 网格收敛·GCI计算工具 — 从3个网格解自动计算Richardson外推和GCI
- 数值微分截断误差工具 — 按格子宽度可视化差分精度阶次的差异
- 一维热扩散模拟器 — FDM陽解法FTCS中体验CFL条件影响
- 不确定性传播工具 — 从输入变量分布计算输出蒙特卡洛分布