激波管问题(Riemann求解器)
激波管问题(Riemann求解器)的理论基础
激波管问题是什么
老师,激波管问题在CFD教科书中经常出现,为什么这么重要?
激波管问题(以Sod问题为代表的一维Riemann问题)是评估可压缩流数值格式精度和稳定性的最基本基准。由于可以分析得到严格解,因此通过与数值解比较,可以定量评估数值扩散、超调、激波分辨率。
严格解的得到是什么具体机制?
将其表述为一维Euler方程的初值问题。管中央有隔膜(隔板),左侧为高压状态 $(\rho_L, u_L, p_L)$,右侧为低压状态 $(\rho_R, u_R, p_R)$。隔膜破裂时,产生3种波。
1. 向左传播的膨胀波(稀疏波,rarefaction fan)
2. 中部的接触不连续面(contact discontinuity)
3. 向右传播的激波(shock wave)
一维Euler方程的保存形式如下。
全能量为 $E = \frac{p}{\gamma - 1} + \frac{1}{2}\rho u^2$。
Rankine-Hugoniot关系式
激波前后的状态如何相互关联?
激波跨越的守恒律导出Rankine-Hugoniot关系式。设激波速度为 $s$,则
其中 $[\cdot]$ 表示激波前后的跳跃值。用压力比表示,
$M_s$ 是激波马赫数。将此与接触不连续面的压力、速度连续条件和膨胀波内的Riemann不变量结合,可以确定全部4个区域(左未扰动区、膨胀波区、星形区、右未扰动区)的所有状态量。
星形区域(star region)是什么?
这是接触不连续面左右的区域,压力和速度相等($p^* = p_L^* = p_R^*$,$u^* = u_L^* = u_R^*$),但密度产生不连续。此 $p^*$ 的求解方程非线性,需用Newton-Raphson法迭代求解。
Godunov法诞生背景——1959年苏联论文改变世界
1959年,苏联数学家Sergei Godunov发表论文提出"使用局部Riemann问题的解来离散化守恒律"这一革命性思想。当今CFD中使用的"有限体积法+Riemann求解器"的基础从此开始。有趣的是,这篇论文发表于冷战时期,西方世界一度不知情。直到1970年代之后才被翻译介绍,其重要性才得到广泛认可。深入理解激波管问题的严格解,就能看出Godunov思想的天才性——"使用膜破裂时刻的解来计算下一步"这个简洁性就是全部。
激波管问题(Riemann求解器)的数值计算方法
Godunov法与Riemann求解器
请重新说明Riemann求解器在CFD中的角色。
Godunov的想法是从局部Riemann问题的解来求每个单元界面处的通量。在单元 $i$ 和 $i+1$ 的边界,由左状态 $\mathbf{U}_i$ 和右状态 $\mathbf{U}_{i+1}$ 组成Riemann问题,求解得到界面通量 $\mathbf{F}_{i+1/2}$。
精确Riemann求解器每次都需要Newton法迭代,计算成本很高。因此开发了许多实用的近似Riemann求解器。让我比较代表性的几种。
| 求解器 | 原理 | 激波 | 接触不连续面 | 膨胀波 | 成本 |
|---|---|---|---|---|---|
| Exact(Godunov) | 严格解 | 精确 | 精确 | 精确 | 高 |
| Roe | 近似雅可比线性化 | 良好 | 良好 | 良好 | 中 |
| HLL | 2波近似(最快、最慢波) | 良好 | 扩散大 | 良好 | 低 |
| HLLC | 3波近似(添加接触波) | 良好 | 良好 | 良好 | 低~中 |
| AUSM+ | 压力-对流分离 | 良好 | 略有扩散 | 良好 | 低 |
| Rusanov(LLF) | 以最大特征值近似 | 稳定 | 扩散大 | 稳定 | 最低 |
HLL中接触不连续面模糊,而HLLC中却良好,这是为什么?
HLL只考虑2条波,所以接触不连续面(第3条波)的信息丢失了。HLLC中C代表接触波(Contact wave),通过添加第3条波,可以分辨接触不连续面。Toro的教科书中有详细的推导。
Roe求解器的详细说明
Roe求解器是如何进行近似的?
Roe的想法是在界面处对非线性Euler方程进行线性化。使用Roe平均状态构造雅可比矩阵 $\hat{A}$,
Roe平均的密度和速度定义如下。
Roe求解器有缺点吗?
膨胀激波(expansion shock)是个问题,这是非物理解,违反熵条件。需要用Harten-Hyman熵修正来矫正。另外,在低马赫数区域会出现过度的数值扩散,需要低马赫Roe修正(如Rieper修正等)。
MUSCL法与TVD限制函数
一阶精度数值扩散太大,如何实现高阶精度化?
用MUSCL(单调上风格式守恒律)法实现二阶精度是标准做法。在单元界面处用线性重构外推左右状态。
这里 $\phi(r)$ 是TVD限制函数,$r$ 是解光滑度的指标。通过选择限制器,在光滑区域自动为二阶精度,在不连续附近自动为一阶精度。
激波管实验——超过100年的"教科书之王"
激波管(shock tube)由法国的Paul Vernier在1899年发明,用高压气体和低压气体用隔板分开,破裂隔板产生激波。虽然装置非常简单,但激波、膨胀波、接触不连续面——可压缩流体力学三大要素同时出现,因此在教育、验证、研究中持续沿用至今。特别是"Sod问题"(1978年)已成为可压缩CFD的标准基准,开发了新的Riemann求解器必须通过Sod测试。不合格的格式是拿不出手的。
激波管问题(Riemann求解器)的实际应用
Sod问题的初始条件
请说明Sod问题的具体设置。
Sod(1978年)的标准初始条件如下。管长为1,隔膜位置在 $x = 0.5$。
| 状态量 | 左侧 $(x < 0.5)$ | 右侧 $(x > 0.5)$ |
|---|---|---|
| 密度 $\rho$ | 1.0 | 0.125 |
| 速度 $u$ | 0.0 | 0.0 |
| 压力 $p$ | 1.0 | 0.1 |
比热比 $\gamma = 1.4$(理想气体)。输出时刻标准为 $t = 0.2$。
用OpenFOAM求解此问题如何设置?
使用 `rhoCentralFoam`。在 `0/` 目录的初始条件用 `setFields` 工具设置最简单。在 `system/setFieldsDict` 中定义左右状态后执行。网格在 `blockMeshDict` 中一维配置1000个左右的单元即足够。
数值解的评估要点
与严格解比较数值解时应关注什么?
标准的评估方法有4个角度。
1. 激波分辨率:激波被捕捉了多少个网格。理想为2~3个单元。5个以上是数值扩散过度。
2. 接触不连续面分辨率:密度的不连续是否得到保持。最易受数值扩散影响。
3. 膨胀波的光滑性:膨胀波内有无超调或欠调。限制器函数的效果在此显现。
4. 壁面热问题:激波在壁面反射时,壁面附近出现非物理的温度上升。Godunov格式的已知问题,可用Noh问题测试。
其他基准问题
除Sod问题外还有其他可用于测试的基准问题吗?
有几个标准问题,各自测试不同方面。
| 问题名 | 特点 | 测试内容 |
|---|---|---|
| Sod(1978) | 标准激波管 | 基本激波、接触不连续面捕捉 |
| Lax(1954) | 比Sod更强的激波 | 强激波的稳定性 |
| Shu-Osher(1989) | 激波与熵波干涉 | 高阶格式的分散关系 |
| Woodward-Colella(1984) | 二重马赫反射 | 二维激波干涉分辨 |
| Noh(1987) | 激波壁面反射 | 壁面热问题测试 |
| Einfeldt(1988) | 123问题 | 膨胀波精确再现 |
Shu-Osher问题很有意思。是测试激波后面的振荡结构分辨吗?
正是。激波进入正弦波状的熵扰动,激波后方产生高频密度振荡。一阶或扩散大的格式会让这种高频成分消失。WENO5、MP5这类高阶精度格式的性能评估非常合适。
激波管实验——1856年发明的"最简单高速流实验装置"
激波管由法国的Vieille在1856年首次记述,1940~50年代确立为CFD验证标准实验装置。激波管是高压室和低压室由隔膜( diaphragm)分隔、隔膜破裂产生激波的装置。激波管是Riemann问题(压力不连续时间演化问题)唯一具有完全解析解的非定常激波问题,至今用于数值格式(Godunov法、WENO法)精度验证。在CAE中,"数值扩散"的评估表现为激波厚度对网格宽度的依赖程度,用此问题确认。
激波管问题(Riemann求解器)的软件对比
各CFD软件的通量格式
主要CFD软件实装了哪些Riemann求解器?
汇总各软件的对应情况。
| 软件 | 可用通量 | 默认 | 说明 |
|---|---|---|---|
| Ansys Fluent | Roe-FDS、AUSM | Roe-FDS | 密度基求解器时。AUSM+在低马赫数下稳定 |
| STAR-CCM+ | Roe、AUSM+、HLLC | AUSM+ | 耦合流求解器时 |
| OpenFOAM | Kurganov-Tadmor(中心差分基) | KT | rhoCentralFoam标准。Roe需额外实装 |
| SU2 | Roe、HLLC、AUSM、JST | Roe | 开源。航空航天向 |
| Eilmer | Roe、AUSM+、HLLC、Lax-Friedrichs | AUSM+ | 开源极超音速求解器 |
OpenFOAM的Kurganov-Tadmor格式严格说不是Riemann求解器?
好眼力。KT格式不求解Riemann问题,而是用局部最大波速控制数值粘性的中心差分系格式。实装简单且鲁棒,但接触不连续面的分辨率不如Roe或HLLC。若要在OpenFOAM中用Roe求解器,可在 `rhoPimpleFoam` 中实装自定义通量,或使用blastFOAM这样的第三方库。
Fluent密度求解器的详细设置
用Fluent求解激波管问题的步骤请告诉我。
Fluent GUI中的步骤如下。
1. General:Solver Type = Density-Based、Time = Transient
2. Models:Energy = On、Viscous = Inviscid(作为Euler方程求解的情况)
3. Materials:Ideal Gas、$\gamma = 1.4$
4. Solution Methods:Flux Type = Roe-FDS、Spatial Discretization = Second Order Upwind
5. Solution Controls:Courant Number = 0.5(初始值)
6. Initialization:用Region Patching设置左右不同初始条件
也能用Journal文件自动化吧?
当然可以。Fluent Journal文件运行参数研究是实务中常见做法。改变初始压力比或网格密度,批量执行,验证网格收敛性很方便。
SU2的高阶精度分析
SU2是开源的吧。能用高阶精度格式吗?
SU2有二阶MUSCL重构作为默认,JST(Jameson-Schmidt-Turkel)格式的人工扩散参数也可调。配置文件(.cfg)的指定如下。
| 参数 | 设置值 | 含义 |
|---|---|---|
| CONV_NUM_METHOD_FLOW | ROE | 通量格式 |
| MUSCL_FLOW | YES | 二阶MUSCL重构 |
| SLOPE_LIMITER_FLOW | VENKATAKRISHNAN | TVD限制器 |
| VENKAT_LIMITER_COEFF | 0.05 | 限制器强度 |
| TIME_MARCHING | DUAL_TIME_STEPPING-2ND_ORDER | 时间进行法 |
Venkatakrishnan限制器的coeff越小限制越强?
正确。越接近0就越接近一阶精度,振荡消失但扩散增加。对激波管问题,0.05~0.1是较平衡的值。
各软件Riemann求解器实装差异的原因
激波管问题的严格解任何人计算结果都相同,但用Fluent、OpenFOAM、StarCCM+等不同软件比较数值解会略有差异——这是CFD初学者最初感到困惑的经验之一。原因在于各软件Riemann求解器的"近似程度"和"限制器函数实装"不同。使用了Roe法还是HLL系、熵修正系数如何设置,都是隐藏因素。看似黑箱的求解器,其实现细节写在说明书深处。深入阅读说明书是掌握商用工具的捷径。
激波管问题(Riemann求解器)的先进研究
WENO/WCNS格式
高于二阶精度的高阶精度格式有哪些?
可压缩流中最研究广泛的高阶精度格式是WENO(本质无振荡加权)格式。基本思想是从多个模板候选中用非线性权重选择最优插值。
WENO5(五阶精度)用3个3点模板的加权组合实现5阶精度。激波附近自动将权重集中在不振荡的模板上,光滑区域全模板等权贡献,发挥高阶精度。
其中 $\omega_k$ 是基于光滑度指标(smoothness indicator)$\beta_k$ 的非线性权重。
WENO格式在商用软件中有实装吗?
遗憾的是,主要商用CFD软件(Fluent、STAR-CCM+、CFX)未标配WENO。能用的是开源或研究代码。OpenFOAM有blastFOAM项目的WENO实装。JAXA的FaSTAR和DLR的TAU代码也有实装。
间断Galerkin法
DG(间断Galerkin)法也用于可压缩流吧?
DG法是在单元内用高阶多项式近似,在单元界面用Riemann求解器求通量——这是有限元法和Godunov格式的混合体。可以达到任意高阶精度,与非结构网格兼容性好。
对激波管问题应用DG法需注意不连续附近的Gibbs振荡对策。常用方法有以下几种。
- Slope limiter:如TVBM限制器。会降精度
- 人工粘性:Persson-Peraire型局部人工粘性。与激波检测传感器联合使用
- 亚网格激波捕捉:在DG单元内进行有限体积式激波捕捉
有商用软件支持DG法吗?
Fluent最新版(2024R2以后)试验性地导入了与Poly-Hexcore网格搭配的DG法基求解器。开源有Nektar++、Flexi、HOPR等提供DG法可压缩流求解器。
Riemann问题的扩展
除经典激波管外,Riemann问题的概念在哪些分野得到应用?
应用领域很多。让我介绍几个。
| 扩展领域 | 内容 | 代表手法 |
|---|---|---|
| 多成分流体 | 不同气体界面问题 | Ghost Fluid Method |
| MHD | 磁流体的Riemann问题(7波) | HLLD求解器 |
| 相对论流体 | 特殊相对论Euler方程 | HLLC-SR |
| 浅水波方程 | 河流、海啸坝塌问题 | HLL/HLLC |
| 弹塑性体 | 激波在固体中传播 | Godunov法基固体力学 |
MHD中波变成7条?非常复杂。
MHD中由于磁场作用,有快磁音波、慢磁音波、Alfven波、接触不连续面这7个特征速度。HLLD求解器有效地近似了这些,在宇宙物理数值仿真中广泛使用。
Roe格式的"熵修正"——为什么要防止零除
Roe格式在高精度激波计算中很受欢迎,但有著名缺点:"熵违反"。当音速点(马赫数接近1的区域)的Roe平均特征值接近零时,会产生数值上的非物理膨胀激波(熵违反解)。Harten(1983年)提出熵修正方法,通过给特征值加小量避免问题。这个参数(通常叫ε或δ)的设定是"太大精度下降,太小熵违反"的两难,直接影响喷嘴喉部和膨胀扇周围的精度。用高阶Riemann求解器时必须确认此修正的实装。
激波管问题(Riemann求解器)的故障排除
数值振荡(Gibbs现象)
激波前后出现数值振荡,怎么办?
不连续面附近的超调/欠调是高阶格式的宿命。应对选项整理如下。
| 对策 | 优点 | 缺点 |
|---|---|---|
| 改为一阶精度 | 振荡完全消失 | 数值扩散导致解模糊 |
| 加强TVD限制器 | 抑制振荡同时保持二阶 | 光滑区域精度下降 |
| WENO/MP系格式 | 保持高阶精度 | 实装复杂,计算成本增加 |
| 添加人工粘性 | 实装简单 | 粘性量调整经验性 |
Fluent中用二阶上风差分出现振荡的情况?
Fluent中的有效做法是先用First Order Upwind求到收敛,再以此解为初值改为Second Order,交替迭代。又或在Solution Methods中将Gradient Limiter的Method从Standard改为Multidimensional Limiter,也能抑制振荡。
Carbuncle现象
"Carbuncle现象"是什么?前辈为此困扰...
Carbuncle现象是强垂直激波的数值解表现出格子依赖的非物理不稳定结构的问题。Roe系格式特别容易发生。当激波面平行于网格配置时,激波面上出现不规则凹凸增长。
对策有几种。
1. 转向HLL系求解器:HLL或HLLC在接触不连续面分辨率稍低的代价下,无Carbuncle
2. H-correction(Sanders et al.,1998):给Roe格式加横向数值粘性
3. Rotated Roe:局部旋转通量计算坐标系
4. AUSM+up:带低马赫数补正的AUSM对Carbuncle鲁棒
STAR-CCM+的默认AUSM+是为避免此问题吗?
也是原因之一。AUSM系在激波稳定性上优越,通用求解器的默认值适合这一点。
低马赫数区域的精度下降
可压缩求解器在低马赫数($M < 0.3$)流动中精度变差,为什么?
Godunov系格式在低马赫数时产生过度数值扩散。这是通量散逸项以 $O(1/M)$ 比例缩放的结果。应对方法如下。
理想上有全速度域适用的求解器就好了。
全速度格式是活跃的研究领域,STAR-CCM+的Coupled Flow求解器就是这个思路。在非压缩极限和可压缩性都能用一个框架处理是强项。
激波管问题故障排除常见——"负压力"出现是警报
实装Riemann求解器运行激波管问题,初学者常初次陷阱是"负压力、负密度"出现。物理上不可能的值,计算瞬间就崩溃。原因多为初始压力比过大、求解器跟不上,或网格太粗、膨胀波波头分辨不足。实务中"先从压力比10开始,逐步升高"这种枯燥作业解决9成问题。剩下1成通过调整数值粘性设置解决。
相关主题
价值
详细
错误