流体力学核心贯通课 II

2025–2026 学年第二学期






北京理工大学 空天科学与技术学院

任杰

第4章 计算进阶

  1. John D. Anderson Computational Fluid Dynamics: The Basics with Applications
    McGraw-Hill, 1995

  2. 任玉新 陈海昕
    计算流体力学基础 清华大学出版社,2006

  3. 张德良
    计算流体力学教程 高等教育出版社,2010

  4. 蔡庆东
    计算流体动力学 北京大学本科生研究生专业基础课讲义,2018


真正理解 CFD 的最好方式,是自己实现数值算法并运行计算 - John D. Anderson

引言

前面章节已经介绍了 CFD 的基本思想和若干典型算法。

这些方法的特点是:

算法形式相对简单,便于入门理解;
同时又具有足够实用性,可以求解一批典型流动问题。

但是,现代 CFD 中大量算法更加复杂,也更高效。

它们往往来自:

  • 应用数学方法的发展
  • 对旧格式缺陷的修正
  • 对激波、间断和复杂边界问题的需求
  • 对计算效率、稳定性和鲁棒性的追求

CONSERVATION FORM REVISITED

重新认识守恒形式

守恒形式不仅是“写法问题”,
它直接关系到激波捕捉、方程类型、特征传播和现代数值格式构造。

守恒形式再讨论

为什么重新讨论守恒形式?❶

现代 CFD 算法大量建立在控制方程的数学结构之上。

尤其在高速流和激波问题中,通常采用:

守恒形式

原因包括:

  • 激波问题必须满足守恒律
  • 守恒形式更适合激波捕捉
  • 标准 CFD 程序多基于 Euler 或 Navier–Stokes 方程守恒形式
  • 控制方程的特征结构可由 Jacobian 矩阵揭示

非守恒形式在光滑区域可以等价,但在含激波或间断的问题中,往往会导致错误的跳跃关系。

守恒形式再讨论

通用守恒形式 ❷

三维控制方程可写成一般形式:

\[ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} +\frac{\partial G}{\partial y} +\frac{\partial H}{\partial z} =J \]

其中:

  • \(U\):守恒变量向量
  • \(F,G,H\):三个方向上的通量向量
  • \(J\):源项向量

对于 Euler 或 Navier–Stokes 方程,通量通常不是 \(U\) 的线性函数,这里写做:

\[ F=F(U),\qquad G=G(U),\qquad H=H(U) \]

守恒形式再讨论

从守恒形式到拟线性形式 ❸

由于:

\[ F=F(U),\qquad G=G(U),\qquad H=H(U) \]

根据链式法则:

\[ \frac{\partial F}{\partial x}= \frac{\partial F}{\partial U} \frac{\partial U}{\partial x} \]

类似地:

\[ \frac{\partial G}{\partial y}= \frac{\partial G}{\partial U} \frac{\partial U}{\partial y}, \qquad \frac{\partial H}{\partial z}= \frac{\partial H}{\partial U} \frac{\partial U}{\partial z} \]

于是控制方程可写为:

\[ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial U}\frac{\partial U}{\partial x} +\frac{\partial G}{\partial U}\frac{\partial U}{\partial y} +\frac{\partial H}{\partial U}\frac{\partial U}{\partial z} =J \]

守恒形式再讨论

通量 Jacobian 矩阵 ❹

定义:

\[ A\equiv\frac{\partial F}{\partial U}, \qquad B\equiv\frac{\partial G}{\partial U}, \qquad C\equiv\frac{\partial H}{\partial U} \]

则控制方程写成:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial U}{\partial t} +A\frac{\partial U}{\partial x} +B\frac{\partial U}{\partial y} +C\frac{\partial U}{\partial z} =J } $} \]

这里的 \(A,B,C\) 称为通量向量的 Jacobian 矩阵。

注意:这里的 Jacobian 不是坐标变换中的 Jacobian。
这里表示通量向量对守恒变量向量的导数。

守恒形式再讨论

为什么 Jacobian 重要?❺

Jacobian 矩阵的重要性体现在两个方面:

数学结构

Jacobian 矩阵的特征值决定方程组的数学性质。

  • 双曲型
  • 抛物型
  • 椭圆型
  • 混合型

物理传播

Jacobian 矩阵的特征值给出信息在流场中的传播速度和传播方向。

  • 对流传播
  • 声波传播
  • 特征线方向

守恒形式再讨论|例:一维无粘流

一维 Euler 方程 ❶

为简化讨论,考虑一维非定常无粘流:

\[ \frac{\partial \rho}{\partial t} +\frac{\partial(\rho u)}{\partial x} =0 \]

\[ \frac{\partial(\rho u)}{\partial t} +\frac{\partial(\rho u^2+p)}{\partial x} =0 \]

\[ \frac{\partial(\rho E)}{\partial t} +\frac{\partial(\rho uE+pu)}{\partial x} =0 \]

写成向量形式:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} =0 } $} \]

守恒形式再讨论|例:一维无粘流

引入紧凑变量记号 ❷

守恒变量为:

\[ U= \begin{Bmatrix} \rho\\ \rho u\\ \rho E \end{Bmatrix} \triangleq\begin{Bmatrix} \rho\\ m\\ \varepsilon \end{Bmatrix} \]

通量向量为:

\[ F= \begin{Bmatrix} \rho u\\ \rho u^2+p\\ \rho uE+pu \end{Bmatrix}= \begin{Bmatrix} m\\ \dfrac{m^2}{\rho}+p\\ \dfrac{m}{\rho}(\varepsilon+p) \end{Bmatrix} \]

其中:

\[ E=e+\frac{u^2}{2} \]

\(E\) 为单位质量总能量,\(e\) 为单位质量内能。

守恒形式再讨论|例:一维无粘流

消去压力项 ❸

理想气体状态方程为:

\[ p=(\gamma-1)\rho e \]

又因为:

\[ \varepsilon=\rho E =\rho\left(e+\frac{u^2}{2}\right) =\rho e+\frac{\rho u^2}{2} \]

\(m=\rho u\) 得:

\[ \rho e=\varepsilon-\frac{m^2}{2\rho} \]

因此:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ p=(\gamma-1)\left(\varepsilon-\frac{m^2}{2\rho}\right) } $} \]

守恒形式再讨论|例:一维无粘流

通量写成守恒变量函数 ❹

将压力表达式代入通量向量:

\[ F= \begin{Bmatrix} \rho u\\ \rho u^2+p\\ \rho uE+pu \end{Bmatrix}= \begin{Bmatrix} m\\ \dfrac{m^2}{\rho}+p\\ \dfrac{m}{\rho}(\varepsilon+p) \end{Bmatrix}= \begin{Bmatrix} m\\[6pt] \dfrac{m^2}{\rho} +(\gamma-1)\left(\varepsilon-\dfrac{m^2}{2\rho}\right)\\[8pt] \dfrac{m}{\rho} \left[ \varepsilon +(\gamma-1)\left(\varepsilon-\dfrac{m^2}{2\rho}\right) \right] \end{Bmatrix} \]

