欧拉方程式(可压缩性)

分类:流体解析(CFD) | 统合版 2026-04-06
CAE visualization for euler equations theory - technical simulation diagram
欧拉方程式(可压缩性)

欧拉方程式(可压缩性)的理论基础

概述

🧑‍🎓

老师,可压缩欧拉方程是什么?它与非压缩欧拉方程不同吗?


🎓

欧拉方程是忽略粘性的流体运动方程,但在可压缩情况下,由于密度会变化,因此需要包含能量方程的联立守恒律形式。这是可压缩CFD的出发点。


守恒形欧拉方程

🎓

在一维情况下,使用守恒变量向量 $\mathbf{U}$ 和通量 $\mathbf{F}$ 可以这样表示。


$$ \frac{\partial \mathbf{U}}{\partial t} + \frac{\partial \mathbf{F}}{\partial x} = 0 $$

其中


$$ \mathbf{U} = \begin{pmatrix} \rho \\ \rho u \\ \rho E \end{pmatrix}, \quad \mathbf{F} = \begin{pmatrix} \rho u \\ \rho u^2 + p \\ (\rho E + p)u \end{pmatrix} $$

🧑‍🎓

三个方程是联立的呢。分别是质量守恒、动量守恒、能量守恒吗?


🎓

完全正确。在三维时,动量方程有3个分量,所以是5元联立系统。


$$ \mathbf{U} = [\rho, \; \rho u, \; \rho v, \; \rho w, \; \rho E]^T $$

为了闭合这个系统,需要状态方程。对于理想气体,使用


$$ p = (\gamma - 1)\rho\left(E - \frac{u^2+v^2+w^2}{2}\right) $$

对于空气,比热比 $\gamma = 1.4$。


双曲型方程的性质

🧑‍🎓

我听说过欧拉方程是双曲型的,这是什么意思?


🎓

这是一个重要概念。一维欧拉方程的雅可比矩阵 $\mathbf{A} = \partial\mathbf{F}/\partial\mathbf{U}$ 的所有特征值都是实数,这就是双曲型的条件。特征值为


$$ \lambda_1 = u - a, \quad \lambda_2 = u, \quad \lambda_3 = u + a $$

其中 $a = \sqrt{\gamma p/\rho}$ 是声速。这些称为特征速度,表示信息传播的速度。


🎓

$\lambda_1$ 和 $\lambda_3$ 分别对应音波的前进波和后退波,$\lambda_2$ 对应熵波(接触间断面)。在超音速流($|u| > a$)中,所有特征值同号,所以信息只能单向传播。这直接影响CFD的边界条件设置。


🧑‍🎓

超音速时下游的信息不会传递到上游,我终于明白为什么根据马赫数改变边界条件了。


🎓

亚音速入口处,压力等信息会传播到上游,所以一个物理量由外部指定,其余的由内部外推。超音速入口处,所有特性都沿流入方向,所以要指定全部变量。不遵守这个原则会产生非物理的反射波。


Coffee Break 闲话

18世纪的天才写下的方程式如今仍是CFD的心脏

莱昂哈德·欧拉在1757年推导出流体运动方程。这个基于"理想流体"假设的方程式——既不考虑粘性也不考虑热传导——当时被批评为过于抽象。但270年后,在超音速和极超音速CFD中,欧拉方程反而比考虑粘性的Navier-Stokes方程更先被使用。这是因为在高速流中,粘性对惯性力的影响极小,欧拉方程能很好地近似现实。一个超越时代的数学方程依然闪闪发光。

欧拉方程式(可压缩性)的数值计算方法

数值求解

🧑‍🎓

用计算机求解欧拉方程时,冲击波的处理是关键,对吧?


🎓

完全正确。欧拉方程的解包含冲击波和接触间断面这样的不连续解。正确捕捉这些是可压缩CFD的核心技术。


Godunov方法和黎曼求解器

🎓

Godunov方法在单元界面处求解局部黎曼问题来得到数值通量。


$$ \mathbf{F}_{i+1/2} = \mathbf{F}(\mathbf{U}^*(0; \mathbf{U}_L, \mathbf{U}_R)) $$

这里 $\mathbf{U}^*$ 是黎曼问题的解,$\mathbf{U}_L, \mathbf{U}_R$ 是单元界面左右的状态。精确黎曼求解器计算成本高,所以广泛使用近似黎曼求解器。


求解器特征优点缺点
Roe (1981)线性化黎曼解接触间断的分辨率高需要熵修正
HLL (1983)两波近似稳健,实现简单接触间断扩散
HLLC (1994)三波近似(含接触波)接触间断也能分辨比Roe略有扩散
AUSM+ (1996)质量流通量分离全马赫数对应需要参数调整
🧑‍🎓

