空腔流(盖驱动)
空腔流(盖驱动)的理论基础
概述
老师,lid-driven cavity 是CFD中首个基准问题对吗?
是的。正方形空腔顶面(盖)以恒定速度水平滑动的问题。几何形状简单,边界条件明确,当Re数变化时会出现丰富的流动结构。Ghia et al. (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不可压缩流中,涡度-流函数定式化自动满足连续性方程,因此更高效。
其中涡度 $\omega = \partial v/\partial x - \partial u/\partial y$,流函数 $\psi$ 满足 $u = \partial \psi / \partial y$, $v = -\partial \psi / \partial x$。
但是,扩展到3D或可变密度流会很困难,所以通用CFD代码采用速度-压力定式化(原始变量定式化)作为标准。
盖的角处奇点
盖的端点处速度不连续,这不会是问题吗?
很好的问题。在盖的角($(0,L)$ 和 $(L,L)$)处速度不连续。$u = U$(顶壁)和 $u = 0$(侧壁)不能同时成立。这是数学奇点,即使加细网格也不会收敛。
实务处理方法有:
- 在离角几个网格单元处评估结果
- 使用正则化条件(使盖的速度在角处平滑地过渡到零)
- 承认奇点的存在,在足够细的网格下计算,确保非角区域的精度
Ghia (1982年)数据为何40年后仍被广泛引用
作为空腔流的"标准答案",Ghia等人在《计算物理学杂志》1982年发表的论文中的数据被全球使用。该论文包含Re=1000、3200、5000、10000等情况的速度分布表,至今每年被数百至数千篇论文引用。它能延续40年以上的原因是——"问题设置简单易重现,数据经过网格收敛且当时为最高水准"。开发新的CFD求解器或数值格式时,能否通过"Ghia基准"是首要检验点。
空腔流(盖驱动)的数值计算方法
数值方法的选择
求解空腔流用什么方法最好?
空腔流是闭合区域,无进出口,这是其特殊性。压力的绝对值无法唯一确定,需要在某点固定参考压力。
| 方法 | 适用范围 | 备注 |
|---|---|---|
| 有限差分法(均匀网格) | Re < $10^4$ | Ghia等人原始数据采用该方法 |
| 有限体积法(FVM) | 通用 | 商用CFD的标准。SIMPLE/PIMPLE耦合 |
| 有限元法(FEM) | 通用 | Taylor-Hood单元(P2/P1)满足LBB条件 |
| 谱方法 | 高精度计算 | Chebyshev多项式基。指数收敛 |
| 格子玻尔兹曼方法(LBM) | Re < $10^4$ 左右 | 壁面反弹边界条件实现简单 |
FVM 上的实现(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 中在 `fvSolution` 的 `p` 配置里指定 `reference cell` 和 `reference value`。
格子玻尔兹曼方法
格子玻尔兹曼方法(LBM)也能解吗?
LBM在空腔流入门学习中很受欢迎。D2Q9模型(二维9速度)使用BGK碰撞算子就能简单实现。
弛豫时间 $\tau$ 与动粘度的关系为 $\nu = c_s^2 (\tau - 0.5) \Delta t$,其中 $c_s = 1/\sqrt{3}$(格子声速)。顶壁面的移动用Zou-He边界条件实现。
LBM就不用解压力-速度耦合了?
对。LBM是显式方法,无需迭代,并行化也容易。但高Re数时需要注意数值稳定性,通常采用MRT(多弛豫时间)模型或正则化方法。
Ghia 基准与比较方法
如何与Ghia等人的数据比较?
比较对象有两个:
1. 空腔中央竖线($x = 0.5$)上的 $u$ 速度:顶壁处 $u = 1$,底壁处 $u = 0$,中间会有再循环产生的负 $u$
2. 空腔中央横线($y = 0.5$)上的 $v$ 速度:左壁附近为正,右壁附近为负
Ghia等人用 $129 \times 129$ 均匀网格计算了 Re = 100, 400, 1000, 3200, 5000, 7500, 10000 的数据。将这些离散点的值与自己的CFD结果比较,相对误差在 1% 以内就是好结果。
角涡成为"压力-速度耦合的钥匙孔"
盖驱动空腔的数值计算中,四个角附近会生成入套的微涡和三级涡。这些在理论上被称为"Moffatt涡"——无穷小涡的连锁,但数值计算受网格分辨率限制必然中断。有趣的是"能否准确重现这些嵌套涡"成为压力-速度耦合格式质量的试金石。SIMPLE、SIMPLEC、PISO等方法的对比基准就是看能否再现角涡的数目和形状。"能准确计算角部"实际上是很难的问题。
空腔流(盖驱动)的实务应用
实践步骤
教一下实际做空腔流基准计算的步骤。
以OpenFOAM为例说明。
1. 网格生成:用 `blockMeshDict` 定义 $N \times N$ 均匀网格。尝试 $N = 64, 128, 256$ 三个水平
2. 边界条件:顶壁设为 `movingWall` 速度 $U = (1, 0, 0)$,其他3壁为 `fixedValue (0 0 0)`
3. 物性:$\nu = 1/Re$(无量纲化:$U = 1$, $L = 1$)
4. 求解器:`icoFoam`(层流·非定常)或 `simpleFoam`(定常)
5. 后处理:用 `sampleDict` 提取中央线上的速度,与Ghia数据比较
网格收敛性
需要多少分割才够?
所需的分辨率随Re数变化。
| Re | 最低必要分割数 | Ghia的分割数 | 推荐分割数 |
|---|---|---|---|
| 100 | $32 \times 32$ | $129 \times 129$ | $64 \times 64$ |
| 1000 | $64 \times 64$ | $129 \times 129$ | $128 \times 128$ |
| 5000 | $128 \times 128$ | $257 \times 257$ | $256 \times 256$ |
| 10000 | $256 \times 256$ | $257 \times 257$ | $512 \times 512$ |
均匀网格不如在壁面附近加密更好吗?
完全同意。在壁面和角处集中加密,同样网格数可获得更高精度。OpenFOAM 中 `blockMesh` 的 `simpleGrading` 可在壁面方向进行拉伸(拉伸比5~10很有效)。
Ghia 数据的比较绘图
Re = 1000 时的代表值是多少?
给出Ghia等人(1982)的Re = 1000主要数据。
$x = 0.5$ 上的 $u$ 速度:
| $y$ | $u$ |
|---|---|
| 1.0000 | 1.00000 |
| 0.9766 | 0.65928 |
| 0.9688 | 0.57492 |
| 0.5000 | -0.06080 |
| 0.0547 | -0.24533 |
| 0.0000 | 0.00000 |
特别是 $y \approx 0.05$ 附近的负 $u$(约$-0.25$)反映底壁附近的再循环。这个值对了,说明底角涡的结构被正确解析。
3D 空腔
3D的空腔流也有研究吗?
有的。3D时加入跨向($z$方向)端壁效应。Koseff & Street (1984)的实验很著名。2D下Re = 3200定常的流动,在3D下变为非定常。
3D空腔的临界Re取决于跨向长径比(SAR),SAR = 3时,Re $\approx 800$ 出现3D不稳定性(Albensoeder & Kuhlmann 2006)。
涂料搅拌罐与空腔流的共通点
工厂的涂料搅拌罐在物理上接近空腔流——只不过是用搅拌叶而非盖的运动来驱动液体。罐内若有"死区(混合不到的停滞区域)",涂料会不均匀,沉淀出现。这个死区就对应空腔流中的"角附近低速区"。如果CFD能准确计算空腔流中副涡的位置和大小,对罐型设计的死区预测精度也会提高。学术基准问题直接关乎现场产品品质改进。
空腔流(盖驱动)的软件比较
工具的实现
空腔流用什么CFD工具都能解吧。各工具有差别吗?
都能解,但作为教学·学习工具,易用性有差别。
| 工具 | 设置容易度 | 精度确认 | 教育利用 |
|---|---|---|---|
| ANSYS Fluent | 有教程 | Custom Field Function | 大学版许可 |
| COMSOL | 几分钟内GUI完成 | 直接比对理论解、参考解 | 教学最优 |
| OpenFOAM | cavity教程面向初学者 | Python/GNUplot比较 | 无偿学习最优 |
| FEniCS/Firedrake | Python脚本实现 | 高阶FEM、自动微分 | 科研教学向 |
| Palabos | LBM基础。C++ | cavity样例 | LBM学习最优 |
OpenFOAM 的 cavity 教程
OpenFOAM 著名的cavity教程怎样?
OpenFOAM 的入门教程 `$FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity` 提供Re = 10的粗$20 \times 20$均匀网格空腔流。
要扩展为基准计算,可以:
- 网格改为 $128 \times 128$ 以上(修改 `blockMeshDict` 的hex分割数)
- 改变 $\nu$ 计算Re = 100, 400, 1000
- 用 `sampleDict` 提取中央线数据
- 用Python matplotlib与Ghia数据(文本文件下载)比图
ANSYS Fluent 的设置
Fluent怎样设置?
Fluent的步骤如下:
1. Meshing:在正方形区域用Face Meshing生成 $128 \times 128$ 均匀网格
2. Setup:Viscous Model → Laminar,Fluid Material设置密度和粘度
3. Boundary Conditions:顶壁面设为Moving Wall($U = 1$ m/s,$x$ 方向),其他为Stationary Wall
4. Solution Methods:SIMPLE,Second Order Upwind
5. Reference Values:设置压力Operating Point(避免浮动压力)
6. Run:迭代3000~5000步,残差降至 $10^{-6}$ 以下收敛
7. Post:中央线上的XY Plot看速度分布
COMSOL 的设置
COMSOL初学者友好吧。
COMSOL几步就搞定。
1. 2D模型 → 选择Laminar Flow (spf)
2. 创建正方形几何($1 \times 1$ m)
3. 上边设为Wall → Sliding Wall($U_w = 1$ m/s)
4. 其他3边为No Slip(默认)
5. Fluid Properties设置 $\mu$ 和 $\rho$(对应Re)
6. Mapped网格做均匀分割
7. Stationary Study求解
8. Line Graph显示中央线速度,与Ghia数据比较
用多个工具解同一问题,对理解工具特性很有帮助。
是的。用OpenFOAM、Fluent、COMSOL分别解同一问题再比对,能充分理解各工具的特点。离散格式的影响也一目了然。
"与Ghia论文的比较"成为CFD求解器入门的必过关卡
学习CFD的人首先要确认自己的代码是否正常运行,而蓋驱动空腔与Ghia论文的比较就成为全球标准做法。原因很简单——"无需进出口边界""无需3D计算""无需实验装置就能验证答案"三个条件都满足。OpenFOAM教程包含它,商用求解器入门培训必有它。"我的空腔计算与Ghia论文吻合"在业界成为"CFD计算基础动作正确"的通行证。简单问题之所以能担此重任,正是因为它身兼教学、验证、求解器评估三职。
空腔流(盖驱动)的前沿研究
稳定性分析和分岔
空腔流的稳定性分析怎样做?
以定常解为基态,追踪微扰动的增长率。用时间演化法(DNS追踪扰动幂次增长)或全局稳定性分析(求解一般化特征值问题)。
2D空腔的Hopf分岔约在Re $\approx 8000\text{--}8500$(Fortin等1997,Bruneau & Saad 2006)。这个值对网格分辨率敏感。3D时,离心不稳定性(Taylor-Goertler型)在Re $\approx 800\text{--}1000$ 出现。
正则化 盖驱动空腔
有办法回避盖角处的奇点吗?
正则化盖驱动空腔通过使盖速度在角处平滑过渡为零,例如:
这样奇点消失,网格收敛性改善。高精度基准(Botella & Peyret 1998的谱法解)就采用正则化。
高精度参考解
比Ghia更精的参考解有吗?
有几项研究给出更高精度的参考解:
| 研究者 | 方法 | Re | 网格/阶数 | 精度 |
|---|---|---|---|---|
| Ghia et al. (1982) | FDM | 100-10000 | $257 \times 257$ | 工程精度 |
| Botella & Peyret (1998) | 谱法 | 1000 | $N = 96$ | 12位以上 |
| Erturk et al. (2005) | FDM(高阶) | 100-21000 | $601 \times 601$ | 高精度 |
| Bruneau & Saad (2006) | 多重网格FDM | 1000-10000 | $2048 \times 2048$ | 含非定常解 |
Botella & Peyret是12位精度?
谱法的指数收敛威力。但要注意Botella & Peyret用的是正则化空腔,有奇点的Ghia情况不能直接比。
机器学习应用
空腔流在机器学习研究中也用?
经常在代理模型和PINN(物理信息神经网络)验证中使用。
- PINN:Raissi等(2019)在包括空腔流的NS方程PINN求解中验证
- 自编码器:不同Re的流场在隐空间中插值
- 强化学习:空腔内主动控制(壁面吹吸)最优化
PINN能不用数据求NS方程?
损失函数含NS残差,原则上无数据可解。但实际需要边界条件数据,高Re数收敛困难。Re $\leq 1000$的空腔流最适合验证PINN性能。
Re=8000超过后突然变3D——空腔流的"转折点"
2D空腔流随Re增加,在某个转折点会3D化。实验和LES研究表明,Re≈8000~10000时,流动开始在跨向(深度方向)变得不均匀,转为真正的3D湍流。2D的RANS计算察觉不到这个变化。建筑物和电子设备冷却等实际设计中,筐体内部"空腔"经常经历这个现象。"2D计算显示均匀混合,但实际有偏差"的背景可能是这个3D转变。Ghia数据是2D,而3D拓展至今仍是研究前沿。
空腔流(盖驱动)的故障处理
常见问题和对策
空腔流计算会出什么故障?
1. 与Ghia 数据不符
检查点:
- 网格密度:Re = 1000最少 $64 \times 64$。$32 \times 32$ 会有5~10%误差
- 空间离散化格式:一阶上风(First Order Upwind)的数值扩散会使涡变弱。至少用二阶精度
- 参考点偏移:Ghia数据是 $129 \times 129$ 格点上的值。自己网格与其插值误差需注意
- Re数定义:确认 $Re = UL/\nu$。$L$ 是空腔边长
2. 压力振荡
压力等值线出现棋盘纹。
原因:共置点(速度和压力在同一格点)的Rhie-Chow插值不当导致。
对策:
- 确认Rhie-Chow momentum interpolation已启用(OpenFOAM默认启用)
- 或用交错网格(速度和压力在不同格点,古典FDM代码)
- 压力松弛因子设为 0.2~0.3
3. 高Re数不收敛
Re > 5000时非线性强,SIMPLE法收敛变慢。
对策:
- 伪时间进行法:用非定常求解器(PIMPLE)跑足够长的时间,让解收敛到定常
- 续延法:从低Re(Re=100)的收敛解开始,逐步提升Re
- 多重网格:压力方程用AMG预处理。OpenFOAM中用 `GAMG` 求解器
逐步提升Re是好办法。
是的,parameter continuation。从Re=100 → 400 → 1000 → 3200 → 5000 → 10000逐步升,每步用前一步的解作初值。
4. 角涡无法解析
Moffatt涡按几何级数衰减,均匀网格难以解析。
对策:在角处按几何级数加密。OpenFOAM中 `blockMesh` 的 `simpleGrading` 设置壁面拉伸比为10~20。
5. 3D 计算与2D 结果不同
3D计算结果与2D不同。
Re > 800左右会出现3D不稳定性(Taylor-Goertler涡),3D结果与2D不同属正常物理。
确认事项:
- 是否用了周期性边界(跨向)。若有端壁则有端壁效应
- 跨向网格分辨率足够否(不稳定波长的1/10以下)
- 先验证低Re(Re=100)2D和3D相同,再看高Re差异,分清是不稳定性还是数值误差
一步步验证的态度很重要。
没错。空腔流看起来简单,却包含分岔现象、角处奇点、3D不稳定性等数值流体力学的本质问题。这正是它40年来作为基准问题历久弥新的原因。
"中央涡中心位置偏差"是网格还是数值扩散的锅
空腔流中"主涡中心与Ghia论文不符"时,首先怀疑网格分辨率。但其实还有别的原因——移流项离散化格式精度低(一阶上风差分)会使数值扩散导致涡"向下偏离"。至少要用二阶以上格式。再有,高Re(Re=10000)时,空腔可能从定常变为弱振荡解,如果用"残差达10⁻⁶就结束"的条件,会误认为"振荡不断、残差下降"为正常而过早停止。要同时看时间序列。