此时,通量已经完全写成 \(U=(\rho,m,\varepsilon)^T\) 的函数:

\[ F=F(U) \]

因此可以计算一维通量 Jacobian:

\[ A=\frac{\partial F}{\partial U} \]

守恒形式再讨论|例:一维无粘流

Jacobian 矩阵定义 ❺

因为:

\[ U= \begin{Bmatrix} \rho\\ m\\ \varepsilon \end{Bmatrix}, \qquad \frac{\partial U}{\partial t}= \begin{Bmatrix} \dfrac{\partial \rho}{\partial t}\\[6pt] \dfrac{\partial m}{\partial t}\\[6pt] \dfrac{\partial \varepsilon}{\partial t} \end{Bmatrix}, \qquad \frac{\partial U}{\partial x}= \begin{Bmatrix} \dfrac{\partial \rho}{\partial x}\\[6pt] \dfrac{\partial m}{\partial x}\\[6pt] \dfrac{\partial \varepsilon}{\partial x} \end{Bmatrix} \]

Jacobian 矩阵定义为:

\[ A=\frac{\partial F}{\partial U}= \begin{bmatrix} \dfrac{\partial F_1}{\partial \rho} & \dfrac{\partial F_1}{\partial m} & \dfrac{\partial F_1}{\partial \varepsilon}\\[8pt] \dfrac{\partial F_2}{\partial \rho} & \dfrac{\partial F_2}{\partial m} & \dfrac{\partial F_2}{\partial \varepsilon}\\[8pt] \dfrac{\partial F_3}{\partial \rho} & \dfrac{\partial F_3}{\partial m} & \dfrac{\partial F_3}{\partial \varepsilon} \end{bmatrix} \]

守恒形式再讨论|例:一维无粘流

Jacobian 矩阵结果 ❻

逐项求导后,可得:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ A=\frac{\partial F}{\partial U}= \begin{bmatrix} \dfrac{\partial F_1}{\partial \rho} & \dfrac{\partial F_1}{\partial m} & \dfrac{\partial F_1}{\partial \varepsilon}\\[8pt] \dfrac{\partial F_2}{\partial \rho} & \dfrac{\partial F_2}{\partial m} & \dfrac{\partial F_2}{\partial \varepsilon}\\[8pt] \dfrac{\partial F_3}{\partial \rho} & \dfrac{\partial F_3}{\partial m} & \dfrac{\partial F_3}{\partial \varepsilon} \end{bmatrix}= \begin{bmatrix} 0 & 1 & 0\\[6pt] (\gamma-3)\dfrac{u^2}{2} & (3-\gamma)u & \gamma-1\\[8pt] (\gamma-1)u^3-\gamma uE & \gamma E-\dfrac{3}{2}(\gamma-1)u^2 & \gamma u \end{bmatrix} } $} \]

其中:

\[ u=\frac{m}{\rho}, \qquad E=\frac{\varepsilon}{\rho} \]

这个矩阵并不是为了“多写一个复杂形式”,而是为了揭示一维 Euler 方程的信息传播结构。

守恒形式再讨论|例:一维无粘流

拟线性形式 ❼

一维 Euler 方程可以写成:

\[ \frac{\partial U}{\partial t} +A\frac{\partial U}{\partial x} =0 \]

展开为:

\[ \frac{\partial}{\partial t} \begin{Bmatrix} \rho\\ \rho u\\ \rho E \end{Bmatrix} + A \frac{\partial}{\partial x} \begin{Bmatrix} \rho\\ \rho u\\ \rho E \end{Bmatrix} =0 \]

虽然形式发生了变化,但并没有丢失原方程信息。
Jacobian 拟线性形式与原守恒形式是等价的。

因此:

Jacobian 拟线性形式保留了原守恒方程的全部内容

守恒形式再讨论|例:一维无粘流

Jacobian 矩阵的特征值 ❽

特征值由下式确定:

\[ |A-\lambda I|=0 \]

对于一维 Euler 方程,特征值为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \lambda_1=u,\qquad \lambda_2=u+a,\qquad \lambda_3=u-a } $} \]

其中 \(a\) 为声速。

由于三个特征值均为实数,因此一维无粘 Euler 方程是:

双曲型方程组

守恒形式再讨论|例:一维无粘流

特征值的物理意义 ❾

三个特征值代表三类信息传播速度:

\(\lambda_1=u\)

随流体质点传播

\[ \frac{dx}{dt}=u \]

对应流体微团的运动轨迹。

\(\lambda_2=u+a\)

相对流体向右传播的声波

\[ \frac{dx}{dt}=u+a \]

对应右行 Mach 波。

\(\lambda_3=u-a\)

相对流体向左传播的声波

\[ \frac{dx}{dt}=u-a \]

对应左行 Mach 波。

守恒形式再讨论|例:一维无粘流

\(x-t\) 平面中的特征线 ❿

\(x-t\) 平面中,特征线斜率为:

\[ \frac{dt}{dx}=\frac{1}{\lambda} \]

因此三族特征线为:

\[ \frac{dt}{dx}=\frac{1}{u}, \qquad \frac{dt}{dx}=\frac{1}{u+a}, \qquad \frac{dt}{dx}=\frac{1}{u-a} \]

Jacobian 矩阵的特征值给出了信息在流场中的传播方向。
这正是现代 CFD 中构造迎风格式、特征分解和通量分裂的基础。

课堂互动:Jacobian 特征值说明什么?

对一维 Euler 方程,通量 Jacobian 的三个特征值为:

\[ \lambda_1=u,\qquad \lambda_2=u+a,\qquad \lambda_3=u-a \]

它们主要说明什么?

A. 数值格式的截断误差大小
B. 信息在流场中的传播速度和方向
C. 网格生成中的坐标变换关系
D. 黏性项的离散精度

参考判断:B

Jacobian 的特征值决定特征传播速度,是理解双曲型流动方程和现代迎风格式的基础。

激波管问题

一个最简单的可压缩流动实验 ❶

激波管初始时由隔膜分成左右两部分:

  • 左侧:高压、高密度气体
  • 右侧:低压、低密度气体
  • 隔膜瞬间移除后,气体开始重新分布

一个初始间断,不会一直保持一个间断,而会分裂成几种不同性质的波。

初始条件写成:

\[ (\rho,u,p)(x,0)= \begin{cases} (\rho_L,u_L,p_L),&x<x_0,\\ (\rho_R,u_R,p_R),&x>x_0. \end{cases} \]