Roe黎曼求解器很有名,具体怎么计算的?


🎓

Roe从左右状态计算Roe平均值,然后线性化雅可比矩阵。Roe平均密度定义为 $\hat{\rho} = \sqrt{\rho_L \rho_R}$。数值通量为


$$ \mathbf{F}_{i+1/2} = \frac{1}{2}(\mathbf{F}_L + \mathbf{F}_R) - \frac{1}{2}|\hat{\mathbf{A}}|(\mathbf{U}_R - \mathbf{U}_L) $$

第二项是添加数值耗散的迎风项。


高次精度化:MUSCL法和限制器

🎓

一阶精度的Godunov方案会导致冲击波跨越数十个单元。使用MUSCL(Monotone Upstream-centered Schemes for Conservation Laws)方法可以实现高次精度。


$$ \mathbf{U}_{L} = \mathbf{U}_i + \frac{1}{2}\phi(r)(\mathbf{U}_i - \mathbf{U}_{i-1}) $$

这里 $\phi(r)$ 是斜率限制函数。不使用限制器会在冲击波附近产生Gibbs振荡。典型的限制器有minmod、van Leer和superbee。


🧑‍🎓

限制器的选择会影响结果吗?


🎓

影响很大。minmod最具耗散性但最稳定,superbee最尖锐但会把疏密波阶梯化。实用中van Leer或van Albada能做到最好的平衡。WENO(Weighted Essentially Non-Oscillatory)方案可以达到5次精度,冲击波捕捉也很优异,但计算代价高。


🧑‍🎓

时间积分怎么做?


🎓

显式方法用TVD Runge-Kutta法(Shu-Osher三阶三步)最标准。CFL条件是


$$ \Delta t \leq \text{CFL} \cdot \frac{\Delta x}{|u| + a} $$

CFL $\leq 1$ 是稳定条件。隐式方法用LU-SGS(Lower-Upper Symmetric Gauss-Seidel)很高效,能取更大的CFL数,定常计算收敛快。


Coffee Break 闲话

Godunov方法的诞生——1959年苏联孕育的冲击波数值解法

在数值求解欧拉方程时革命性的方法是1959年苏联数学家Sergei Godunov提出的"Godunov方法"。在此之前的差分法在冲击波附近无法抑制数值振荡(Gibbs现象),苦不堪言。Godunov带来了"在每个单元界面求解黎曼问题"的想法。据说原论文中Godunov自己还评论说"这个一阶方案精度不高"。尽管如此,当代从HLLC到Roe方案的全部冲击波计算系列都是这个思想的延续。

欧拉方程式(可压缩性)的实务应用

实践指南

🧑‍🎓

老师,欧拉求解器在实务中什么地方用?忽视粘性真的有意义吗?


🎓

好问题。欧拉求解器至今仍在以下场景中举足轻重。

  • 初期设计阶段的气动评估(翼型压力分布、冲击波位置)
  • 导弹和发射体的阻力推算
  • Navier-Stokes求解器的验证基准
  • 非粘性效应占主导的问题(强冲击波、爆风)

基准问题

🧑‍🎓

欧拉求解器怎么验证?


🎓

有几个标准基准问题。


问题马赫数验证重点
Sod冲击波管内部流冲击波、接触间断和膨胀波的捕捉
双楔反射M=2~4冲击波的反射和交叉
NACA0012超音速M=0.8~1.2遍音速下冲击波位置
Shu-Osher问题M=3冲击波-涡相互作用的分辨率
Sedov爆风波高压比球对称爆风与自相似解的比较
🎓

必须先做Sod问题。因为有解析解,能定量评估方案的耗散特性和限制器的影响。Sod问题的初值条件是


$$ (\rho, u, p)_L = (1.0, 0, 1.0), \quad (\rho, u, p)_R = (0.125, 0, 0.1) $$

在 $t = 0.2$ 时比较冲击波位置、接触间断的尖锐度和膨胀波的光滑性。


🧑‍🎓

实际网格要多细?


🎓

Sod问题100个单元就能看出方案的基本特性。400个单元才能看清2次精度的效果。实际问题可用AMR(自适应网格加密)在冲击波附近加密,最高效。冲击波数值厚度一般是3~5个单元,对冲击波结构不感兴趣的话就不需要更细了。


边界条件的设置

🧑‍🎓

边界条件设置要随马赫数改变,对吧?


🎓

是的,要基于特性理论正确设置。


边界亚音速 (M<1)超音速 (M>1)
入口指定总压、总温,静压外推指定全部变量
出口指定静压,其他外推全变量外推
壁面法向速度=0(滑移条件)法向速度=0
远场基于特性的NRBC全变量指定(流入侧)
🧑‍🎓

