2025–2026 学年第二学期
北京理工大学 空天科学与技术学院
任杰
John D. Anderson Computational Fluid
Dynamics: The Basics with Applications
McGraw-Hill, 1995
任玉新 陈海昕
计算流体力学基础 清华大学出版社,2006
张德良
计算流体力学教程 高等教育出版社,2010
蔡庆东
计算流体动力学
北京大学本科生研究生专业基础课讲义,2018
真正理解 CFD 的最好方式,是自己实现数值算法并运行计算 - John D. Anderson
定义:
\[ \frac{\partial u}{\partial x} \rightarrow \frac{u_{i+1}-u_i}{\Delta x} \]
| 类型 | 特点 |
|---|---|
| 连续解(Analytical) | 在整个空间域 \((x,y)\) 求解 |
| 数值解(Numerical) | 只在有限网格点(grid points)上求解 |
➡ 微分算子 → 差分算子
➡ PDE → 代数方程组
| 结构网格 | 非结构网格 | |
|---|---|---|
| 规则性 | 强 | 弱 |
| 编号方式 | (i,j,k) | 无规则 |
| 适用几何 | 简单 | 复杂 |
坐标索引: \[ (i,j) \]
相邻点:
设函数 \(u(x)\),在 \(x_i\) 处Taylor展开:
\[ u_{i+1} = u_i + \left(\frac{\partial u}{\partial x}\right)_i \Delta x + \frac{1}{2!}\left(\frac{\partial^2 u}{\partial x^2}\right)_i (\Delta x)^2 + \frac{1}{3!}\left(\frac{\partial^3 u}{\partial x^3}\right)_i (\Delta x)^3 + \cdots \]
泰勒展开 = “无限精确”的表达
\[ f(x) = \sin(2\pi x) \]
已知 \(f(0.2)\) 求 \(f(0.2+0.02)\)
\[ \left(\frac{\partial u}{\partial x}\right)_{i,j}=\frac{u_{i+1,j} - u_{i,j}}{\Delta x}- \frac{1}{2}\left(\frac{\partial^2 u}{\partial x^2}\right)\Delta x+ \cdots \]
前向差分(Forward Difference)
\[ \left(\frac{\partial u}{\partial x}\right)_i = \frac{u_{i+1}-u_i}{\Delta x} +O(\Delta x) \]
后向差分(Backward Difference)
\[ \left(\frac{\partial u}{\partial x}\right)_i = \frac{u_i-u_{i-1}}{\Delta x}+O(\Delta x) \]
中心差分(Central Difference)
\[ \left(\frac{\partial u}{\partial x}\right)_i = \frac{u_{i+1}-u_{i-1}}{2\Delta x}+O(\Delta x^2) \]
差分格式推导:以中心差分为例
在点 \(x_i\) 处,对 \(u_{i+1}\) 和 \(u_{i-1}\) 分别做泰勒展开:
\[ u_{i+1} = u_i + u'_i \Delta x + \frac{1}{2}u''_i (\Delta x)^2 + \frac{1}{6}u'''_i (\Delta x)^3 + O(\Delta x^4) \]
\[ u_{i-1} = u_i - u'_i \Delta x + \frac{1}{2}u''_i (\Delta x)^2 - \frac{1}{6}u'''_i (\Delta x)^3 + O(\Delta x^4) \]
将两式相减(消去了全部偶次项):
\[ u_{i+1} - u_{i-1} = 2 u'_i \Delta x + \frac{1}{3}u'''_i (\Delta x)^3 + O(\Delta x^5) \]
整理得:
\[ \left(\frac{\partial u}{\partial x}\right)_i = \frac{u_{i+1} - u_{i-1}}{2\Delta x} + O(\Delta x^2) \]
二阶前向差分
\[ \left(\frac{\partial u}{\partial x}\right)_i= \frac{-3u_i + 4u_{i+1} - u_{i+2}}{2\Delta x}+ O(\Delta x^2) \]
四阶中心差分
\[ \left(\frac{\partial u}{\partial x}\right)_i= \frac{-u_{i+2} + 8u_{i+1} - 8u_{i-1} + u_{i-2}}{12\Delta x}+ O(\Delta x^4) \]
五阶迎风偏置差分
\[ \left(\frac{\partial u}{\partial x}\right)_i=\frac{-2u_{i-3}+15u_{i-2}-60u_{i-1}+20u_i+30u_{i+1}-3u_{i+2}}{60\Delta x}+ O(\Delta x^5) \]
六阶中心差分?
\[ \left(\frac{\partial u}{\partial x}\right)_i= \frac{-u_{i+3} + 9u_{i+2} - 45u_{i+1} + 45u_{i-1} - 9u_{i-2} + u_{i-3}}{60\Delta x}+ O(\Delta x^6) \]
六阶中心差分?
\[ \left(\frac{\partial u}{\partial x}\right)_i= \frac{-u_{i+3} + 9u_{i+2} - 45u_{i+1} + 45u_{i-1} - 9u_{i-2} + u_{i-3}}{60\Delta x}+ O(\Delta x^6) \]
设:\(u(x) = x\),则:\(\frac{du}{dx} = 1\)
设:\(x_i = i\Delta x\),则:\(u_i = x_i = i\Delta x\)
\[ \frac{-(i+3)\Delta x+ 9(i+2)\Delta x- 45(i+1)\Delta x + 45(i-1)\Delta x- 9(i-2)\Delta x+ (i-3)\Delta x}{60\Delta x}=-1 \]
六阶中心差分 ❌ 错误形式
\[ \left(\frac{\partial u}{\partial x}\right)_i= \frac{-u_{i+3} + 9u_{i+2} - 45u_{i+1} + 45u_{i-1} - 9u_{i-2} + u_{i-3}}{60\Delta x}+ O(\Delta x^6) \]
六阶中心差分
\[ \left(\frac{\partial u}{\partial x}\right)_i=\frac{-u_{i-3}+9u_{i-2}-45u_{i-1}+45u_{i+1}-9u_{i+2}+u_{i+3}}{60\Delta x}+ O(\Delta x^6) \]
二阶精度(3点中心差分)
\[ \left(\frac{\partial^2 u}{\partial x^2}\right)_i= \frac{u_{i+1} - 2u_i + u_{i-1}}{(\Delta x)^2}+ O(\Delta x^2) \]
四阶精度(5点中心差分)
\[ \left(\frac{\partial^2 u}{\partial x^2}\right)_i= \frac{-u_{i+2} + 16u_{i+1} - 30u_i + 16u_{i-1} - u_{i-2}}{12(\Delta x)^2}+ O(\Delta x^4) \]
六阶精度(7点中心差分)
\[ \left(\frac{\partial^2 u}{\partial x^2}\right)_i= \frac{2u_{i+3} - 27u_{i+2} + 270u_{i+1} - 490u_i + 270u_{i-1} - 27u_{i-2} + 2u_{i-3}}{180(\Delta x)^2}+ O(\Delta x^6) \]
二阶精度前向差分(4点)
\[ \left(\frac{\partial^2 u}{\partial x^2}\right)_i= \frac{2u_i - 5u_{i+1} + 4u_{i+2} - u_{i+3}}{(\Delta x)^2}+ O(\Delta x^2) \]
四阶精度前向差分(6点)
\[ \left(\frac{\partial^2 u}{\partial x^2}\right)_i= \frac{45u_i - 154u_{i+1} + 214u_{i+2} - 156u_{i+3} + 61u_{i+4} - 10u_{i+5}}{12(\Delta x)^2}+ O(\Delta x^4) \]
\[ \frac{\partial^2 u}{\partial x \partial y}\approx \frac{u_{i+1,j+1}-u_{i+1,j-1}-u_{i-1,j+1}+u_{i-1,j-1}}{4\Delta x \Delta y}+O(\Delta x^2,\Delta y^2) \]
紧致格式 = 用更少的网格点,获得更高精度的差分格式 👉 “用隐式关系换精度”
为什么需要紧致格式? 回顾普通中心差分:
| 精度 | stencil |
|---|---|
| 二阶 | 3点 |
| 四阶 | 5点 |
| 六阶 | 7点 |
问题:
普通差分(显式):
\[ u'_i = \frac{u_{i+1} - u_{i-1}}{2\Delta x} \]
紧致格式(隐式):
\[ a u'_{i-1} + u'_i + a u'_{i+1} = \frac{b(u_{i+1} - u_{i-1})}{2\Delta x} \]
👉 导数之间也建立关系! 例:四阶紧致格式
\[ \frac{1}{4}u'_{i-1} + u'_i + \frac{1}{4}u'_{i+1}= \frac{3}{4}\frac{u_{i+1} - u_{i-1}}{\Delta x}+O(\Delta x^4) \]
👉 对比:
| 方法 | 点数 | 精度 |
|---|---|---|
| 中心差分 | 5点 | 四阶 |
| 紧致格式 | 3点 | 四阶 |
本质:需要解线性方程组
把所有点写出来:
\[ \begin{cases} \frac{1}{4}u'_0 + u'_1 + \frac{1}{4}u'_2 = RHS_1 \\ \frac{1}{4}u'_1 + u'_2 + \frac{1}{4}u'_3 = RHS_2 \\ \cdots \end{cases} \]
👉 形成:
\[ A \mathbf{u'} = \mathbf{b} \]
| 特性 | 普通差分 | 紧致格式 |
|---|---|---|
| 是否显式 | ✅ | ❌ |
| stencil | 宽 | 窄 |
| 精度 | 一般 | 高 |
| 是否需解方程 | ❌ | ✅ |
| 频谱精度 | 一般 | 很好 |
👉 物理意义(可以这样讲)
紧致格式 = 更接近“谱方法”的差分方法
⚠️ 常见误区
❌ 认为紧致格式更简单
→ 实际上需要解线性系统
❌ 认为一定更快
→ 小规模可能慢,但精度优势明显
❌ 忽略边界处理
→ 边界需要专门设计紧致格式
紧致格式通过引入导数之间的耦合关系,在保持紧 stencil 的同时显著提高精度,是连接有限差分与谱方法的重要桥梁。
需要特别注意的是,当控制方程以如下形式书写时,即使对于粘性流动,所需的也仅是一阶导数。
\[ \frac{\partial \mathbf{U}}{\partial t}+\frac{\partial \mathbf{F}}{\partial x}+\frac{\partial \mathbf{G}}{\partial y}+\frac{\partial \mathbf{H}}{\partial z}= \mathbf{J} \]
进一步地,\(F\)、\(G\) 和 \(H\) 中的一些项包含粘性应力以及热传导项。这些物理量依赖于速度或温度的梯度,而这些梯度本身也是一阶导数。因此,对于这些粘性项,同样可以使用一阶导数的有限差分格式进行离散。通过这种方式,可以避免使用二阶导数的有限差分格式!
我们这里要强调的是:可以构造出几乎无限多种有限差分表达式,并且其精度可以不断提高。过去,在大多数计算流体力学(CFD)应用中,二阶精度通常被认为已经足够,因此本节中推导的这些差分格式一直是最常用的形式。关于高阶精度的优缺点如下:
缺点(con):更高阶精度的差分格式通常需要更多的网格点,因此在每一个时间步或空间步中,会增加计算机的计算量。
优点(pro):相比之下,高阶差分格式可能只需要更少的总体网格点,就可以获得相当的整体精度。高阶差分格式通常可以得到“质量更高”的数值解,例如捕捉到更清晰、更尖锐的激波结构。这一方面目前仍是CFD领域的研究热点。
基于以上原因,对于不同CFD问题究竟应采用何种精度,并不存在一个绝对明确的答案。二阶精度在绝大多数CFD应用中已被广泛接受。
在内部点,我们可以用中心差分:
\[ \frac{\partial u}{\partial y}\Big|_i \approx \frac{u_{i+1}-u_{i-1}}{2\Delta y} \]
但在边界:没有 \(i-1\),无法使用中心差分。👉 思路:单边差分(One-sided difference)
一阶精度(前向差分)
\[ \left(\frac{\partial u}{\partial y}\right)_1= \frac{u_2 - u_1}{\Delta y}+ O(\Delta y) \]
二阶精度单边差分(重点)
\[ \left(\frac{\partial u}{\partial y}\right)_1= \frac{-3u_1 + 4u_2 - u_3}{2\Delta y}+ O(\Delta y^2) \]
边界处理质量 = CFD精度关键来源之一
在粘性流动中:
\[ \tau_w = \mu \left(\frac{\partial u}{\partial y}\right)_w \]
\[ q_w = k \left(\frac{\partial T}{\partial y}\right)_w \]
👉 导数越准确 → 剪切应力 / 热流越准确
👉 例 给定:\(u = 1582(1 - e^{-y/L})\)
网格:
| y | u |
|---|---|
| 0 | 0 |
| 0.1 | 150.54 |
| 0.2 | 286.77 |
| 0.3 | 410.03 |
精确解
\[ \left.\left(\frac{\partial u}{\partial y}\right)\right|_{y=0}= 1582 \]
\[ \left.\left(\frac{\partial u}{\partial y}\right)\right|_{y=0}= \frac{u_2-u_1}{\Delta y}=1505.4 \]
\[ \left.\left(\frac{\partial u}{\partial y}\right)\right|_{y=0}= \frac{-3u_1 + 4u_2 - u_3}{2\Delta y}=1577.0 \]
\[ \left.\left(\frac{\partial u}{\partial y}\right)\right|_{y=0}= \frac{-11u_1 + 18u_2 - 9u_3 + 2u_4}{6\Delta y}=1581.4 \]
考虑一维热传导方程 \(\frac{\partial T}{\partial t} = \alpha \frac{\partial^2 T}{\partial x^2}\)
时间(前向差分): \[ \frac{\partial T}{\partial t} =\frac{T_i^{n+1}-T_i^n}{\Delta t}+O(\Delta t) \]
空间(中心差分): \[ \frac{\partial^2 T}{\partial x^2}=\frac{T_{i+1}^n - 2T_i^n + T_{i-1}^n}{(\Delta x)^2}+O((\Delta x)^2) \]
得到差分方程:
\[ \frac{T_i^{n+1}-T_i^n}{\Delta t}=\alpha \frac{T_{i+1}^n - 2T_i^n + T_{i-1}^n}{(\Delta x)^2} \]
⚠️ 重要概念 差分方程 ≠ 原微分方程
定义一致性(Consistency)
当: \[ \Delta x \to 0,\quad \Delta t \to 0 \]
👉 差分方程 → 原方程
\[\frac{\partial T}{\partial t} = \alpha \frac{\partial^2 T}{\partial x^2}\]
\[ T_i^{n+1} = T_i^n + \alpha \frac{\Delta t}{(\Delta x)^2}(T_{i+1}^n - 2T_i^n + T_{i-1}^n) \]
\[ T_i^{n+1} = T_i^n + \alpha \frac{\Delta t}{(\Delta x)^2}(T_{i+1}^{(n+1)} - 2T_i^{(n+1)} + T_{i-1}^{(n+1)}) \]
\[ \frac{T_i^{n+1} - T_i^n}{\Delta t}=\alpha \frac{1}{2}\left[\frac{T_{i+1}^{n} - 2T_i^{n} + T_{i-1}^{n}}{(\Delta x)^2}+\frac{T_{i+1}^{n+1} - 2T_i^{n+1} + T_{i-1}^{n+1}}{(\Delta x)^2}\right] \]
\[ \frac{T_i^{n+1} - T_i^n}{\Delta t}=\alpha \frac{1}{2}\left[\frac{T_{i+1}^{n} - 2T_i^{n} + T_{i-1}^{n}}{(\Delta x)^2}+\frac{T_{i+1}^{n+1} - 2T_i^{n+1} + T_{i-1}^{n+1}}{(\Delta x)^2}\right] \]
隐式方法未知量:\(T_{i-1}^{n+1}\)、\(T_i^{n+1}\)、\(T_{i+1}^{n+1}\)
👉 一个方程多个未知数、不能逐点计算、必须:同时求解整个网格系统
\[ A T_{i-1}^{n+1} - B T_i^{n+1} + A T_{i+1}^{n+1} = K_i \]
其中
\[ A=\frac{\alpha \Delta t}{2(\Delta x)^2}, \qquad B=1+\frac{\alpha \Delta t}{(\Delta x)^2}, \qquad K_i=-T_i^n-\frac{\alpha \Delta t}{2(\Delta x)^2}\left(T_{i+1}^n-2T_i^n+T_{i-1}^n\right) \]
\[ A T_{i-1}^{n+1} - B T_i^{n+1} + A T_{i+1}^{n+1} = K_i \]
若考虑一维区间上共有 \(7\) 个网格点,其中边界点 \(1\) 和 \(7\) 已知,则未知量为
\[ T_2^{n+1},\; T_3^{n+1},\; T_4^{n+1},\; T_5^{n+1},\; T_6^{n+1} \]
于是线性方程组可写成:
\[ \begin{aligned} -BT_2^{n+1}+AT_3^{n+1} &= K_2-AT_1^{n+1},\\ AT_2^{n+1}-BT_3^{n+1}+AT_4^{n+1} &= K_3,\\ AT_3^{n+1}-BT_4^{n+1}+AT_5^{n+1} &= K_4,\\ AT_4^{n+1}-BT_5^{n+1}+AT_6^{n+1} &= K_5,\\ AT_5^{n+1}-BT_6^{n+1} &= K_6-AT_7^{n+1}. \end{aligned} \]
写成矩阵形式就是
\[ \begin{bmatrix} -B & A & 0 & 0 & 0 \\ A & -B & A & 0 & 0 \\ 0 & A & -B & A & 0 \\ 0 & 0 & A & -B & A \\ 0 & 0 & 0 & A & -B \end{bmatrix} \begin{bmatrix} T_2^{n+1}\\ T_3^{n+1}\\ T_4^{n+1}\\ T_5^{n+1}\\ T_6^{n+1} \end{bmatrix} = \begin{bmatrix} K_2-AT_1^{n+1}\\ K_3\\ K_4\\ K_5\\ K_6-AT_7^{n+1} \end{bmatrix} \]
也可将右端向量记为
\[ \mathbf{K}= \begin{bmatrix} K_2'=K_2-AT_1^{n+1}\\ K_3\\ K_4\\ K_5\\ K_6'=K_6-AT_7^{n+1} \end{bmatrix} \]
因此最终得到标准形式
\[ \mathbf{A}\mathbf{T}=\mathbf{K} \]
其中
\[ \mathbf{A}= \begin{bmatrix} -B & A & 0 & 0 & 0 \\ A & -B & A & 0 & 0 \\ 0 & A & -B & A & 0 \\ 0 & 0 & A & -B & A \\ 0 & 0 & 0 & A & -B \end{bmatrix}, \qquad \mathbf{T}= \begin{bmatrix} T_2^{n+1}\\ T_3^{n+1}\\ T_4^{n+1}\\ T_5^{n+1}\\ T_6^{n+1} \end{bmatrix}, \qquad \mathbf{K}= \begin{bmatrix} K_2'\\ K_3\\ K_4\\ K_5\\ K_6' \end{bmatrix} \]
时间推进(Time Marching):从已知时间层 \(n\) 推进到 \(n+1\)
| 特性 | 显式方法 | 隐式方法 |
|---|---|---|
| 计算方式 | 逐点 | 整体求解 |
| 稳定性 | 条件稳定 | 常无条件稳定 |
| 时间步长 | 很小 | 可较大 |
| 编程难度 | 简单 | 较复杂 |
| 计算成本 | 每步低 | 每步高 |
既然显式方法更简单,为什么不一直使用显式方法?
👉 答案:稳定性约束
在差分格式中,会出现:
必须满足稳定性条件(如 CFL 条件),否则会发生:
程序崩溃
一些隐式方法是 无条件稳定(unconditionally stable)
| 场景 | 推荐方法 |
|---|---|
| 稳态问题 | ✅ 隐式方法 |
| 非定常问题 | ⚠️ 小心使用隐式方法 |
| 高时间精度需求 | ✅ 显式或小步长 |
| 特性 | 显式方法 | 隐式方法 |
|---|---|---|
| 稳定性 | 条件稳定 | 可无条件稳定 |
| 时间步长 | 很小 | 可很大 |
| 单步计算量 | 低 | 高 |
| 总步数 | 多 | 少 |
| 时间精度 | 高(小步长) | 可能较低(大步长) |
👉 不存在“最优方法”,只有:针对问题选择合适方法
1969 年至约 1979 年期间:
1980年代:
如今:
1️⃣ 截断误差(Discretization Error)👉 一致性问题
\[ \text{Discretization error} = A - D \]
2️⃣ 舍入误差(Round-off Error)👉 稳定性问题
\[ \epsilon = N - D \]
👉 舍入误差如何随时间演化 = 稳定性本质
\[ \epsilon = N - D \]
对于热传导方程:
\[ \frac{\partial T}{\partial t} = \alpha \frac{\partial^2 T}{\partial x^2} \]
对应显式格式:
\[ \frac{T_i^{n+1} - T_i^n}{\Delta t}=\alpha \frac{T_{i+1}^n - 2T_i^n + T_{i-1}^n}{(\Delta x)^2} \]
显式格式:
\[ \frac{T_i^{n+1} - T_i^n}{\Delta t}=\alpha \frac{T_{i+1}^n - 2T_i^n + T_{i-1}^n}{(\Delta x)^2} \]
考虑数值解与精确解的分解:
\[ T_i^n = D_i^n + \epsilon_i^n \]
其中:
代入差分格式
\[ \frac{D_i^{n+1} + \epsilon_i^{n+1} - D_i^n - \epsilon_i^n}{\alpha \Delta t}=\frac{D_{i+1}^n + \epsilon_{i+1}^n - 2D_i^n - 2\epsilon_i^n + D_{i-1}^n + \epsilon_{i-1}^n}{(\Delta x)^2} \]
\(D\) 是差分方程的精确解,因此满足:
\[ \frac{D_i^{n+1} - D_i^n}{\alpha \Delta t}=\frac{D_{i+1}^n - 2D_i^n + D_{i-1}^n}{(\Delta x)^2} \]
\[ \frac{D_i^{n+1} + \epsilon_i^{n+1} - D_i^n - \epsilon_i^n}{\alpha \Delta t}=\frac{D_{i+1}^n + \epsilon_{i+1}^n - 2D_i^n - 2\epsilon_i^n + D_{i-1}^n + \epsilon_{i-1}^n}{(\Delta x)^2} \]
\[ \frac{D_i^{n+1} - D_i^n}{\alpha \Delta t}=\frac{D_{i+1}^n - 2D_i^n + D_{i-1}^n}{(\Delta x)^2} \]
两式相减
\[ \frac{\epsilon_i^{n+1} - \epsilon_i^n}{\alpha \Delta t}=\frac{\epsilon_{i+1}^n - 2\epsilon_i^n + \epsilon_{i-1}^n}{(\Delta x)^2} \]
👉 误差 \(\epsilon\):满足 与原方程完全相同形式的差分方程
👉 意味着:数值误差的传播规律 ≈ 物理量的传播规律
👉 von Neumann 稳定性分析的起点
我们从误差满足的差分方程出发:
\[ \frac{\epsilon_i^{n+1} - \epsilon_i^n}{\Delta t}=\alpha \frac{\epsilon_{i+1}^n - 2\epsilon_i^n + \epsilon_{i-1}^n}{(\Delta x)^2} \]
误差的 Fourier 展开:
\[ \epsilon(x,t) = \sum_m A_m(t) e^{i k_m x} \]
由于方程是线性的:👉 每个模态可以独立分析
单一波数:
\[ \epsilon_i^n = \hat{\epsilon}^n e^{i k x_i} \]
其中:
进一步假设时间指数增长:
\[ \hat{\epsilon}^n = e^{a t_n} \]
因此:
\[ \epsilon_i^n = e^{a t_n} e^{i k x_i} \]
\[\epsilon_i^n = e^{a t_n} e^{i k x_i}\]
代入差分方程
\[ \frac{\epsilon_i^{n+1} - \epsilon_i^n}{\Delta t}=\alpha \frac{\epsilon_{i+1}^n - 2\epsilon_i^n + \epsilon_{i-1}^n}{(\Delta x)^2} \]
时间推进项
\[ \epsilon_i^{n+1} = e^{a (t_n+\Delta t)} e^{i k x_i}= e^{a \Delta t} \epsilon_i^n \]
空间项
\[ \epsilon_{i+1}^n = \epsilon_i^n e^{i k \Delta x} \]
\[ \epsilon_{i-1}^n = \epsilon_i^n e^{-i k \Delta x} \]
方程左边:
\[ \frac{\epsilon_i^{n+1} - \epsilon_i^n}{\Delta t}=\frac{\epsilon_i^n (e^{a \Delta t} - 1)}{\Delta t} \]
方程右边:
\[ \alpha \frac{\epsilon_i^n (e^{ik\Delta x} - 2 + e^{-ik\Delta x})}{(\Delta x)^2} \]
约去公共项 \(\epsilon_i^n\) 得到:
\[ \frac{e^{a \Delta t} - 1}{\Delta t}=\alpha \frac{e^{ik\Delta x} - 2 + e^{-ik\Delta x}}{(\Delta x)^2} \]
其中:
\[ e^{ik\Delta x} - 2 + e^{-ik\Delta x} = 2[\cos(k\Delta x) - 1] \]
进一步用:
\[ \cos\theta - 1 = -2 \sin^2\left(\frac{\theta}{2}\right) \]
得到:
\[ e^{ik\Delta x} - 2 + e^{-ik\Delta x}= -4 \sin^2\left(\frac{k\Delta x}{2}\right) \]
方程化简为
\[ \frac{e^{a \Delta t} - 1}{\Delta t}=- \frac{4\alpha}{(\Delta x)^2}\sin^2\left(\frac{k\Delta x}{2}\right) \]
整理得到:
\[ e^{a \Delta t}=1 - \frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2\left(\frac{k\Delta x}{2}\right) \]
放大因子定义:
\[ G = \left|\frac{\epsilon^{n+1}}{\epsilon^n}\right|=\left|e^{a \Delta t}\right|=\left|1 - \frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2\left(\frac{k\Delta x}{2}\right)\right| \]
稳定性条件
\[ G \le 1 \]
条件 1
\[ 1 - \frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2 \left( \frac{k_m \Delta x}{2} \right)\le 1\Longrightarrow\frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2 \left( \frac{k_m \Delta x}{2} \right)\ge 0 (自动满足) \]
条件 2
\[ 1 - \frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2 \left( \frac{k_m \Delta x}{2} \right)\ge -1\Longrightarrow\frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2 \left( \frac{k_m \Delta x}{2} \right)\le 2 \]
\[ \frac{4\alpha \Delta t}{(\Delta x)^2}\sin^2 \left( \frac{k_m \Delta x}{2} \right)\le 2 \]
由于:
\[ \sin^2 \left( \frac{k_m \Delta x}{2} \right) \le 1 \]
👉 最不利情况:
\[ \sin^2(\cdot) = 1 \]
因此得到最终稳定性条件:
\[ \frac{4\alpha \Delta t}{(\Delta x)^2} \le 2 \Longrightarrow\boxed{\frac{\alpha \Delta t}{(\Delta x)^2} \le \frac{1}{2}} \]
上述分析属于:
von Neumann 稳定性分析方法
特点:
von Neumann 稳定性分析方法
👉 方法核心:
考虑一阶波动方程:
\[ \frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0 \]
时间离散(前向差分)、空间离散(中心差分)👉 Euler显式格式
\[ \frac{u_i^{n+1} - u_i^n}{\Delta t}=- c \frac{u_{i+1}^n - u_{i-1}^n}{2\Delta x} \]
对该格式进行 von Neumann 分析:
无论 \(\Delta t\) 取何值,解都是不稳定的
引入 Fourier 模态
\[ u_i^n = \hat{u}^n e^{ikx_i} \]
其中:
时间推进项
\[ u_i^{n+1} = \hat{u}^{n+1} e^{ikx_i} \]
空间项
\[ u_{i+1}^n = \hat{u}^n e^{ik(x_i+\Delta x)} = u_i^n e^{ik\Delta x} \]
\[ u_{i-1}^n = u_i^n e^{-ik\Delta x} \]
\[ \frac{u_i^{n+1} - u_i^n}{\Delta t}=- c \frac{u_{i+1}^n - u_{i-1}^n}{2\Delta x} \]
左边:
\[ \frac{u_i^{n+1} - u_i^n}{\Delta t}=\frac{u_i^n}{\Delta t}\left(\frac{\hat{u}^{n+1}}{\hat{u}^n} - 1\right) \]
右边:
\[ -c \frac{u_i^n(e^{ik\Delta x} - e^{-ik\Delta x})}{2\Delta x} \]
约去公共因子 \(u_i^n\)
\[ \frac{\hat{u}^{n+1}}{\hat{u}^n} =1- \frac{c\Delta t}{2\Delta x}\left(e^{ik\Delta x} - e^{-ik\Delta x}\right) \]
放大因子
\[ G = \left|\frac{\hat{u}^{n+1}}{\hat{u}^n}\right|= \left|1- \frac{c\Delta t}{2\Delta x}\left(e^{ik\Delta x} - e^{-ik\Delta x}\right)\right| \]
利用指数恒等式
\[ e^{ik\Delta x} - e^{-ik\Delta x} = 2i\sin(k\Delta x) \]
得到:
\[ |G|^2 = 1 + C^2 \sin^2(k\Delta x)>1 (无条件不稳定) \]
其中:
\[ C = \frac{c\Delta t}{\Delta x} \]
👉 FTCS(前向时间 + 中心空间)格式对对流方程是无条件不稳定的
FTCS格式:无条件不稳定
\[ \frac{u_i^{n+1} - u_i^n}{\Delta t}=- c \frac{u_{i+1}^n - u_{i-1}^n}{2\Delta x} \]
Lax 方法:用平均值替代
\[ u_i^n \rightarrow \frac{1}{2}(u_{i+1}^n + u_{i-1}^n) \]
代入后:
\[ u_i^{n+1}=\frac{u_{i+1}^n + u_{i-1}^n}{2}-\frac{c\Delta t}{2\Delta x}(u_{i+1}^n - u_{i-1}^n) \]
设误差:
\[ \epsilon = e^{a t} e^{ikx} \]
代入可得:
\[ G=\left|e^{a\Delta t}\right|=\left|\cos(k\Delta x) - iC\sin(k\Delta x)\right| \]
其中:
\[ C = \frac{c\Delta t}{\Delta x} \]
稳定性条件要求:
\[ |e^{a\Delta t}| \le 1 \Longrightarrow C \le 1 \]
对于二阶波动方程: \[ \frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2} \]
稳定性条件同样要求:
\[ C = \frac{c\Delta t}{\Delta x} \le 1 \]
两条特征线 \[ x = ct,\quad x = -ct \]
👉 \(C < 1\)(稳定):数值域包含物理域,信息传播范围被覆盖,计算可靠
👉 \(C > 1\)(不稳定):数值域小于物理域,信息传播超出计算能力,解不稳定
\[ \boxed{ \text{数值依赖域必须包含物理依赖域} } \]
👉 CFD核心思想:
思考:如果我们拥有一台没有舍入误差的理想计算机,那么数值计算中就不会出现不稳定性?
实际上,数值稳定性的基本概念是建立在解本身随时间的演化行为之上的;它并不本质依赖于舍入误差的行为。将解本身表示为傅里叶级数:
\[ U(x) = \sum_m V_m e^{ik_m x} \]
其中,\(V_m\) 是第 \(m\) 个谐波的振幅。相应地,放大因子可写为:
\[ G = \frac{V_m^{n+1}}{V_m^n} \]
👉 回忆:以下内容是否掌握:
👉 如何构造“合适的网格”?
两个本质问题
① 网格生成 👉 几何问题
② 方程求解 👉 数值问题
⚠️ 二者本质不同!
但现实问题:
👉 无法直接使用矩形网格
示例:机翼流动问题
👉 将物理空间中的非均匀网格 → 转换为计算空间中的规则网格
👉 使用 贴体网格(boundary-fitted grid)
曲线网格(物理空间)
问题:如何进行数值离散?
👉 解决方法:坐标变换
\[ (x, y) \rightarrow (\xi, \eta) \]
在 \((\xi, \eta)\) 空间中:
👉 可直接使用有限差分
关键要求:一一映射(One-to-one mapping)
👉需要掌握
考虑二维非定常流:
\[ (x,y,t) \rightarrow (\xi,\eta,\tau) \]
定义:
\[ \begin{cases} \xi = \xi(x,y,t) \\ \eta = \eta(x,y,t) \\ \tau = \tau(t) \end{cases},~~~通常:\tau = t \]
\[ \boxed{\frac{\partial}{\partial x}=\frac{\partial}{\partial \xi}\frac{\partial \xi}{\partial x}+\frac{\partial}{\partial \eta}\frac{\partial \eta}{\partial x}} ~~~~~~\boxed{ \frac{\partial}{\partial y}=\frac{\partial}{\partial \xi}\frac{\partial \xi}{\partial y}+\frac{\partial}{\partial \eta}\frac{\partial \eta}{\partial y}} ~~~~~~ \boxed{ \frac{\partial}{\partial t}=\frac{\partial}{\partial \xi}\frac{\partial \xi}{\partial t}+\frac{\partial}{\partial \eta}\frac{\partial \eta}{\partial t}+\frac{\partial}{\partial \tau} } \]
以下项称为度量系数(metrics)(反映了网格的几何特征):
\[ \frac{\partial \xi}{\partial x},\; \frac{\partial \eta}{\partial x},\; \frac{\partial \xi}{\partial y},\; \frac{\partial \eta}{\partial y} \]
设:
\[ A = \frac{\partial}{\partial x}=\frac{\partial}{\partial \xi}\frac{\partial \xi}{\partial x}+\frac{\partial}{\partial \eta}\frac{\partial \eta}{\partial x} \]
\[ \frac{\partial^2}{\partial x^2}=\frac{\partial}{\partial x}(A)=\frac{\partial}{\partial x}\left[\frac{\partial}{\partial \xi}\frac{\partial \xi}{\partial x}+\frac{\partial}{\partial \eta}\frac{\partial \eta}{\partial x}\right] \]
使用乘积法则与链式法则:
\[ \boxed{\begin{aligned}\frac{\partial^2}{\partial x^2}=&\frac{\partial}{\partial \xi}\frac{\partial^2 \xi}{\partial x^2}+\frac{\partial}{\partial \eta}\frac{\partial^2 \eta}{\partial x^2}\\&+\frac{\partial^2}{\partial \xi^2}\left(\frac{\partial \xi}{\partial x}\right)^2+\frac{\partial^2}{\partial \eta^2}\left(\frac{\partial \eta}{\partial x}\right)^2\\&+2\frac{\partial^2}{\partial \xi \partial \eta}\frac{\partial \xi}{\partial x}\frac{\partial \eta}{\partial x}\end{aligned}}~~~~~~~~~\boxed{\begin{aligned}\frac{\partial^2}{\partial y^2}=&\frac{\partial}{\partial \xi}\frac{\partial^2 \xi}{\partial y^2}+\frac{\partial}{\partial \eta}\frac{\partial^2 \eta}{\partial y^2}\\&+\frac{\partial^2}{\partial \xi^2}\left(\frac{\partial \xi}{\partial y}\right)^2+\frac{\partial^2}{\partial \eta^2}\left(\frac{\partial \eta}{\partial y}\right)^2\\&+2\frac{\partial^2}{\partial \xi \partial \eta}\frac{\partial \xi}{\partial y}\frac{\partial \eta}{\partial y}\end{aligned}} \]
混合导数
\[ \boxed{\begin{aligned}\frac{\partial^2}{\partial x \partial y}=\frac{\partial}{\partial \xi}\frac{\partial^2 \xi}{\partial x \partial y}+\frac{\partial}{\partial \eta}\frac{\partial^2 \eta}{\partial x \partial y}+\frac{\partial^2}{\partial \xi^2}\frac{\partial \xi}{\partial x}\frac{\partial \xi}{\partial y}+\frac{\partial^2}{\partial \eta^2}\frac{\partial \eta}{\partial x}\frac{\partial \eta}{\partial y}+\frac{\partial^2}{\partial \xi \partial \eta}\left(\frac{\partial \xi}{\partial x}\frac{\partial \eta}{\partial y}+\frac{\partial \eta}{\partial x}\frac{\partial \xi}{\partial y}\right)\end{aligned}} \]
\[ \frac{\partial^2 \phi}{\partial x^2}+\frac{\partial^2 \phi}{\partial y^2}=0 \]
变换后形式
\[ \begin{aligned} \frac{\partial^2 \phi}{\partial \xi^2} \left[ \left(\frac{\partial \xi}{\partial x}\right)^2 + \left(\frac{\partial \xi}{\partial y}\right)^2 \right] + \frac{\partial^2 \phi}{\partial \eta^2} \left[ \left(\frac{\partial \eta}{\partial x}\right)^2 + \left(\frac{\partial \eta}{\partial y}\right)^2 \right] \\+ 2\frac{\partial^2 \phi}{\partial \xi \partial \eta} \left[ \frac{\partial \xi}{\partial x}\frac{\partial \eta}{\partial x} + \frac{\partial \xi}{\partial y}\frac{\partial \eta}{\partial y} \right] + \frac{\partial \phi}{\partial \xi} \left( \frac{\partial^2 \xi}{\partial x^2} + \frac{\partial^2 \xi}{\partial y^2} \right) + \frac{\partial \phi}{\partial \eta} \left( \frac{\partial^2 \eta}{\partial x^2} + \frac{\partial^2 \eta}{\partial y^2} \right) =0 \end{aligned} \]
\[ \frac{\partial \mathbf{U}}{\partial t}+\frac{\partial \mathbf{F}}{\partial x}+\frac{\partial \mathbf{G}}{\partial y}+\frac{\partial \mathbf{H}}{\partial z}= \mathbf{RHS} \]
\[ \frac{\partial \xi}{\partial x},\ \frac{\partial \xi}{\partial y},\ \frac{\partial \eta}{\partial x},\ \frac{\partial \eta}{\partial y} \]
如果变换\((x,y,t) \rightarrow (\xi,\eta,\tau)\)是解析给定的,则可以直接得到这些度量项的解析表达式。然而,在许多 CFD 应用中,该变换是数值给定的,因此度量项通常通过有限差分来计算。
在许多应用中,变换更方便写为其逆变换形式:
\[ x = x(\xi, \eta, \tau),~~y = y(\xi, \eta, \tau),~~ t = t(\tau) \]
\(\xi, \eta, \tau\) 是自变量。 要从逆变换得到度量系数,需要建立如下关系: \[ \frac{\partial \xi}{\partial x},\ \frac{\partial \eta}{\partial y} \quad \Longleftrightarrow \quad \frac{\partial x}{\partial \xi},\ \frac{\partial y}{\partial \eta} \]
考虑流动变量 \(u = u(x, y)\),\(x = x(\xi, \eta), \quad y = y(\xi, \eta)\)
对 \(\xi\) 求导:
\[\frac{\partial u}{\partial \xi} = \frac{\partial u}{\partial x} \frac{\partial x}{\partial \xi} + \frac{\partial u}{\partial y} \frac{\partial y}{\partial \xi}\]
对 \(\eta\) 求导:
\[\frac{\partial u}{\partial \eta} = \frac{\partial u}{\partial x} \frac{\partial x}{\partial \eta} + \frac{\partial u}{\partial y} \frac{\partial y}{\partial \eta}\]
看作关于未知量 \(\frac{\partial u}{\partial x}, \quad \frac{\partial u}{\partial y}\) 的线性方程组:
\[\begin{cases} \frac{\partial u}{\partial \xi} = \frac{\partial u}{\partial x} \frac{\partial x}{\partial \xi} + \frac{\partial u}{\partial y} \frac{\partial y}{\partial \xi} \\[6pt] \frac{\partial u}{\partial \eta} = \frac{\partial u}{\partial x} \frac{\partial x}{\partial \eta} + \frac{\partial u}{\partial y} \frac{\partial y}{\partial \eta} \end{cases}\]
用克拉默法则求解
\(\frac{\partial u}{\partial x} = \frac{ \begin{vmatrix} \frac{\partial u}{\partial \xi} & \frac{\partial y}{\partial \xi} \\ \frac{\partial u}{\partial \eta} & \frac{\partial y}{\partial \eta} \end{vmatrix} }{ \begin{vmatrix} \frac{\partial x}{\partial \xi} & \frac{\partial y}{\partial \xi} \\ \frac{\partial x}{\partial \eta} & \frac{\partial y}{\partial \eta} \end{vmatrix} }\)
分母定义为雅可比行列式(Jacobian):
\[ J = \frac{\partial(x,y)}{\partial(\xi,\eta)} = \begin{vmatrix} \frac{\partial x}{\partial \xi} & \frac{\partial y}{\partial \xi} \\ \frac{\partial x}{\partial \eta} & \frac{\partial y}{\partial \eta} \end{vmatrix} \]
展开得:
\(\frac{\partial u}{\partial x} = \frac{1}{J} \left[ \left(\frac{\partial u}{\partial \xi}\right)\left(\frac{\partial y}{\partial \eta}\right) - \left(\frac{\partial u}{\partial \eta}\right)\left(\frac{\partial y}{\partial \xi}\right) \right]\)
\(\frac{\partial u}{\partial y} = \frac{1}{J} \left[ \left(\frac{\partial u}{\partial \eta}\right)\left(\frac{\partial x}{\partial \xi}\right) - \left(\frac{\partial u}{\partial \xi}\right)\left(\frac{\partial x}{\partial \eta}\right) \right]\)
将上述表达推广为算子形式:
\[ \frac{\partial}{\partial x} = \frac{1}{J} \left[ \left(\frac{\partial}{\partial \xi}\right)\left(\frac{\partial y}{\partial \eta}\right) - \left(\frac{\partial}{\partial \eta}\right)\left(\frac{\partial y}{\partial \xi}\right) \right] \]
\[ \frac{\partial}{\partial y} = \frac{1}{J} \left[ \left(\frac{\partial}{\partial \eta}\right)\left(\frac{\partial x}{\partial \xi}\right) - \left(\frac{\partial}{\partial \xi}\right)\left(\frac{\partial x}{\partial \eta}\right) \right] \]
\[ \frac{\partial \xi}{\partial x} = \frac{1}{J}\frac{\partial y}{\partial \eta},~~~~~~~~~ \frac{\partial \eta}{\partial x} = -\frac{1}{J}\frac{\partial y}{\partial \xi} \]
\[ \frac{\partial \xi}{\partial y} = -\frac{1}{J}\frac{\partial x}{\partial \eta},~~~~~~~~~ \frac{\partial \eta}{\partial y} = \frac{1}{J}\frac{\partial x}{\partial \xi} \]
\[\frac{\partial \xi}{\partial x}, \frac{\partial \eta}{\partial x}\]
\[\frac{\partial x}{\partial \xi}, \frac{\partial y}{\partial \eta}\]
该推导是 CFD 中网格使用的核心基础。
两者通过 Jacobian \(J\) 联系:
\[ J = \frac{\partial(x,y)}{\partial(\xi,\eta)} = \begin{vmatrix} \frac{\partial x}{\partial \xi} & \frac{\partial x}{\partial \eta} \\ \frac{\partial y}{\partial \xi} & \frac{\partial y}{\partial \eta} \end{vmatrix} = \frac{\partial x}{\partial \xi}\frac{\partial y}{\partial \eta} - \frac{\partial x}{\partial \eta}\frac{\partial y}{\partial \xi} \]
对于二维非定常流动且无源项的情况,守恒型方程可写为:
\[\frac{\partial U}{\partial t}+\frac{\partial F}{\partial x}+\frac{\partial G}{\partial y}=0\]
(此处仅考虑二维\(x,y\),是为了简化说明,推广到三维是直接的。)
我们希望得到如下形式:
\[\frac{\partial U_1}{\partial t}+\frac{\partial F_1}{\partial \xi}+\frac{\partial G_1}{\partial \eta}=0 \]
其中\(F_1,G_1\)是由原始通量\(F,G\)组合得到的新通量。
根据链式法则:
\[\frac{\partial U}{\partial t}+\frac{\partial F}{\partial \xi}\left(\frac{\partial \xi}{\partial x}\right)+\frac{\partial F}{\partial \eta}\left(\frac{\partial \eta}{\partial x}\right)+\frac{\partial G}{\partial \xi}\left(\frac{\partial \xi}{\partial y}\right)+\frac{\partial G}{\partial \eta}\left(\frac{\partial \eta}{\partial y}\right)=0 \]
两边乘以\(J\):
\[J\frac{\partial U}{\partial t}+J\left(\frac{\partial F}{\partial \xi}\right)\left(\frac{\partial \xi}{\partial x}\right)+J\left(\frac{\partial F}{\partial \eta}\right)\left(\frac{\partial \eta}{\partial x}\right)+J\left(\frac{\partial G}{\partial \xi}\right)\left(\frac{\partial \xi}{\partial y}\right)+J\left(\frac{\partial G}{\partial \eta}\right)\left(\frac{\partial \eta}{\partial y}\right)=0 \]
考虑如下项:
\[J\left(\frac{\partial F}{\partial \xi}\right)\left(\frac{\partial \xi}{\partial x}\right)=\frac{\partial}{\partial \xi}\left[J F \left(\frac{\partial \xi}{\partial x}\right)\right]-F\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial x}\right)\]
类似地:
\[ \begin{aligned} J\left(\frac{\partial F}{\partial \eta}\right)\left(\frac{\partial \eta}{\partial x}\right) &= \frac{\partial}{\partial \eta}\left[J F \left(\frac{\partial \eta}{\partial x}\right)\right]-F\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial x}\right) \\ J\left(\frac{\partial G}{\partial \xi}\right)\left(\frac{\partial \xi}{\partial y}\right) &= \frac{\partial}{\partial \xi}\left[J G \left(\frac{\partial \xi}{\partial y}\right)\right]-G\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial y}\right) \\ J\left(\frac{\partial G}{\partial \eta}\right)\left(\frac{\partial \eta}{\partial y}\right) &= \frac{\partial}{\partial \eta}\left[J G \left(\frac{\partial \eta}{\partial y}\right)\right]-G\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial y}\right) \end{aligned} \]
导入到守恒型方程,整理得到:
\[ \begin{aligned} J\frac{\partial U}{\partial t}+\frac{\partial}{\partial \xi}\left(JF\frac{\partial \xi}{\partial x}+JG\frac{\partial \xi}{\partial y}\right)+\frac{\partial}{\partial \eta}\left(JF\frac{\partial \eta}{\partial x}+JG\frac{\partial \eta}{\partial y}\right)\\-F\left[\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial x}\right)+\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial x}\right)\right]-G\left[\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial y}\right)+\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial y}\right)\right]&=0 \end{aligned} \]
注意恒等式
\[\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial x}\right)+\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial x}\right)=\frac{\partial}{\partial \xi}\left(\frac{\partial y}{\partial \eta}\right)-\frac{\partial}{\partial \eta}\left(\frac{\partial y}{\partial \xi}\right)=\frac{\partial^2 y}{\partial \xi \partial \eta}-\frac{\partial^2 y}{\partial \eta \partial \xi}=0\]
\[\frac{\partial}{\partial \xi}\left(J\frac{\partial \xi}{\partial y}\right)+\frac{\partial}{\partial \eta}\left(J\frac{\partial \eta}{\partial y}\right)=\frac{\partial}{\partial \xi}\left(-\frac{\partial x}{\partial \eta}\right)+\frac{\partial}{\partial \eta}\left(\frac{\partial x}{\partial \xi}\right)=-\frac{\partial^2 x}{\partial \xi \partial \eta}+\frac{\partial^2 x}{\partial \eta \partial \xi}=0\]
最终守恒形式化简为:
\[ \frac{\partial U_1}{\partial t}+\frac{\partial F_1}{\partial \xi}+\frac{\partial G_1}{\partial \eta}=0 \]
其中:
\[\begin{aligned} U_1 &= JU \\ F_1 &= JF\frac{\partial \xi}{\partial x}+JG\frac{\partial \xi}{\partial y} = F\frac{\partial y}{\partial \eta}-G\frac{\partial x}{\partial \eta}\\ G_1 &= \underbrace{JF\frac{\partial \eta}{\partial x}+JG\frac{\partial \eta}{\partial y}}_{\text{度量系数表示}} = \underbrace{-F\frac{\partial y}{\partial \xi}+G\frac{\partial x}{\partial \xi}}_{\text{逆度量系数表示}} \end{aligned}\]
这一节的关键是:
✔ 将控制方程保持为强守恒形式
✔ 引入新的守恒变量:\(U_1=JU\)
✔ 构造新的通量:\(F_1,G_1\)
✔ 利用Jacobian实现几何映射
本质上:
坐标变换 ≠ 改变物理规律
而是改变“表达方式”以适应计算
考虑图示的物理平面与计算平面。
设我们研究的是:
因此,为了精细计算近壁区域的流动细节:
但是,在离壁面较远处,流场变化较缓,网格则可以较粗。
另一方面,我们又希望在计算平面 \((\xi,\eta)\) 中处理的是:均匀网格
实现这种网格拉伸的一个简单解析变换为
\[ \xi = x,~~~~~~\eta = \ln(y+1) \]
对应的逆变换(inverse transformation)为
\[ x=\xi,~~~~~~y=e^\eta-1 \]
可得
\[ \frac{dy}{d\eta}=e^\eta \]
物理空间中
\[ \frac{\partial (\rho u)}{\partial x}+\frac{\partial (\rho v)}{\partial y}=0 \]
利用链式法则,得到
\[ \frac{\partial (\rho u)}{\partial \xi}\left(\frac{\partial \xi}{\partial x}\right)+\frac{\partial (\rho u)}{\partial \eta}\left(\frac{\partial \eta}{\partial x}\right)+\frac{\partial (\rho v)}{\partial \xi}\left(\frac{\partial \xi}{\partial y}\right)+\frac{\partial (\rho v)}{\partial \eta}\left(\frac{\partial \eta}{\partial y}\right)=0 \]
由直接变换式
\[ \xi=x,\qquad \eta=\ln(y+1) \Rightarrow \frac{\partial \xi}{\partial x}=1, \qquad \frac{\partial \xi}{\partial y}=0, \qquad \frac{\partial \eta}{\partial x}=0, \qquad \frac{\partial \eta}{\partial y}=\frac{1}{y+1} \]
代入后得到的连续性方程
\[ \frac{\partial (\rho u)}{\partial \xi}+\frac{1}{y+1}\frac{\partial (\rho v)}{\partial \eta}=0 \]
又因为根据式 \(y+1=e^\eta\),计算空间的方程可写为
\[ e^\eta \frac{\partial (\rho u)}{\partial \xi}+\frac{\partial (\rho v)}{\partial \eta}=0 \]
此时应该能更清楚地看到:
\[ \frac{1}{J}\left[\frac{\partial (\rho u)}{\partial \xi}\left(\frac{\partial y}{\partial \eta}\right)-\frac{\partial (\rho u)}{\partial \eta}\left(\frac{\partial y}{\partial \xi}\right)\right]+\frac{1}{J}\left[\frac{\partial (\rho v)}{\partial \eta}\left(\frac{\partial x}{\partial \xi}\right)-\frac{\partial (\rho v)}{\partial \xi}\left(\frac{\partial x}{\partial \eta}\right)\right]=0 \]
其中 \(J\) 是雅可比。由逆变换 \(x=\xi,\qquad y=e^\eta-1\) 得到逆度量系数
\[ \frac{\partial x}{\partial \xi}=1, \qquad \frac{\partial x}{\partial \eta}=0, \qquad \frac{\partial y}{\partial \xi}=0, \qquad \frac{\partial y}{\partial \eta}=e^\eta \]
代入逆度量系数后的结果
\[ e^\eta \frac{\partial (\rho u)}{\partial \xi}+\frac{\partial (\rho v)}{\partial \eta}=0 \]
结果完全一致。
注意前面的推导过程:
因此可以认识到:
控制方程变换中的具体信息,全部由度量系数来承载。
也就是说:
一个很形象的想象:假设你负责在某个物体外部进行数值计算,而另一个人负责网格生成。
那么:
因为对于在计算平面中求解流动问题而言,
度量项已经包含了你所需的全部几何变换信息。
先看一个简单问题。考虑图示的扩张管道(divergent duct)内流动。
其中:
对于这个流动问题,在物理平面中采用简单矩形网格并不合适。
因此,需要构造曲线网格(curvilinear grid)。
绘制曲线网格,使得:
这样,网格就能精确贴合边界。
\[ y_s=f(x) \]
则如下变换可将其映射为 \((\xi,\eta)\) 空间中的矩形网格:
\[ \xi=x, \qquad \eta=\frac{y}{y_s},\qquad \text{其中 } y_s=f(x) \]
例如,在物理平面中考虑点 \(d\),其位置满足
\[ y=y_d=y_s(x_d) \]
将其代入式 (5.66),得
\[ \eta_d=\frac{y_d}{y_s}=\frac{y_s(x_d)}{y_s(x_d)}=1 \]
因此,在计算平面中,点 \(d\) 位于
\[ \eta=\eta_d=1 \]
这说明:上边界上的这个点被映射到了计算平面中的一条水平直线 \(\eta=1\) 上。
再看物理平面中的点 \(c\),其纵坐标为
\[ y=y_c=y_s(x_c) \]
显然它在物理平面中的纵坐标与点 \(d\) 不同,也即
\[ y_c>y_d \]
但将 \(y_c\) 代入可得
\[ \eta_c=\frac{y_c}{y_s}=\frac{y_s(x_c)}{y_s(x_c)}=1 \]
所以,在计算平面中,点 \(c\) 也位于
\[ \eta=\eta_c=1 \]
由上面的讨论可知:
这正是贴体坐标的核心思想:👉 复杂曲边界在计算平面中被映射成规则的坐标线。
上述内容给出了一个简单的边界拟合坐标系示例。一个更复杂的例子如图所示。考虑图中翼型形状。在该翼型周围构造一个曲线坐标系,其中一条坐标线
\[
\eta = \eta_1 = \text{常数}
\]
位于翼型表面上。