典型 Sod 激波管:

\[ (\rho_L,u_L,p_L)=(1,0,1),\qquad (\rho_R,u_R,p_R)=(0.125,0,0.1) \]

💻 代码演示 shock_tube_fd_exact_demo.m

激波管问题

拿掉隔膜后发生什么?❷

隔膜移除后,左侧高压气体向右运动,右侧低压气体被推动和压缩。

这一过程不是简单地“整体流过去”,而是会产生三种典型结构:

  • 左侧形成膨胀波
  • 中间形成接触间断
  • 右侧形成激波

Sod 激波管的典型波系:左膨胀波、接触间断、右激波。

可以先用一句话理解:

左边释放,右边压缩,中间留下物质分界面。

左侧高压气体释放能量,因此产生膨胀波。

右侧低压气体被压缩,因此产生激波。

左右两团气体虽然被带动向同一方向运动,但密度一般不同,因此中间留下接触间断。

激波管问题

先认识四个区域 ❸

隔膜移除后,流场不再只有左、右两个初始状态。

三种波会把流场分成四个主要区域:

  • 左初始区:\(L\)
  • 左中间区:\(L^*\)
  • 右中间区:\(R^*\)
  • 右初始区:\(R\)

先把区域分清楚,再分别理解连接这些区域的波。

四个区域之间的连接关系:

\[ L \quad \longrightarrow \quad L^* \quad \longrightarrow \quad R^* \quad \longrightarrow \quad R \]

对于 Sod 激波管:

\[ L \xrightarrow{\text{膨胀波}} L^* \xrightarrow{\text{接触间断}} R^* \xrightarrow{\text{激波}} R \]

激波管问题

中间两个区域有什么特点?❹

\(L^*\)\(R^*\) 是隔膜撤去后形成的中间状态。

它们由接触间断分开。

接触间断两侧的速度和压力相同,但密度一般不同。

接触间断两侧满足:

\[ p_L^*=p_R^*=p^* \]

\[ u_L^*=u_R^*=u^* \]

但是:

\[ \rho_L^*\ne\rho_R^* \]

精确解的核心量是中间压力 \(p^*\) 和中间速度 \(u^*\)。本节课只需要知道它们代表中间区域的共同压力和速度。

激波管问题

控制方程:一维 Euler 方程 ❺

守恒变量:

\[ \mathbf U= \begin{bmatrix} \rho\\ \rho u\\ \rho E \end{bmatrix} \]

通量:

\[ \mathbf F= \begin{bmatrix} \rho u\\ \rho u^2+p\\ u(\rho E+p) \end{bmatrix} \]

一维 Euler 方程守恒形式为:

\[ \frac{\partial \mathbf U}{\partial t} +\frac{\partial \mathbf F(\mathbf U)}{\partial x}=0 \]

其中:

\[ E=e+\frac{u^2}{2},\qquad p=(\gamma-1)\rho e \]

激波管问题必须重视守恒形式,因为激波处变量会发生跳跃,普通光滑函数意义下的微分方程不再足够。

激波管问题

三条特征速度 ❻

一维 Euler 方程有三条特征速度:

\[ \lambda_1=u-a,\qquad \lambda_2=u,\qquad \lambda_3=u+a \]

其中:

\[ a=\sqrt{\gamma p/\rho} \]

为当地声速。

三条特征速度的物理意义:

特征速度 物理含义 对应波族
(u-a) 相对流体向左传播的声学信息 1-波
(u) 随流体一起运动的物质信息 2-波
(u+a) 相对流体向右传播的声学信息 3-波

激波管问题

三种波与三族特征的对应 ❼

三种波与三族特征不是简单的“一条线对应一种波”,而是:

第一族和第三族是声波族,可以形成膨胀波,也可以形成激波。

第二族是物质波族,对应接触间断。

对 Sod 激波管,通常对应关系为:

连接区域 波结构 对应特征族 典型表现
\(L\to L^*\) 左膨胀波 1-族,\(u-a\) 连续展开
\(L^*\to R^*\) 接触间断 2-族,\(u\) 密度跳跃
\(R^*\to R\) 右激波 3-族,\(u+a\) 压缩间断

激波和膨胀波都属于声波族;区别在于一个是压缩,一个是释放。

激波管问题

接触间断从哪里来?❽

移除隔膜后,左侧气体和右侧气体都会被加速到中间速度附近。

但是它们来自不同初始区域,密度一般不同。

因此,中间会保留一个物质分界面。

接触间断不是压力波,而是两团不同气体的分界面。

接触间断连接 \(L^*\)\(R^*\)

它沿流体速度运动:

\[ \frac{dx}{dt}=u^* \]

跨过接触间断:

\[ p_L^*=p_R^*,\qquad u_L^*=u_R^*,\qquad \rho_L^*\ne\rho_R^* \]

激波管问题

接触间断的变量特征 ❾

接触间断处,压力和速度必须连续。

如果压力不连续,界面两侧受力不同,界面会继续被加速。

如果速度不连续,两侧物质会相互穿透,这与接触面的定义不符。

变量 接触间断两侧 说明
压力 \(p\) 连续 两侧力平衡
速度 \(u\) 连续 两侧一起运动
密度 \(\rho\) 可以跳跃 两团气体来源不同
温度 \(T\) 可以跳跃 由状态方程决定
可以跳跃 物质性质不同

判断接触间断最简单的方法:密度有跳跃,但压力和速度没有跳跃。

激波管问题

激波从哪里来?❿

右侧低压气体受到中间高压区推动,发生压缩。

对于非线性可压缩流动,压缩扰动在传播过程中会逐渐陡化。

后面的压缩扰动可能追上前面的扰动,最终形成强间断。

压缩波不断汇聚,最后形成激波。

右激波连接 \(R^*\)\(R\)

激波跨越前后通常满足:

  • 压力跳跃
  • 密度跳跃
  • 速度跳跃
  • 温度跳跃
  • 熵增加

激波不是普通光滑解,而是守恒律意义下的弱解。

激波管问题

激波的跳跃条件 ⓫

激波处变量不连续,因此不能只依赖光滑意义下的微分方程。

但是质量、动量和能量仍然必须守恒。

所以激波两侧状态必须满足 Rankine–Hugoniot 条件。

整体写法:

\[ s(\mathbf U_R-\mathbf U_L)=\mathbf F_R-\mathbf F_L \]

质量跳跃条件:

\[ s(\rho_R-\rho_L)=\rho_Ru_R-\rho_Lu_L \]

动量跳跃条件:

\[ s(\rho_Ru_R-\rho_Lu_L)= \rho_Ru_R^2+p_R-\rho_Lu_L^2-p_L \]