远场边界设置错误导致反射波,原来是特性处理不当的原因。


🎓

完全正确。Fluent的far-field边界条件是基于特性的,只要正确指定马赫数和流向就没问题。OpenFOAM对应freestreamPressure和freestreamVelocity边界条件。


Coffee Break 闲话

用欧拉方程计算机翼时,边界层去哪了?

欧拉方程不含粘性项,所以计算机翼时不会产生"边界层"这个概念。但实务中欧拉计算仍用来估算升力系数。为什么行得通呢?因为升力主要由压力分布决定,粘性贡献相对小。但阻力(特别是摩擦阻力)欧拉就精确不出来。航空器初期概念设计中,要"快速掌握升力和粗略的冲击波位置"时,欧拉计算至今仍在现场使用。

欧拉方程式(可压缩性)的软件比较

商用工具中的欧拉求解器

🧑‍🎓

商用CFD软件求解欧拉方程时,各软件有区别吗?


🎓

主流求解器的设置方法和特点比较一下。


Ansys Fluent

🎓

在Fluent中,把粘性模型设为"Inviscid"就能求解欧拉方程。

  • 求解器:推荐用密度基础(压力基础也可但M>1下密度基础更稳定)
  • Flux类型:默认Roe-FDS,AUSM对低马赫数强
  • 空间离散化:2nd Order Upwind 及以上
  • 2024R2之后,Mosaic网格加AMR的组合很强大

Simcenter STAR-CCM+

🎓

STAR-CCM+在物理模型选择中指定"Inviscid"。默认用耦合求解器,隐式时间积分能取更大的CFL数。

  • 对流方案:2nd Order、可选MUSCL 3rd Order重构
  • Flux函数:Roe、AUSM+、HLLC可选
  • Mesh morphing和overset网格对超音速飞行体解析很有用

OpenFOAM

🧑‍🎓

OpenFOAM怎么求解欧拉方程?


🎓

rhoCentralFoam 最合适。基于Kurganov-Noelle-Petrova (KNP)方案,采用central-upwind方案,无需人工粘性。在transportProperties中把粘性系数mu设为0就作为欧拉求解器工作。


教程中的 shockTube 对应Sod问题,先跑一遍最好。


🧑‍🎓

欧拉求解器和Navier-Stokes求解器怎么选?


🎓

根据粘性效应对结果的影响大小判断。

  • 欧拉足够:冲击波位置和强度、压力波传播、爆风解析
  • 需要N-S:阻力(摩擦分量)、换热、带分离的流、边界层效应

设计初期跑欧拉分析掌握冲击波模式,然后做N-S详细评估是标准流程。在冲击波主导的流场里,欧拉压力分布和N-S解差不多。


Coffee Break 闲话

为什么宇宙机开发中欧拉专用求解器至今存活

考虑粘性的Navier-Stokes计算已成主流,但航天器和导弹设计初期仍广泛使用欧拉专用代码。理由很简单:"快"。NASA的CART3D或Euler3D之类的欧拉求解器比Navier-Stokes代码快10~50倍。初期要跑100+个外形变体时,1个外形数分钟完成的欧拉计算太珍贵了。精度不求完美,只要"掌握冲击波位置和粗略压力分布"的场景,欧拉计算至今仍是够用的工具。

欧拉方程式(可压缩性)的先端研究

先端主题

🧑‍🎓

欧拉方程的数值解法是不是已经完成的课题?


🎓

容易被这样想,其实不然。现在仍在活跃研究,特别是高次精度方案、全马赫数对应、AMR(自适应网格加密)这三个方向。


高次精度方案

🎓

WENO(Weighted ENO)方案是5次精度,冲击波附近也无振荡。最近有WENO-Z、TENO(Targeted ENO)等改良版,用更少的数值耗散同时高精度捕捉冲击波和涡。


$$ \hat{f}_{i+1/2} = \sum_{k=0}^{r-1} \omega_k \hat{f}_{i+1/2}^{(k)} $$

$\omega_k$ 是非线性权重,在光滑区恢复最优高次精度,在不连续附近自动转为ENO选择。


🧑‍🎓

DG法(不连续 Galerkin法)也听说过。


🎓

DG法在有限元框架内实现高次精度,允许单元间不连续,与Godunov方案亲和性高。$p$-细化(提高多项式次数)容易,可做h-p自适应。缺点是自由度多,内存和计算代价大。最近FR(Flux重构)法(DG的高效重新表述)逐渐普及。


全马赫数对应方案

🎓

传统Godunov方案在低马赫数($M \ll 1$)精度下降的问题一直存在。压力的数值耗散按 $O(1/M)$ 缩放,在非压缩极限中得不到正确解。


