空腔流动(盖驱动)
理论与物理
概述
老师,lid-driven cavity 是CFD里最开始做的基准问题吧?
没错。就是让正方形腔体的顶面(盖子)以恒定速度水平滑动的问题。几何形状简单,边界条件也明确,而且改变Re数会出现丰富的流动结构。Ghia等人(1982)的基准数据已经持续使用了40多年。
问题设定
请告诉我问题的公式化。
正方形腔体(边长 $L$)的上壁面以速度 $U$ 向 $x$ 方向移动。其他3个壁面静止。控制方程是不可压缩Navier-Stokes方程。
无量纲参数只有 $Re = UL/\nu$ 这一个。边界条件是,
- 上壁面: $u = U$, $v = 0$
- 下壁面・左壁面・右壁面: $u = 0$, $v = 0$
流动结构的Re数依赖性
Re数不同会怎么变化呢?
可以整理如下。
| Re | 主涡位置(中心坐标) | 角涡 | 流动性质 |
|---|---|---|---|
| 100 | (0.6189, 0.7344) | 下角有微小涡 | 定常,主涡偏上方・右方 |
| 400 | (0.5547, 0.6055) | 下两角有涡 | 定常,主涡接近中心 |
| 1000 | (0.5313, 0.5625) | 下两角+左上角有涡 | 定常,主涡几乎在中心 |
| 5000 | (0.5117, 0.5352) | 所有角都有涡 | 定常(2D),3D下不稳定 |
| 10000 | (0.5117, 0.5313) | 涡的层次结构 | 2D下定常/弱非定常,3D下湍流化 |
角涡,就是在角落产生的小涡对吧。
是的。正如Moffatt(1964)从理论上证明的那样,在锐角角落存在无限的涡列。每个涡的强度按几何级数递减。在CFD中,只要能分辨出最初的2~3个涡就足够了,但需要将网格在角落处加密。
涡量-流函数公式化
2D的情况下,多用涡量-流函数来求解吗?
对于2D不可压缩流,涡量-流函数公式化能自动满足连续性方程,因此效率高。
$$ \frac{\partial \omega}{\partial t} + u\frac{\partial \omega}{\partial x} + v\frac{\partial \omega}{\partial y} = \nu \nabla^2 \omega $$
$$ \nabla^2 \psi = -\omega $$
2D的情况下,多用涡量-流函数来求解吗?
对于2D不可压缩流,涡量-流函数公式化能自动满足连续性方程,因此效率高。
这里涡度 $\omega = \partial v/\partial x - \partial u/\partial y$,流函数 $\psi$ 满足 $u = \partial \psi / \partial y$, $v = -\partial \psi / \partial x$。
但是,扩展到3D或可变密度流动很困难,所以在通用CFD代码中,速度-压力公式化(primitive variable formulation)是标准。
盖角处的奇异性
盖子边缘的壁面速度会变得不连续对吧?这不会成为问题吗?
提得好。在盖子的角点($(0,L)$ 和 $(L,L)$)处,速度不连续。$u = U$(上壁面)和 $u = 0$(侧壁面)不能同时成立。这是一个数学奇点,即使网格加密,解也不会收敛。
实际工作中的处理方法是,
- 在距离角点几个网格的区域内评估结果
- 使用正则化条件(让盖子的速度平滑过渡到角点为零)
- 在了解奇异性的前提下,用足够密的网格计算,确保角点以外区域的精度
Ghia(1982年)的数据被引用40年以上的理由
作为腔体流动的“正确答案数据”被全世界使用的,是Ghia等人在1982年发表于Journal of Computational Physics的论文。其中以表格数据形式列出了Re数1000、3200、5000、10000各工况下的速度剖面,至今每年仍有数百至数千篇论文引用。为什么能持续通用40年以上——因为“问题设定简单、可重复性高,并且当时以最高水准给出了网格收敛的数据”。开发新的CFD求解器或数值格式时,“能否通过Ghia基准”是第一个检查点。
各项的物理意义
- 时间项 $\partial(\rho\phi)/\partial t$:想象一下拧开水龙头的瞬间。一开始水会不稳定地哗啦哗啦流出,过一会儿就变成稳定的水流了,对吧?描述这个“变化过程中”的就是时间项。心脏搏动导致血流脉动,发动机阀门每次开闭引起流动变化,这些都是非定常现象。那么定常分析是什么?就是只看“经过足够时间流动稳定之后”——也就是令此项为零。计算成本大幅下降,所以先用定常求解是CFD的基本策略。
- 对流项 $\nabla \cdot (\rho \mathbf{u} \phi)$:把落叶扔进河里会怎样?会被水流带着往下游漂,对吧。这就是“对流”——流体的运动搬运物体的效果。暖风的暖气能到达房间的另一端,也是因为空气这个“搬运工”通过对流输送热量。这里有趣的是——这项包含“速度×速度”,因此是非线性的。也就是说,流速变快这项会急剧增强,变得难以控制。这就是湍流的根本原因。常见的误解:“对流和传导差不多”→ 完全不一样!对流是流动搬运,传导是分子传递。效率有天壤之别。
- 扩散项 $\nabla \cdot (\Gamma \nabla \phi)$:有过在咖啡里倒入牛奶后放置的经历吗?即使不搅拌,过一会儿也会自然混合,对吧。那就是分子扩散。那么下一个问题——蜂蜜和水,哪个更容易流动?当然是水,对吧。因为蜂蜜的粘性($\mu$)高,所以不易流动。粘性越大扩散项越强,流体的运动就变得“粘稠”。雷诺数小的流动(缓慢、粘稠)中扩散占主导。相反,Re数大的流动中对流占压倒性优势,扩散则成为配角。
- 压力项 $-\nabla p$:推注射器的活塞,液体就会从针头有力地射出,对吧?为什么呢?因为活塞侧高压,针头侧低压——这个压力差成为推动流体的力。大坝放水也是同样原理。天气图上等压线密集的地方会怎样?没错,会刮强风。“有压力差的地方就会产生流动”——这就是纳维-斯托克斯方程压力项的物理意义。这里的误解点:CFD的“压力”多是表压而非绝对压力。切换到可压缩分析时结果突然出错,原因可能就是混淆了绝对压力/表压。
- 源项 $S_\phi$:被加热的空气会上升——为什么呢?因为比周围轻(密度低),被浮力推上去了。这个浮力作为源项添加到方程中。还有,燃气灶的火焰产生化学反应热,工厂的电磁泵对金属熔液施加洛伦兹力…这些都是“从外部向流体注入能量或力”的作用,用源项表示。忘记源项会怎样?自然对流分析中忘记加入浮力,流体就完全不动——冬天在房间里开了暖气,暖空气却不上浮,得到这种物理上不可能的结果。
假设条件与适用范围
- 连续介质假设:克努森数 Kn < 0.01(分子平均自由程 ≪ 特征长度)时成立
- 牛顿流体假设:剪切应力与应变速率呈线性关系(非牛顿流体需要粘度模型)
- 不可压缩性假设(Ma < 0.3时):将密度视为常数。马赫数0.3以上需考虑压缩性效应
- Boussinesq近似(自然对流):仅在浮力项中考虑密度变化,其他项使用恒定密度
- 不适用的情形:稀薄气体(Kn > 0.1)、超音速・极超音速流动(需要捕捉激波)、自由表面流动(需要VOF/Level Set等)
量纲分析与单位制
| 变量 | SI单位 | 注意点・换算备忘 |
|---|---|---|
| 速度 $u$ | m/s | 入口条件从体积流量换算时,注意截面积单位 |
| 压力 $p$ | Pa | 区分表压与绝对压力。可压缩分析使用绝对压力 |
| 密度 $\rho$ | kg/m³ | 空气: 约1.225 kg/m³@20°C,水: 约998 kg/m³@20°C |
| 粘性系数 $\mu$ | Pa·s | 注意与运动粘性系数 $\nu = \mu/\rho$ [m²/s] 混淆 |
| 雷诺数 $Re$ | 无量纲 | $Re = \rho u L / \mu$。层流/湍流转换的判断指标 |
| CFL数 | 无量纲 | $CFL = u \Delta t / \Delta x$。直接关系到时间步长的稳定性 |
数值解法与实现
数值方法的选择
求解腔体流动用什么方法好呢?
腔体流动的特殊性在于它是封闭区域,没有入口也没有出口。压力的绝对值无法唯一确定,因此需要在一点固定参考压力。
| 方法 | 适用范围 | 备注 |
|---|---|---|
| 有限差分法(等间距网格) | Re < $10^4$ | Ghia等人的原始数据也用此方法 |
| 有限体积法(FVM) | 通用 | 商用CFD的标准。用SIMPLE/PIMPLE耦合 |
| 有限元法(FEM) | 通用 | Taylor-Hood单元(P2/P1)满足LBB条件 |
| 谱方法 | 高精度计算 | Chebyshev多项式基。指数收敛 |
| 格子玻尔兹曼法(LBM) | Re < $10^4$ 左右 | 壁面反弹边界条件易于实现 |
FVM 中的实现(SIMPLE法)
请简单介绍一下SIMPLE法的步骤。
腔体流动中的SIMPLE迭代如下。
请简单介绍一下SIMPLE法的步骤。
腔体流动中的SIMPLE迭代如下。
1. 假设压力场 $p^*$
2. 用 $p^$ 求解动量方程得到假速度 $\mathbf{u}^$
3. 求解压力修正方程 $\nabla \cdot (\frac{1}{a_P} \nabla p') = \nabla \cdot \mathbf{u}^*$
4. 修正速度和压力: $p = p^ + \alpha_p p'$, $\mathbf{u} = \mathbf{u}^ - \frac{1}{a_P} \nabla p'$
5. 收敛判定。未收敛则返回1
腔体流动没有入口出口,所以需要在一点(例如左下角的网格单元)固定压力基准。OpenFOAM 中在 p 的 fvSolution 里指定 reference cell 和 reference value。
格子玻尔兹曼法
格子玻尔兹曼法(LBM)也能求解吗?
LBM 作为 cavity flow 的入门非常受欢迎。使用D2Q9模型(二维9速度)和BGK碰撞算子,可以轻松实现。
$$ f_i(\mathbf{x} + \mathbf{c}_i \Delta t, t + \Delta t) = f_i(\mathbf{x}, t) - \frac{1}{\tau}[f_i(\mathbf{x}, t) - f_i^{eq}(\mathbf{x}, t)] $$
弛豫时间 $\tau$ 与运动粘度的关系是 $\nu = c_s^2 (\tau - 0.5) \Delta t$,其中 $c_s = 1/\sqrt{3}$(格子声速)。上壁面的移动用 Zou-He 边界条件实现。
LBM 不需要求解压力-速度耦合呢。
是的。LBM 是显式方法,所以不需要迭代,也容易并行化。但高Re数时需要注意数值稳定性,会使用MRT(Multi-Relaxation Time)模型或正则化方法。
与 Ghia 基准的比较方法
该怎么和Ghia等人的数据比较呢?
比较对象有两个。
格子玻尔兹曼法(LBM)也能求解吗?
LBM 作为 cavity flow 的入门非常受欢迎。使用D2Q9模型(二维9速度)和BGK碰撞算子,可以轻松实现。
弛豫时间 $\tau$ 与运动粘度的关系是 $\nu = c_s^2 (\tau - 0.5) \Delta t$,其中 $c_s = 1/\sqrt{3}$(格子声速)。上壁面的移动用 Zou-He 边界条件实现。
LBM 不需要求解压力-速度耦合呢。
是的。LBM 是显式方法,所以不需要迭代,也容易并行化。但高Re数时需要注意数值稳定性,会使用MRT(Multi-Relaxation Time)模型或正则化方法。
该怎么和Ghia等人的数据比较呢?
比较对象有两个。
1. 腔体中央的垂
なった
詳しく
報告