这里的 (s) 是激波传播速度,不是简单的 (u+a)。它由激波两侧守恒关系决定。

激波管问题

熵条件的作用 ⓬

仅满足 Rankine–Hugoniot 条件还不够。

有些间断在数学上满足守恒跳跃条件,但物理上不允许。

典型例子是膨胀激波。

膨胀激波意味着熵降低,违反热力学第二定律。

物理激波要求:

\[ \Delta s>0 \]

也就是说,气体经过激波后熵增加。

守恒条件决定“能不能这样跳”;熵条件决定“物理上允不允许这样跳”。

激波管问题

膨胀波从哪里来?⓭

左侧高压气体向右运动后,左侧区域压力降低。

这一过程不是压缩,而是释放和展开。

因此,左侧产生的是膨胀波,而不是激波。

膨胀波不是间断,而是一段连续展开的区域。

左膨胀波连接 \(L\)\(L^*\)

它对应第一族声学信息:

\[ \lambda_1=u-a \]

膨胀波内部变量连续变化:

\[ \rho,\quad u,\quad p \]

都不是突然跳跃,而是逐渐变化。

激波管问题

膨胀波的变量特征 ⓮

膨胀波可以理解为高压气体向外“松开”的过程。

在这个区域内:

  • 压力逐渐降低
  • 密度逐渐降低
  • 速度逐渐增加
  • 变化是连续的

压缩容易形成激波;释放通常形成连续膨胀波。

对比 膨胀波 激波
过程 释放 压缩
变量变化 连续变化 突然跳跃
熵变 近似等熵 熵增加
形态 一段区域 一个间断面

激波管问题

如何判断激波还是膨胀波?⓯

对某一侧初始状态 (K=L,R),如果:

\[ p^*<p_K \]

说明这一侧气体压力降低,形成膨胀波。

如果:

\[ p^*>p_K \]

说明这一侧气体被压缩,形成激波。

对 Sod 激波管,通常有 \(p^*<p_L\),所以左侧是膨胀波;同时 \(p^*>p_R\),所以右侧是激波。

激波管问题

小结

❶ 隔膜移除后,高压气体释放,低压气体被压缩。
❷ 三种波把流场分为 \(L,L^*,R^*,R\) 四个区域。
❸ 一维 Euler 方程有三族特征速度:\(u-a\)\(u\)\(u+a\)
\(L\to L^*\) 通常是膨胀波,\(L^*\to R^*\) 是接触间断,\(R^*\to R\) 通常是激波。
❺ 激波满足 Rankine–Hugoniot 条件,并且要满足熵条件。
❻ 膨胀波是连续变化区域,接触间断处压力和速度连续但密度可以跳跃。

掌握激波、接触间断和膨胀波的物理来源,再学习 Godunov、Roe、HLLC、WENO 等方法会自然很多。

延伸阅读
建议有兴趣的同学课后继续阅读 E. F. Toro 的
Riemann Solvers and Numerical Methods for Fluid Dynamics
该书系统介绍了 Riemann 问题、Godunov 方法、Roe 格式、HLL/HLLC 格式以及 TVD/WENO 等高分辨率方法,是学习可压缩流动数值方法的重要参考书。

💻 代码演示 riemann2d_euler_contour_demo.m

Godunov 方法简介

从“界面问题”构造数值通量 ❶

Godunov 方法的核心思想是:

把每个网格界面附近看作一个局部 Riemann 问题, 通过界面处的波传播来构造数值通量。

在一个时间步内,数值解通常近似为分片常数:

  • 每个单元内部变量为常数、相邻单元之间存在跳跃
  • 每个界面自然形成一个局部间断

设界面两侧状态为:\(U_L,\quad U_R\),则界面附近可看作局部 Riemann 问题:

\[ U(x,0)= \begin{cases} U_L, & x<0\\ U_R, & x>0 \end{cases} \]

Godunov 方法就是利用这个局部问题的解,本质上是一种迎风思想,因为 Riemann 解自动包含了信息传播方向。

实际计算中,精确 Riemann 解通常代价较高,因此常用近似 Riemann 求解器:Roe、Osher、HLL、HLLC、AUSM 等。

UPWIND SCHEMES: FLUX VECTOR SPLITTING

迎风格式:Steger–Warming 通量向量分裂

数值格式不仅要逼近微分方程,
还要尊重流动中信息传播的方向。

Characteristics · Domain of dependence · Upwind differencing · Flux splitting

迎风格式:通量向量分裂

为什么要分裂通量? ❶

对于一维 Euler 方程:

\[ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} =0 \]

通量 \(F\) 中同时包含不同传播方向的信息。

如果所有信息都用同一个差分方向处理,就无法体现流动中的上游影响关系。
通量分裂的目的,就是把向右传播和向左传播的信息分开。

因此可以写成:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ F=F^+ + F^- } $} \]

其中:

  • \(F^+\):与正特征值相关,信息向右传播
  • \(F^-\):与负特征值相关,信息向左传播

迎风格式:通量向量分裂

从特征结构判断传播方向 ❷

设通量 Jacobian 为:

\[ A=\frac{\partial F}{\partial U} \]

\(A\) 可对角化,则有:

\[ A=T\Lambda T^{-1} \]

其中:

\[ \Lambda= \begin{bmatrix} \lambda_1 & 0 & 0\\ 0 & \lambda_2 & 0\\ 0 & 0 & \lambda_3 \end{bmatrix} \]

对于一维 Euler 方程:

\[ \lambda_1=u,\qquad \lambda_2=u+c,\qquad \lambda_3=u-c \]

特征值的正负号,决定信息向哪个方向传播。

Steger–Warming 分裂

特征值的正负分裂 ❸

Steger–Warming 分裂的关键,是把每个特征值拆成正、负两部分:

\[ \lambda^+=\frac{\lambda+|\lambda|}{2}, \qquad \lambda^-=\frac{\lambda-|\lambda|}{2} \]

于是:

\[ \lambda=\lambda^++\lambda^-, \qquad \lambda^+\ge0, \qquad \lambda^-\le0 \]

对应关系为:

\(\lambda>0\)

\[ \lambda^+=\lambda,\qquad \lambda^-=0 \]

信息向右传播。

\(\lambda<0\)

\[ \lambda^+=0,\qquad \lambda^-=\lambda \]

信息向左传播。

Steger–Warming 分裂

从特征值分裂到矩阵分裂 ❹

将特征值矩阵分为:

\[ \Lambda=\Lambda^++\Lambda^- \]

其中:

\[ \Lambda^+=\operatorname{diag}(\lambda_1^+,\lambda_2^+,\lambda_3^+), \qquad \Lambda^-=\operatorname{diag}(\lambda_1^-,\lambda_2^-,\lambda_3^-) \]