全马赫数方案(all-speed scheme)解决这个:AUSM+-up、SLAU(简单低耗散AUSM)、低马赫数预条件Roe等。


🧑‍🎓

全马赫数对应对遍音速机翼那样局部M接近0和M>1混在一起的情况很重要吧?


🎓

完全正确。商务机巡航($M_\infty = 0.85$)时,机翼上表面局部M达1.2,停滞点附近M→0。全马赫数方案能同时处理这两个。


AMR和immersofgeometric解析

🎓

AMR(自适应网格加密)用octree格子,冲击波附近动态细化。AMReX和p4est这样的库已开源,数十亿单元计算成为可能。


结合浸入式边界法或切割单元法,可大幅减少复杂形状网格生成的手工。Cartesian网格+AMR+切割单元的组合近似实现了"无网格"工作流。


🧑‍🎓

网格生成轻松多了。GPU活用怎么样?


🎓

GPU适配快速进展中。显式欧拉求解器并行性强,与GPU亲和性极好。JAXA的FaSTAR、NASA的FUN3D都在开发GPU版本。


Coffee Break 闲话

欧拉方程"熵生成"的矛盾

欧拉方程描述无粘性、无热传导的"理想流体",原则上是可逆过程,熵应不变。但包含冲击波的解计算出来,冲击波穿过后熵不连续增加——物理上对,数学上矛盾。谜底是"冲击波是欧拉方程的弱解,古典解不存在"。CFD前沿至今仍在讨论熵条件和弱解的处理,直接影响数值方案设计。

欧拉方程式(可压缩性)的故障处理

故障排除

🧑‍🎓

老师,欧拉求解器计算不顺利时怎么办?


🎓

常见故障按模式整理一下。


1. 膨胀冲击波(Expansion Shock)的发生

🎓

现象:解中出现物理上不可能的膨胀冲击波


原因:Roe方案不自动满足熵条件。固有值接近零时会发生熵违反。


对策:应用熵修正(Harten-Hyman fix)。


$$ |\hat{\lambda}| \to \max(|\hat{\lambda}|, \delta) $$

$\delta$ 是小正值(例:$0.1 \times (|u| + a)$)。Fluent默认应用了熵修正,通常没问题。


2. Carbuncle现象

🧑‍🎓

Carbuncle现象是什么?


🎓

现象:钝头冲击波(弓形激波)前表面出现痘状凹凸。格子正对冲击波时特别容易发生。


原因:Roe等黎曼求解器的固有不稳定。对接触间断的耗散不足。


对策

  • 切换到HLLC求解器(接触波有适度耗散)
  • 给Roe求解器加人工剪切粘性
  • 使网格相对冲击波略微斜向(实用回避办法)

3. 负的密度、压力

🎓

现象:计算中密度或压力变成负数,导致发散


原因:冲击波附近高次精度重构产生过冲/欠冲。限制器不足。


对策

  • 改用更耗散的限制器(minmod)
  • 使用保正限制器(positivity-preserving limiter)
  • 降低CFL数(0.3~0.5)
  • 故障保护机制:检到负值就局部降到1阶

🧑‍🎓

压力变负太吓人了。事前怎么防?


🎓

遇到强冲击波(压力比10以上)问题,一开始用保守设定(1阶、小CFL),稳定后逐步升级到高次精度。


4. 边界的非物理反射

🎓

现象:计算域边界从冲击波或压力波反射,定常解达不到


对策

  • 远场边界用基于特性的NRBC(非反射边界条件)
  • 计算域足够大(翼弦长的20~50倍)
  • 边界附近加缓冲层(阻尼区)

🧑‍🎓

欧拉求解器粘性没有,数值问题特别明显呢。


🎓

完全同意。Navier-Stokes方程粘性项提供天然耗散,自然稳定。欧拉方程靠数值方案散逸稳定,所以方案选择和参数调整更关键。


Coffee Break 闲话

"计算爆炸"——欧拉解析老生常谈的发散原因TOP 3

欧拉方程计算突然发散时,原因大多归结为三点:"初值条件设置错"、"CFL数过大"、"冲击波与网格位置关系"。最常见是初值问题,"一开始用自由流一致初值,结果喉部附近马赫数接近1,立即发散"。喉部附近M接近1时特征线很尖锐,微小不连续被放大。对策现场用"马赫数逐步升高"或"局部压力密度平滑化初值"。CFL从0.3~0.5开始最稳妥。

相关模拟器

用这个领域的交互式模拟器体验理论

模拟器列表

相关领域

热解析V&V、品质保证结构解析
本文的评价
感谢您的回答!
有帮助
想要
更详细
报告
错误
有帮助
0
想要更详细
0
报告错误
0
由NovaSolver贡献者撰写
匿名工程师和AI代理 — 网站地图
查看档案