外边界为: \[ \eta = \eta_2 = \text{常数} \]
记为 \(\Gamma_2\)
👉 因此:网格贴合边界 → 贴体坐标系(boundary-fitted coordinate system)

从内边界向外发散的曲线满足:
\[ \xi = \text{常数} \]
例如:
👉 每条 \(\xi\) 曲线可以人为赋值

基本思路 将物理网格画在笛卡尔坐标 \((x,y)\) 上:
\[ (x,y)\ \text{在}\ \Gamma_1\ \text{已知} \]
\[ (x,y)\ \text{在}\ \Gamma_2\ \text{已知} \]
👉 这构成一个边值问题(boundary-value problem)
采用椭圆型偏微分方程定义坐标变换:
Laplace 方程
\[ \frac{\partial^2 \xi}{\partial x^2} + \frac{\partial^2 \xi}{\partial y^2} = 0 \]
\[ \frac{\partial^2 \eta}{\partial x^2} + \frac{\partial^2 \eta}{\partial y^2} = 0 \]
反变换(求 \(x,y\))\(x = x(\xi,\eta), \quad y = y(\xi,\eta)\)
得到:
\[ \alpha \frac{\partial^2 x}{\partial \xi^2}- 2\beta \frac{\partial^2 x}{\partial \xi \partial \eta}+ \gamma \frac{\partial^2 x}{\partial \eta^2} = 0 \]
\[ \alpha \frac{\partial^2 y}{\partial \xi^2}- 2\beta \frac{\partial^2 y}{\partial \xi \partial \eta}+ \gamma \frac{\partial^2 y}{\partial \eta^2} = 0 \]
系数定义
\[ \alpha = \left(\frac{\partial x}{\partial \eta}\right)^2 + \left(\frac{\partial y}{\partial \eta}\right)^2 \]
\[ \beta = \frac{\partial x}{\partial \xi}\frac{\partial x}{\partial \eta}+ \frac{\partial y}{\partial \xi}\frac{\partial y}{\partial \eta} \]
\[ \gamma = \left(\frac{\partial x}{\partial \xi}\right)^2 + \left(\frac{\partial y}{\partial \xi}\right)^2 \]
为了保证问题可解:👉 必须在整个边界上给定条件
包括:
C型网格切割
通过在尾缘切开:
👉 形成矩形计算域
对应关系:
\[ (\xi_i, \eta_j) \leftrightarrow (x_i, y_j) \]
数值求解方法
椭圆型 PDE常用方法:
\[ \left(\frac{\partial \xi}{\partial x}\right)_{i,j}=\frac{\xi_{i+1,j} - \xi_{i-1,j}}{x_{i+1,j} - x_{i-1,j}} \]
在流场中:
平板边界层示例
边界层厚度:
\[ \delta = \delta(x) \]
若网格均匀:
| 方法 | 特点 |
|---|---|
| 拉伸网格 | 预先生成,固定 |
| 椭圆网格 | 平滑生成,与流动无关 |
| 自适应网格 | 随流场变化动态调整 |
优势
一个典型自适应变换,网格步长定义为:
\[ \Delta x = \frac{B\,\Delta \xi}{1 + b\left(\frac{\partial g}{\partial x}\right)} \]
\[ \Delta y = \frac{C\,\Delta \eta}{1 + c\left(\frac{\partial g}{\partial y}\right)} \]
其中:
网格随时间演化
由于:
\[ \frac{\partial g}{\partial x},\quad \frac{\partial g}{\partial y} \]
随时间变化:👉 网格点位置也随时间变化
设第 \(N\) 个网格点:
\[ x_N^t = \sum_{i=1}^{N} (\Delta x)_i^t \]
下一时刻:
\[ x_N^{t+\Delta t} = \sum_{i=1}^{N} (\Delta x)_i^{t+\Delta t} \]
网格随时间演化
类似地:
\[ y_M^t = \sum_{i=1}^{M} (\Delta y)_i^t \]
\[ y_M^{t+\Delta t} = \sum_{i=1}^{M} (\Delta y)_i^{t+\Delta t} \]
时间导数(动网格)
\[ \left(\frac{\partial x}{\partial t}\right)_{\xi,\eta}=\frac{x_N^{t+\Delta t} - x_N^t}{\Delta t} \]
\[ \left(\frac{\partial y}{\partial t}\right)_{\xi,\eta}=\frac{y_M^{t+\Delta t} - y_M^t}{\Delta t} \]
设:
\[ x = x(\xi,\eta,t), \qquad y = y(\xi,\eta,t) \]
则:
\[ dx = \left(\frac{\partial x}{\partial \xi}\right)d\xi+ \left(\frac{\partial x}{\partial \eta}\right)d\eta+ \left(\frac{\partial x}{\partial t}\right)dt, \qquad dy = \left(\frac{\partial y}{\partial \xi}\right)d\xi+ \left(\frac{\partial y}{\partial \eta}\right)d\eta+ \left(\frac{\partial y}{\partial t}\right)dt \]
时间度量项
\[ \frac{\partial \xi}{\partial t} \neq 0, \quad \frac{\partial \eta}{\partial t} \neq 0 \]
👉 与固定网格不同!
\[ \frac{\partial \xi}{\partial t}=-\frac{1}{J}\left[\left(\frac{\partial x}{\partial t}\right)\left(\frac{\partial y}{\partial \eta}\right)-\left(\frac{\partial y}{\partial t}\right)\left(\frac{\partial x}{\partial \eta}\right)\right] \]
\[ \frac{\partial \eta}{\partial t}=\frac{1}{J}\left[\left(\frac{\partial x}{\partial t}\right)\left(\frac{\partial y}{\partial \xi}\right)-\left(\frac{\partial y}{\partial t}\right)\left(\frac{\partial x}{\partial \xi}\right)\right] \]
其中:
\[ J = \frac{\partial x}{\partial \xi}\frac{\partial y}{\partial \eta}-\frac{\partial x}{\partial \eta}\frac{\partial y}{\partial \xi} \]
| 网格类型 | 时间项 |
|---|---|
| 固定网格 | \(\partial \xi/\partial t = 0\) |
| 自适应网格 | \(\partial \xi/\partial t \neq 0\) |
👉 这意味着:控制方程中必须包含网格运动项
网格生成是 CFD 中:非常活跃的研究方向 例如:
F-20 战斗机:几何复杂、需要多块网格(multi-block)
现代方法通常结合:椭圆网格、自适应网格、多块结构
典型特征:网格在高梯度区域高度聚集、表面附近分辨率高、远场较稀疏
网格技术发展方向:
在计算流体力学(CFD)中,网格质量直接决定计算精度与稳定性
👉 适合: - 初学者 - 常规工程问题
👉 优点: - 网格质量高 - 可控性强
👉 缺点: - 学习曲线陡
👉 适合: - 高质量CFD计算 - 转捩 / 边界层问题
👉 优点: - 非常适合: - 高超声速 - 转捩问题 - DNS / LES
👉 缺点: - 商业授权较贵
👉 特点: - 自动网格(polyhedral) - 对复杂几何非常友好
👉 优点: - 自动化程度高 - 工程效率高
👉 缺点: - 网格控制不如 ICEM 精细
👉 特点: - 自动化网格生成 - Mosaic / Poly 网格
👉 适合: - 工程快速计算 - 复杂几何
👉 优点: - 免费 - 可编程 - 适合科研
👉 缺点: - GUI较简单 - 大规模问题略弱
👉 优点: - 完全开源 - 与求解器无缝耦合
👉 缺点: - 调参复杂 - 学习成本高
👉 特点: - 高质量 O/C 网格 - 多块结构
| 软件 | 类型 | 优势 | 适用场景 |
|---|---|---|---|
| ANSYS Meshing | 商业 | 易用 | 入门/工程 |
| ICEM CFD | 商业 | 高质量 | 精细CFD |
| Pointwise | 商业 | 极高质量 | 科研/DNS |
| Star-CCM+ | 商业 | 自动化 | 工程 |
| Gmsh | 开源 | 灵活 | 科研 |
| OpenFOAM | 开源 | 完整体系 | 定制开发 |