由:

\[ A=T\Lambda T^{-1} \]

定义:

\[ A^+=T\Lambda^+T^{-1}, \qquad A^-=T\Lambda^-T^{-1} \]

于是:

\[ A=A^++A^- \]

Steger–Warming 分裂本质上是在特征空间中做迎风分裂。

Steger–Warming 分裂

从矩阵分裂到通量分裂 ❺

对于齐次 Euler 方程,通量具有齐次性,可形式上写成:

\[ F=AU \]

于是定义:

\[ F^+=A^+U, \qquad F^-=A^-U \]

从而:

\[ F=F^++F^- \]

控制方程变为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial U}{\partial t} +\frac{\partial F^+}{\partial x} +\frac{\partial F^-}{\partial x} =0 } $} \]

先分裂通量,再分别迎风离散。

Steger–Warming 分裂

迎风离散原则 ❻

由于 \(F^+\) 对应向右传播的信息,因此使用后向差分:

\[ \left(\frac{\partial F^+}{\partial x}\right)_i \approx \frac{F_i^+-F_{i-1}^+}{\Delta x} \]

由于 \(F^-\) 对应向左传播的信息,因此使用前向差分:

\[ \left(\frac{\partial F^-}{\partial x}\right)_i \approx \frac{F_{i+1}^- - F_i^-}{\Delta x} \]

半离散格式为:

\[ \frac{dU_i}{dt}= -\frac{F_i^+-F_{i-1}^+}{\Delta x} -\frac{F_{i+1}^- - F_i^-}{\Delta x} \]

正向传播的通量用后向差分,负向传播的通量用前向差分。

课堂互动

Steger–Warming 分裂的核心是什么? ❼

Steger–Warming 通量向量分裂的关键步骤是什么?

A. 对压力项加入人工粘性
B. 将特征值按正负号分裂,并据此分裂通量
C. 在所有方向上统一使用中心差分
D. 只对密度方程进行迎风处理

参考判断:B

它的核心是:
先根据 Jacobian 的特征值判断信息传播方向,
再把通量分成 \(F^+\)\(F^-\) 两部分进行迎风离散。

推荐阅读原始文献:J. L. Steger and R. F. Warming, “Flux vector splitting of the inviscid gasdynamic equations with application to finite-difference methods,” Journal of Computational Physics, 40(2), 263–293, 1981.

迎风格式:总评

一阶迎风方法的优点与不足

本节讨论的迎风格式大多是一阶方法。

一阶迎风方法的主要优点是:

  • 间断附近通常无明显振荡
  • 可获得单调解
  • 与信息传播方向一致
  • 适合激波捕捉

但它也有明显不足:

一阶迎风格式数值耗散较强,
会将激波、接触间断和剪切层过度抹宽。

因此,需要发展二阶甚至更高阶的迎风格式。

高分辨率格式

TVD:不让振荡增长

高分辨率格式的目标是:

光滑区保持高阶精度,间断附近避免非物理振荡。

为描述振荡程度,引入总变差:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ TV(u)=\sum_i |u_{i+1}-u_i| } $} \]

若数值格式满足:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ TV(u^{n+1})\le TV(u^n) } $} \]

则称为 TVD 格式:

\[ \colorbox{#9ACD32}{$\displaystyle \color{black}{ \text{Total Variation Diminishing} } $} \]

TVD 的物理含义是:数值解在推进过程中不应产生新的非物理振荡。

高分辨率格式

通量限制器的基本思想

二阶格式的风险来自高阶修正项。通量限制器的作用是:

根据局部光滑程度,决定允许多少高阶修正。

一般可写成:

\[ F_{\text{limited}}=F_{\text{1st-order}}+\phi(r)\left(F_{\text{2nd-order}}-F_{\text{1st-order}}\right) \]

其中 \(r\) 表示相邻梯度比,\(\phi(r)\) 为限制器。

典型行为是:

  • 光滑区:\(\phi(r)\approx1\),尽量使用二阶格式
  • 间断附近:\(\phi(r)\approx0\),退化为一阶迎风
  • 过渡区域:根据局部梯度自适应调节

常见限制器包括:Minmod、Superbee、Van Leer、Van Albada。

高分辨率格式的核心不是“越高阶越好”, 而是在精度和稳定性之间实现自适应平衡。

多重网格方法

为什么需要多重网格?❶

许多 CFD 计算采用迭代或时间推进方法。

在迭代过程中,误差可以分为:

  • 高频误差
  • 低频误差
  • 中间尺度误差

常规迭代方法往往有一个特点:

高频误差衰减较快,低频误差衰减较慢。

因此,即使局部振荡已经被抹平,整体误差仍可能长时间存在,导致收敛缓慢。

多重网格方法

网格尺度与误差波长 ❷

在一维网格上,误差可以看成不同波长成分的叠加。

最短波长约为:

\[ \lambda_{\min}=2\Delta x \]

最长波长约为:

\[ \lambda_{\max}=L \]

其中:

  • \(\Delta x\):网格间距
  • \(L\):计算区域长度

在细网格上看起来是低频误差的成分,
转移到粗网格后可能变成较高频误差,因而更容易被迭代过程消除。

多重网格方法

多重网格的基本思想 ❸

多重网格方法的流程可以概括为:

  1. 在细网格上进行若干步迭代,消除高频误差

  2. 将残差或误差转移到较粗网格

  3. 在粗网格上继续迭代,快速消除低频误差

  4. 将粗网格修正量插值回细网格

  5. 重复上述过程,直到细网格收敛

多重网格的关键不是“网格越粗越好”,
而是让不同尺度的误差在合适的网格上被快速消除。

多重网格方法

多重网格的优点 ❹

多重网格方法常用于加速稳态 CFD 计算。

其优点包括:

  • 显著提高收敛速度
  • 对低频误差特别有效
  • 可与显式或隐式方法结合
  • 可用于结构网格与非结构网格
  • 在工程 CFD 中应用广泛

但它也有一些实现难点:

  • 需要设计网格间转移算子
  • 边界条件处理更复杂
  • 多重网格层次需要合理构造
  • 对强激波和复杂几何问题要谨慎设计

课堂互动:为什么需要限制器?

二阶迎风格式比一阶迎风格式精度更高,为什么仍需要通量限制器?

A. 因为二阶格式一定不稳定
B. 因为二阶格式在间断附近可能产生非物理振荡
C. 因为一阶格式无法处理激波
D. 因为限制器可以消除所有数值误差

参考判断:B

限制器的作用不是简单增加耗散,
而是根据局部光滑程度自适应控制高阶修正项。

课堂互动:多重网格为什么能加速?

多重网格方法为什么可以提高稳态 CFD 计算的收敛速度?

A. 因为粗网格一定比细网格精确
B. 因为它完全不需要迭代
C. 因为不同尺度误差在不同网格上更容易被消除
D. 因为它可以避免求解控制方程

参考判断:C

细网格适合表示最终精细解,
粗网格则有助于更快消除低频误差。

CHAPTER 4

计算进阶:从格式到思想

下一步可以继续进入高分辨率格式、Riemann 求解器、隐式算法、湍流模拟与复杂几何 CFD。

Conservation · Characteristics · Upwinding · High resolution · Multigrid

PHYSICS-INFORMED NEURAL NETWORKS

物理信息神经网络:从数据拟合到方程约束

传统神经网络主要学习数据规律;
PINN 在学习数据的同时,把 控制方程、边界条件和初始条件 也写进训练目标。

物理约束神经网络:PINN

与普通神经网络的差别 ❶

普通神经网络通常学习:

\[ 输入\longrightarrow输出 \]

例如输入 \((x,t)\),输出 \(u(x,t)\)\(T(x,t)\)\(p(x,t)\)

但如果只依赖数据,可能出现两个问题:

数据有限

  • 实验数据昂贵
  • 测点数量有限
  • 噪声不可避免
  • 外推能力较弱

物理不一定满足

  • 方程残差可能很大
  • 边界条件可能被破坏
  • 守恒关系可能不严格
  • 拟合好但物理上不合理

PINN 的出发点:让神经网络不仅拟合数据,还要尽量满足物理方程。

PINN 的核心思想

把方程写进损失函数 ❷

考虑一个偏微分方程:

\[ \mathcal{N}[u](x,t)=0 \]

PINN 用神经网络近似未知解:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ u_\theta(x,t)\approx u(x,t)} $} \]

