欧拉方程式(可压缩性)
欧拉方程式(可压缩性)的理论基础
概述
老师,可压缩欧拉方程是什么?它与非压缩欧拉方程不同吗?
欧拉方程是忽略粘性的流体运动方程,但在可压缩情况下,由于密度会变化,因此需要包含能量方程的联立守恒律形式。这是可压缩CFD的出发点。
守恒形欧拉方程
在一维情况下,使用守恒变量向量 $\mathbf{U}$ 和通量 $\mathbf{F}$ 可以这样表示。
其中
三个方程是联立的呢。分别是质量守恒、动量守恒、能量守恒吗?
完全正确。在三维时,动量方程有3个分量,所以是5元联立系统。
为了闭合这个系统,需要状态方程。对于理想气体,使用
对于空气,比热比 $\gamma = 1.4$。
双曲型方程的性质
我听说过欧拉方程是双曲型的,这是什么意思?
这是一个重要概念。一维欧拉方程的雅可比矩阵 $\mathbf{A} = \partial\mathbf{F}/\partial\mathbf{U}$ 的所有特征值都是实数,这就是双曲型的条件。特征值为
其中 $a = \sqrt{\gamma p/\rho}$ 是声速。这些称为特征速度,表示信息传播的速度。
$\lambda_1$ 和 $\lambda_3$ 分别对应音波的前进波和后退波,$\lambda_2$ 对应熵波(接触间断面)。在超音速流($|u| > a$)中,所有特征值同号,所以信息只能单向传播。这直接影响CFD的边界条件设置。
超音速时下游的信息不会传递到上游,我终于明白为什么根据马赫数改变边界条件了。
亚音速入口处,压力等信息会传播到上游,所以一个物理量由外部指定,其余的由内部外推。超音速入口处,所有特性都沿流入方向,所以要指定全部变量。不遵守这个原则会产生非物理的反射波。
18世纪的天才写下的方程式如今仍是CFD的心脏
莱昂哈德·欧拉在1757年推导出流体运动方程。这个基于"理想流体"假设的方程式——既不考虑粘性也不考虑热传导——当时被批评为过于抽象。但270年后,在超音速和极超音速CFD中,欧拉方程反而比考虑粘性的Navier-Stokes方程更先被使用。这是因为在高速流中,粘性对惯性力的影响极小,欧拉方程能很好地近似现实。一个超越时代的数学方程依然闪闪发光。
欧拉方程式(可压缩性)的数值计算方法
数值求解
用计算机求解欧拉方程时,冲击波的处理是关键,对吧?
完全正确。欧拉方程的解包含冲击波和接触间断面这样的不连续解。正确捕捉这些是可压缩CFD的核心技术。
Godunov方法和黎曼求解器
Godunov方法在单元界面处求解局部黎曼问题来得到数值通量。
这里 $\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}$。数值通量为
第二项是添加数值耗散的迎风项。
高次精度化:MUSCL法和限制器
一阶精度的Godunov方案会导致冲击波跨越数十个单元。使用MUSCL(Monotone Upstream-centered Schemes for Conservation Laws)方法可以实现高次精度。
这里 $\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条件是
CFL $\leq 1$ 是稳定条件。隐式方法用LU-SGS(Lower-Upper Symmetric Gauss-Seidel)很高效,能取更大的CFL数,定常计算收敛快。
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问题的初值条件是
在 $t = 0.2$ 时比较冲击波位置、接触间断的尖锐度和膨胀波的光滑性。
实际网格要多细?
Sod问题100个单元就能看出方案的基本特性。400个单元才能看清2次精度的效果。实际问题可用AMR(自适应网格加密)在冲击波附近加密,最高效。冲击波数值厚度一般是3~5个单元,对冲击波结构不感兴趣的话就不需要更细了。
边界条件的设置
边界条件设置要随马赫数改变,对吧?
是的,要基于特性理论正确设置。
| 边界 | 亚音速 (M<1) | 超音速 (M>1) |
|---|---|---|
| 入口 | 指定总压、总温,静压外推 | 指定全部变量 |
| 出口 | 指定静压,其他外推 | 全变量外推 |
| 壁面 | 法向速度=0(滑移条件) | 法向速度=0 |
| 远场 | 基于特性的NRBC | 全变量指定(流入侧) |
远场边界设置错误导致反射波,原来是特性处理不当的原因。
完全正确。Fluent的far-field边界条件是基于特性的,只要正确指定马赫数和流向就没问题。OpenFOAM对应freestreamPressure和freestreamVelocity边界条件。
用欧拉方程计算机翼时,边界层去哪了?
欧拉方程不含粘性项,所以计算机翼时不会产生"边界层"这个概念。但实务中欧拉计算仍用来估算升力系数。为什么行得通呢?因为升力主要由压力分布决定,粘性贡献相对小。但阻力(特别是摩擦阻力)欧拉就精确不出来。航空器初期概念设计中,要"快速掌握升力和粗略的冲击波位置"时,欧拉计算至今仍在现场使用。
欧拉方程式(可压缩性)的软件比较
商用工具中的欧拉求解器
商用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解差不多。
为什么宇宙机开发中欧拉专用求解器至今存活
考虑粘性的Navier-Stokes计算已成主流,但航天器和导弹设计初期仍广泛使用欧拉专用代码。理由很简单:"快"。NASA的CART3D或Euler3D之类的欧拉求解器比Navier-Stokes代码快10~50倍。初期要跑100+个外形变体时,1个外形数分钟完成的欧拉计算太珍贵了。精度不求完美,只要"掌握冲击波位置和粗略压力分布"的场景,欧拉计算至今仍是够用的工具。
欧拉方程式(可压缩性)的先端研究
先端主题
欧拉方程的数值解法是不是已经完成的课题?
容易被这样想,其实不然。现在仍在活跃研究,特别是高次精度方案、全马赫数对应、AMR(自适应网格加密)这三个方向。
高次精度方案
WENO(Weighted ENO)方案是5次精度,冲击波附近也无振荡。最近有WENO-Z、TENO(Targeted ENO)等改良版,用更少的数值耗散同时高精度捕捉冲击波和涡。
$\omega_k$ 是非线性权重,在光滑区恢复最优高次精度,在不连续附近自动转为ENO选择。
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版本。
欧拉方程"熵生成"的矛盾
欧拉方程描述无粘性、无热传导的"理想流体",原则上是可逆过程,熵应不变。但包含冲击波的解计算出来,冲击波穿过后熵不连续增加——物理上对,数学上矛盾。谜底是"冲击波是欧拉方程的弱解,古典解不存在"。CFD前沿至今仍在讨论熵条件和弱解的处理,直接影响数值方案设计。
欧拉方程式(可压缩性)的故障处理
故障排除
老师,欧拉求解器计算不顺利时怎么办?
常见故障按模式整理一下。
1. 膨胀冲击波(Expansion Shock)的发生
现象:解中出现物理上不可能的膨胀冲击波
原因:Roe方案不自动满足熵条件。固有值接近零时会发生熵违反。
对策:应用熵修正(Harten-Hyman fix)。
$\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方程粘性项提供天然耗散,自然稳定。欧拉方程靠数值方案散逸稳定,所以方案选择和参数调整更关键。
"计算爆炸"——欧拉解析老生常谈的发散原因TOP 3
欧拉方程计算突然发散时,原因大多归结为三点:"初值条件设置错"、"CFL数过大"、"冲击波与网格位置关系"。最常见是初值问题,"一开始用自由流一致初值,结果喉部附近马赫数接近1,立即发散"。喉部附近M接近1时特征线很尖锐,微小不连续被放大。对策现场用"马赫数逐步升高"或"局部压力密度平滑化初值"。CFL从0.3~0.5开始最稳妥。
更详细
错误