将网络输出代入控制方程,得到残差:

\[ r_\theta(x,t)=\mathcal{N}[u_\theta](x,t) \]

训练目标不只是:

\[ u_\theta\approx u_{data} \]

还要尽量满足:

\[ r_\theta\approx0 \]

PINN = 神经网络函数近似 + 物理方程残差约束。

一个简单例子

一维线性对流方程 ❸

考虑一维线性对流方程:

\[ u_t+a u_x=0 \]

它表示波形以速度 \(a\) 沿 \(x\) 方向传播。

令神经网络输出:

\[ u_\theta(x,t) \]

则方程残差为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ r_\theta=u_{\theta,t}+a u_{\theta,x} } $} \]

训练时希望在许多采样点上满足:

\[ r_\theta\approx0 \]

这里的导数不是用差分近似,而是通过神经网络的自动微分得到。

自动微分

PINN 如何计算导数?❹

传统数值方法中,导数常通过差分近似:

\[ \frac{\partial u}{\partial x}\approx\frac{u_{i+1}-u_i}{\Delta x} \]

在 PINN 中,\(u_\theta(x,t)\) 是一个可微函数,因此可以直接计算:

\[ \frac{\partial u_\theta}{\partial x},\qquad \frac{\partial u_\theta}{\partial t},\qquad \frac{\partial^2u_\theta}{\partial x^2} \]

以MATLAB语言为例,通过 dlarraydlgradient 实现自动微分。

PINN 的损失函数

PDE、初始条件和边界条件 ❺

PINN 的损失函数通常由几部分组成:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \mathcal{L}=\mathcal{L}_{data}+\lambda_f\mathcal{L}_{PDE}+\lambda_b\mathcal{L}_{BC}+\lambda_i\mathcal{L}_{IC} } $} \]

其中:

\[ \mathcal{L}_{PDE}=\frac{1}{N_f}\sum |r_\theta|^2 \]

\[ \mathcal{L}_{IC}=\frac{1}{N_i}\sum |u_\theta(x,0)-u_0(x)|^2 \]

\[ \mathcal{L}_{BC}=\frac{1}{N_b}\sum |u_\theta-u_b|^2 \]

PINN 的基本流程可以概括为:

❶ 建立网络

输入:\((x,t)\)
输出:\(u_\theta(x,t)\)

❷ 构造残差

自动微分计算导数,代入控制方程。

❸ 优化参数

最小化总损失,得到近似解。

MATLAB 演示算例

一维线性对流方程 ❻

本代码求解:

\[ u_t+a u_x=0,\qquad x\in[0,1],\quad t\in[0,1] \]

周期边界:

\[ u(0,t)=u(1,t) \]

初始条件:

\[ u(x,0)=\sin(2\pi x) \]

对应精确解:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ u(x,t)=\sin[2\pi(x-at)] } $} \]

代码中的主要训练参数为:

numEpochs = 2000;
learnRate = 1e-3;
Nf = 2500;
Ni = 160;
Nb = 160;

参数与采样点

训练点从哪里来?❼

三类训练点分别为:

x_f = rand(1,Nf);
t_f = rand(1,Nf);
x_i = linspace(0,1,Ni);
t_i = zeros(1,Ni);
u_i = exactSolution(x_i,t_i,c);
t_b = linspace(0,1,Nb);
x_b0 = zeros(1,Nb);
x_b1 = ones(1,Nb);

\(N_f\) 用于 PDE 残差,\(N_i\) 用于初始条件,\(N_b\) 用于周期边界条件。

MATLAB 自动微分写法

dlarray 与 dlfeval ❽

网络输入为:

\[ XT=\begin{bmatrix}x\\t\end{bmatrix} \]

代码中写成:

XT_f  = dlarray(single([x_f;  t_f ]),'CB');
XT_i  = dlarray(single([x_i;  t_i ]),'CB');
U_i   = dlarray(single(u_i),'CB');
XT_b0 = dlarray(single([x_b0; t_b ]),'CB');
XT_b1 = dlarray(single([x_b1; t_b ]),'CB');

其中 CB 表示: C:通道维度,这里是 \(x,t\)B:批量维度,即采样点编号

训练时必须通过:

dlfeval(@modelLoss,...)

来开启自动微分跟踪。

神经网络结构

用 MLP 表示未知函数 ❾

代码中建立网络:

net = createMLP(2,1,40,4);

含义是:

  • 输入维度为 2:对应 \(x,t\)
  • 输出维度为 1:对应 \(u_\theta\)
  • 每层 40 个神经元
  • 4 个隐藏层

网络主要由全连接层和 tanhLayer 组成:

fullyConnectedLayer
tanhLayer
fullyConnectedLayer
tanhLayer
...
fullyConnectedLayer

这里使用 tanh,是因为 PINN 需要网络输出关于输入变量可微。

损失函数实现

三个约束一起训练 ❿

在代码中,总损失为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ \mathcal{L}=\mathcal{L}_{PDE}+10\mathcal{L}_{IC}+\mathcal{L}_{BC} } $} \]

对应 MATLAB 语句:

loss = lossPDE + 10*lossIC + lossBC;

三项含义为:

  • lossPDE:约束 \(u_t+c u_x=0\)
  • lossIC:约束 \(u_\theta(x,0)=\sin(2\pi x)\)
  • lossBC:约束 \(u_\theta(0,t)=u_\theta(1,t)\)

初始条件前乘以 10,是为了加强对初始波形的约束。

PDE 残差实现

自动微分计算 \(u_x,u_t\)

modelLoss 中,先计算配点处网络输出:

u_f = forward(net,XT_f);

再计算输出对输入的导数:

grad_u = dlgradient(sum(u_f,'all'),XT_f,...
    'EnableHigherDerivatives',true);
u_x = grad_u(1,:);
u_t = grad_u(2,:);

方程残差为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ r=u_t+a u_x } $} \]

训练循环

每一轮做什么?⓬

训练循环的核心代码为:

for epoch = 1:numEpochs
    [loss,gradients,lossPDE,lossIC,lossBC] = ...
        dlfeval(@modelLoss,net,XT_f,XT_i,U_i,XT_b0,XT_b1,c);

    [net,trailingAvg,trailingAvgSq] = ...
        adamupdate(net,gradients,trailingAvg,trailingAvgSq,...
        epoch,learnRate);
end

每一轮主要做三件事:

  • 计算总损失和各项损失
  • 通过自动微分计算网络参数梯度
  • 使用 Adam 优化器更新网络参数

如果 loss 持续下降,说明网络逐渐同时满足方程、初始条件和边界条件。

结果对比

PINN 解、精确解与误差 ⓭

训练完成后,在规则网格上预测:

[X,T] = meshgrid(x,t);
XT_test = dlarray(single([X(:)'; T(:)']),'CB');
U_pred = forward(net,XT_test);

精确解为:

U_ex = exactSolution(X,T,c);

误差定义为:

\[ \colorbox{yellow}{$\displaystyle \color{black}{ e(x,t)=|u_\theta(x,t)-u(x,t)| } $} \]

与传统 CFD 的区别

离散方程与训练函数 ⓮

传统 CFD 的思路通常是:

\[ \text{先离散方程,再求解离散系统} \]

典型方法包括:

  • 有限差分
  • 有限体积
  • 有限元
  • 迎风格式
  • Godunov 方法

PINN 的思路是:

\[ \text{先构造函数近似,再用方程残差训练网络} \]

PINN 不是传统 CFD 的简单替代品,更像是一种“数据 + 方程”的建模框架。

PINN 可以做什么?

正问题、反问题与流体应用 ⓯

PINN 常见应用可以分为两类:

正问题

已知方程、参数和边界条件,求解物理场。

例如:已知 (),求 (u(x,t))。

反问题

已知部分观测数据,反推未知参数或未知项。

例如:已知 (u(x,t)),反推 ()。

流体问题中,PINN 常用于:

  • 稀疏测量重构
  • 参数反演
  • 数据同化
  • 方程发现

典型方程

从热传导到 Navier–Stokes ⓰

一维热传导方程:

\[ T_t=\alpha T_{xx} \]

PINN 残差:

\[ r_\theta=T_{\theta,t}-\alpha T_{\theta,xx} \]

Burgers 方程:

\[ u_t+u u_x=\nu u_{xx} \]

PINN 残差:

\[ r_\theta=u_{\theta,t}+u_\theta u_{\theta,x}-\nu u_{\theta,xx} \]

不可压缩 Navier–Stokes 方程:

\[ \nabla\cdot\mathbf{u}=0 \]

\[ \mathbf{u}_t+\mathbf{u}\cdot\nabla\mathbf{u} =-\frac{1}{\rho}\nabla p+\nu\nabla^2\mathbf{u} \]

PINN 的困难

不是万能求解器 ⓱

PINN 也存在明显挑战:

  • 优化困难:多个损失项量级不同,训练可能不稳定
  • 高频难学:尖锐间断和小尺度结构不容易表达
  • 守恒性不足:残差小不等于局部守恒严格满足
  • 计算代价高:高维复杂问题训练成本很高
  • 结果依赖设置:网络结构、采样点、权重和优化器都会影响结果

理解 PINN 时要避免一个误区:
它不是替代所有传统数值方法的通用工具,而是将物理方程约束引入神经网络训练的建模方法。

知识点复习

CFD模块四章围绕一个基本问题展开:

如何把流体力学方程可靠地变成计算机可求解的问题?

  • 第1章:控制方程及其数学性质
  • 第2章:离散化、误差、稳定性与网格
  • 第3章:典型时间推进格式与数值误差
  • 第4章:守恒形式、激波管与计算进阶

1. 计算流体力学的基本任务

基本对象和基本过程

CFD 研究的是流场变量在空间和时间中的分布:

\[ \rho,\quad u,\quad v,\quad w,\quad p,\quad T \]

  • 从物理问题出发
  • 建立控制方程
  • 选择离散方法
  • 给定初始条件和边界条件
  • 推进求解并分析结果

2. 控制方程的来源

三大守恒定律

流体力学控制方程来自:

  • 质量守恒
  • 动量守恒
  • 能量守恒

微分形式适合局部分析,积分形式更适合理解守恒量跨边界的变化。

\[ \frac{\partial}{\partial t}\int_\Omega U\,d\Omega + \int_{\partial\Omega} F\cdot n\,dS = \int_\Omega S\,d\Omega \]

3. 守恒型控制方程

一般形式

可压缩流动常写成守恒型:

\[ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} +\frac{\partial G}{\partial y} +\frac{\partial H}{\partial z}=S \]

  • 守恒变量统一描述质量、动量和能量
  • 通量表示守恒量的输运
  • 源项表示体力、几何变化或其他附加效应
  • 激波问题中尤其需要守恒形式

4. 守恒变量与基本变量

守恒变量

以二维 Euler 方程为例:

\[ U=\begin{bmatrix} \rho\\ \rho u\\ \rho v\\ \rho E \end{bmatrix} \]

基本变量

实际观察和物理解释常使用:

\[ \rho,\quad u,\quad v,\quad p,\quad T,\quad M \]

数值推进常针对守恒变量,后处理和边界条件常需要恢复基本变量。

5. 方程的数学性质

椭圆型、抛物型、双曲型

不同方程具有不同的信息传播方式:

  • 椭圆型:全局相互影响,典型如势流方程、Poisson 方程
  • 抛物型:时间单向推进,典型如热传导方程
  • 双曲型:沿特征方向传播,典型如波动方程和 Euler 方程

方程性质决定:

  • 初始条件和边界条件应如何给定
  • 数值格式应如何设计
  • 误差会如何传播

6. 可压缩流动中的特征速度

一维 Euler 方程

一维 Euler 方程具有三族特征速度:

\[u-a,\qquad u,\qquad u+a \]

其中 \(a\) 为声速。

  • \(u-a\):向上游传播的信息
  • \(u\):随流体运动的信息
  • \(u+a\):向下游传播的信息

特征速度影响边界条件、信息传播方向和稳定性限制。

7. 激波与 Rankine–Hugoniot 条件

激波的特点

激波是薄层内发生剧烈变化的压缩波,在宏观计算中常表现为不连续。

守恒跃迁条件

对一维守恒律:

\[ \frac{\partial U}{\partial t}+\frac{\partial F}{\partial x}=0 \]

激波速度 \(s\) 满足:

\[ s[U]=[F] \]

基本认识

激波可以是不连续的,但激波前后仍必须满足积分形式的守恒律。

8. 边界条件

边界条件的作用

边界条件决定计算区域如何与外部环境交换信息。

  • 入口边界
  • 出口边界
  • 固壁边界
  • 对称边界
  • 远场边界

亚声速边界和超声速边界的信息传播方向不同,给定变量的个数和方式也不同(回忆拉瓦尔喷管问题)。

9. 网格与离散变量

网格与离散

\[ U_i^n\approx U(x_i,t^n) \]

  • 空间步长:\(\Delta x,\Delta y,\Delta z\)
  • 时间步长:\(\Delta t\)
  • 网格点数:决定分辨率和计算量

网格越细通常越准确,但计算量更大,稳定性限制也可能更严格。

10. 有限差分离散

基本思想

用相邻网格点上的函数值近似导数。

\[ \frac{\partial u}{\partial x}\bigg|_i \approx \frac{u_{i+1}-u_i}{\Delta x} \]

\[ \frac{\partial u}{\partial x}\bigg|_i \approx \frac{u_i-u_{i-1}}{\Delta x} \]

\[ \frac{\partial u}{\partial x}\bigg|_i \approx \frac{u_{i+1}-u_{i-1}}{2\Delta x} \]

关键问题

不同差分格式具有不同的精度、耗散、色散和稳定性。

11. 显式格式与隐式格式

显式格式

新时刻未知量可以直接由旧时刻计算得到:

\[ U^{n+1}=\mathcal{L}(U^n) \]

优点是实现简单,缺点是时间步长受稳定性限制较强。

隐式格式

新时刻未知量同时出现在方程两边:

\[ A U^{n+1}=b \]

优点是稳定性较好,缺点是每一步需要求解代数方程组。

12. 截断误差与精度阶数

截断误差

将精确解代入离散格式后,剩余项称为截断误差。

精度阶数

若误差满足:

\[ \tau=O(\Delta x^p)+O(\Delta t^q) \]

则空间为 \(p\) 阶精度,时间为 \(q\) 阶精度。

基本认识

精度阶数说明误差随网格加密和时间步减小而降低的速度。

13. 相容性、稳定性与收敛性

相容性

\(\Delta x,\Delta t\to 0\) 时,离散格式应趋近原微分方程。

稳定性

计算过程中的误差不能无限增长。

收敛性

当网格加密时,数值解应趋近精确解。

14. Von Neumann 稳定性分析

基本思想

把误差分解为 Fourier 模态:

\[ \varepsilon_i^n=G^n e^{\mathrm{i}k x_i} \]

其中 \(G\) 为放大因子。

稳定性条件

若所有波数下均满足:

\[ |G|\le 1 \]

则误差不会随时间步无限放大。

适用范围

该方法主要用于线性、常系数、均匀网格问题的稳定性分析。

15. CFL 条件

定义

对于一维对流方程:

\[ \frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0 \]

CFL 数为:

\[ \mathrm{CFL}=\frac{|a|\Delta t}{\Delta x} \]

物理意义

一个时间步内,物理信息传播距离不能超过数值格式能够有效感知的范围。

基本认识

CFL 条件是很多显式格式稳定计算的必要限制。

16. 坐标变换与贴体网格

物理空间与计算空间

复杂物理区域可映射到规则计算区域:

\[ (x,y)\longleftrightarrow(\xi,\eta) \]

  • 使复杂边界与网格线对齐
  • 简化边界条件处理
  • 便于在规则计算空间中离散方程

坐标变换会引入度量项,方程形式和数值离散都需要相应处理。

17. Lax–Wendroff 方法

基本思想

Lax–Wendroff 方法利用 Taylor 展开进行时间推进,再用方程本身把时间导数转化为空间导数。

对线性对流方程

\[ \frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0 \]

典型格式为:

\[u_i^{n+1}=u_i^n-\frac{\lambda}{2}(u_{i+1}^n-u_{i-1}^n) +\frac{\lambda^2}{2}(u_{i+1}^n-2u_i^n+u_{i-1}^n) \]

其中 \(\lambda=a\Delta t/\Delta x\)

18. MacCormack 方法

预测步

以前向差分为例:

\[ \bar{u}_i=u_i^n-\frac{a\Delta t}{\Delta x}(u_{i+1}^n-u_i^n) \]

校正步

再用反向差分校正:

\[u_i^{n+1}=\frac{1}{2}\left[u_i^n+\bar{u}_i-\frac{a\Delta t}{\Delta x}(\bar{u}_i-\bar{u}_{i-1})\right] \]

  • 对光滑问题可达到二阶精度

19. 数值耗散、数值色散与人工粘性

数值耗散

数值格式使波幅随时间衰减,常表现为间断被抹宽、峰值降低。

数值色散

不同波数成分传播速度不一致,常表现为相位误差和间断附近振荡。

人工粘性

人工粘性用于在强梯度或激波附近增加耗散,抑制非物理振荡。

基本认识

人工粘性可以稳定计算,但会降低局部分辨率,需要控制其作用范围和强度。

20. 守恒形式、激波管与结课

守恒形式再认识

守恒形式的核心是保证离散意义下的质量、动量和能量平衡。对于含激波流动,守恒形式直接关系到激波位置和强度是否正确。

激波管问题

激波管问题包含膨胀波、接触间断和激波,是理解可压缩流动波系结构的重要例子。

21. 物理约束神经网络 PINN

\[ u_\theta(x,t)\approx u(x,t) \]

PINN 用神经网络表示未知解,并在训练中同时约束:数据、方程、初始/边界条件

导数由自动微分得到。

这几周,我们从控制方程出发

离散格式是否合适?

网格怎样生成?

初始条件和边界条件是否合理?

求解方式是否稳定?

需要后处理哪些结果?

以上这些你也许会忘记,


但面对复杂问题时沉下心来


从基本规律出发、把每一步想清楚,


也许就是 CFD 课程真正教给大家的。