引言
计算流体力学(CFD)以数值方法求解流体运动控制方程,已成为航空航天、能源动力、化工过程、微流控器件等领域的核心分析手段。不可压缩 Navier-Stokes 方程的求解难点在于:压力场没有独立的时间演化方程,连续性方程仅作为速度场的散度约束出现,速度与压力强烈耦合。本文介绍基于分步投影(fractional-step projection)思想的求解框架,讨论对流项与扩散项的离散格式选择,并用约 60 行 Python 代码完整实现二维顶盖驱动方腔流这一经典基准算例。
理论基础
控制方程
不可压缩牛顿流体的运动由 Navier-Stokes 方程组描述:
$$\frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u} \cdot \nabla)\mathbf{u} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{u}$$
$$\nabla \cdot \mathbf{u} = 0$$
其中 $\mathbf{u} = (u, v)$ 为速度矢量,$p$ 为压力,$\rho$ 为密度,$\nu = \mu/\rho$ 为运动黏度。方程无量纲化后,流动相似性由 Reynolds 数 $\Re = UL/\nu$ 唯一决定,它表征惯性力与黏性力之比,是判断层流/湍流转捩与相似模化的核心参数。
投影法:压力-速度解耦
Chorin 提出的投影法把每个时间步拆成两步。第一步略去压力梯度项,由显式动量方程计算中间速度 $\mathbf{u}^*$:
$$\frac{\mathbf{u}^* - \mathbf{u}^n}{\Delta t} = -(\mathbf{u}^n \cdot \nabla)\mathbf{u}^n + \nu , \nabla^2 \mathbf{u}^n$$
第二步加入压力修正,并强制新时刻速度满足不可压缩约束:
$$\frac{\mathbf{u}^{n+1} - \mathbf{u}^*}{\Delta t} = -\frac{1}{\rho}\nabla p^{n+1}, \qquad \nabla \cdot \mathbf{u}^{n+1} = 0$$
对修正式两端取散度并利用 $\nabla \cdot \mathbf{u}^{n+1} = 0$,得到压力的 Poisson 方程:
$$\nabla^2 p^{n+1} = \frac{\rho}{\Delta t} , \nabla \cdot \mathbf{u}^*$$
于是棘手的压力求解转化为一个标准椭圆型方程,可用 Jacobi、SOR 或共轭梯度法迭代求解。SIMPLE 族算法在此基础上引入压力-速度修正的外层耦合迭代,更适合定常问题;PISO 则通过多次修正提高瞬态精度。
离散格式与稳定性
对流项采用一阶迎风(upwind)差分以保证对流占优工况下的数值稳定性,代价是引入 $O(\Delta x)$ 的数值黏性;扩散项采用二阶中心差分。显式时间推进的稳定性由对流 CFL 条件与扩散数条件联合限制:
$$\Delta t \le \min\left(\frac{\Delta x}{|u|_{\max}},; \frac{\Delta x^2}{4\nu}\right)$$
| 格式 | 截断误差 | 数值特性 | 适用场景 |
|---|---|---|---|
| 一阶迎风 | $O(\Delta x)$ | 稳定但数值耗散大 | 高 $\Re$ 粗网格预估 |
| 二阶中心 | $O(\Delta x^2)$ | 低耗散,易产生振荡 | 低 $\Re$、DNS/LES |
| QUICK | $O(\Delta x^3)$ | 精度高,有界性需限制器 | 工程定常流场 |
数值方法与实现
以下代码在同位网格上实现投影法求解二维顶盖驱动方腔流:方腔上边壁面以 $U = 1$ 匀速拖动,其余三壁无滑移,取 $\Re = 100$:
import numpy as np
def cavity_flow(nx=41, Re=100.0, nt=1000, dt=0.001):
"""顶盖驱动方腔流:投影法 + 压力Poisson方程Jacobi迭代"""
L, U = 1.0, 1.0
nu = U * L / Re
dx = dy = L / (nx - 1)
u = np.zeros((nx, nx)); v = np.zeros_like(u); p = np.zeros_like(u)
b = np.zeros_like(u)
def pressure_poisson(p, b, nit=50):
for _ in range(nit):
pn = p.copy()
p[1:-1, 1:-1] = (((pn[1:-1, 2:] + pn[1:-1, :-2]) * dy**2
+ (pn[2:, 1:-1] + pn[:-2, 1:-1]) * dx**2)
/ (2.0 * (dx**2 + dy**2))
- b[1:-1, 1:-1] * dx**2 * dy**2
/ (2.0 * (dx**2 + dy**2)))
p[:, 0] = p[:, 1]; p[:, -1] = p[:, -2]
p[0, :] = p[1, :]; p[-1, :] = p[-2, :] # 四壁压力Neumann边界
return p
for _ in range(nt):
un, vn = u.copy(), v.copy()
# 压力Poisson方程右端:中间速度的散度
b[1:-1, 1:-1] = (1.0 / dt) * (
(u[1:-1, 2:] - u[1:-1, :-2]) / (2 * dx)
+ (v[2:, 1:-1] - v[:-2, 1:-1]) / (2 * dy))
p = pressure_poisson(p, b)
# x方向动量:迎风对流 + 中心扩散 + 压力修正
u[1:-1, 1:-1] = (un[1:-1, 1:-1]
- dt * (un[1:-1, 1:-1] * (un[1:-1, 1:-1] - un[1:-1, :-2]) / dx
+ vn[1:-1, 1:-1] * (un[1:-1, 1:-1] - un[:-2, 1:-1]) / dy)
- dt / (2 * dx) * (p[1:-1, 2:] - p[1:-1, :-2])
+ nu * dt * ((un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, :-2]) / dx**2
+ (un[2:, 1:-1] - 2 * un[1:-1, 1:-1] + un[:-2, 1:-1]) / dy**2))
# y方向动量
v[1:-1, 1:-1] = (vn[1:-1, 1:-1]
- dt * (un[1:-1, 1:-1] * (vn[1:-1, 1:-1] - vn[1:-1, :-2]) / dx
+ vn[1:-1, 1:-1] * (vn[1:-1, 1:-1] - vn[:-2, 1:-1]) / dy)
- dt / (2 * dy) * (p[2:, 1:-1] - p[:-2, 1:-1])
+ nu * dt * ((vn[1:-1, 2:] - 2 * vn[1:-1, 1:-1] + vn[1:-1, :-2]) / dx**2
+ (vn[2:, 1:-1] - 2 * vn[1:-1, 1:-1] + vn[:-2, 1:-1]) / dy**2))
# 边界:顶盖以U移动,其余壁面无滑移
u[0, :] = 0; u[:, 0] = 0; u[:, -1] = 0; u[-1, :] = U
v[0, :] = 0; v[:, 0] = 0; v[:, -1] = 0; v[-1, :] = 0
return u, v, p
u, v, p = cavity_flow()
print(f"几何中心 u 速度 = {u[20, 20]:+.4f}") # 为负值,与主涡回流特征一致
print(f"最大速度幅值 = {np.max(np.hypot(u, v)):.4f}")
收敛后可以观察到主涡中心偏向方腔右上区域,几何中心附近 $u$ 速度为负,反映主涡下半部的回流。$\Re = 100$ 时中垂线速度分布与 Ghia 等人 1982 年发表的基准解偏差约 5%;网格加密至 $81\times81$ 并延长迭代后偏差可降至 2% 以内。压力 Poisson 方程的内迭代次数是精度与效率的关键折中——内迭代不足会使速度散度残差累积,表现为质量不守恒。
工程案例分析
问题:微通道散热器工况选型
某功率电子器件采用矩形微通道水冷散热,单通道截面 $200,\mu\mathrm{m} \times 500,\mu\mathrm{m}$,长度 10 mm,工质为水($\nu = 1.0\times10^{-6},\mathrm{m^2/s}$)。水力直径 $D_h = 2WH/(W+H) \approx 286,\mu\mathrm{m}$。设计要求在层流区间内选择流速,兼顾换热能力与泵功耗。
| 流速 (m/s) | $\Re$(按 $D_h$) | 流态 | 压降 (kPa) | 工程评价 |
|---|---|---|---|---|
| 0.5 | 143 | 层流 | 8.6 | 换热能力不足 |
| 1.5 | 429 | 层流 | 25.8 | 推荐工况 |
| 3.0 | 857 | 层流 | 51.6 | 压降偏大 |
| 5.0 | 1429 | 接近过渡区 | 86.0 | 不推荐 |
三维 CFD 校核表明,推荐工况下充分发展段压降与矩形通道理论值 $\Delta p = f, \rho L V^2 / (2 D_h)$(取矩形截面修正后的 Fanning 摩擦因子)吻合,偏差约 3%;入口发展段产生约 6% 的附加压降,这是一维理论无法捕捉、必须依靠 CFD 的局部效应。
结论与展望
本文沿”控制方程 → 投影解耦 → 离散格式 → 可运行代码”的主线打通了不可压缩 NS 方程数值求解的完整链路。走向工程级 CFD 仍需跨越几道门槛:湍流建模(RANS 的 $k$-$\varepsilon$/$k$-$\omega$ 模型、大涡模拟 LES)、非结构网格上的梯度重构与最小二乘插值、对流项的高分辨率格式(MUSCL、WENO),以及压力-速度耦合的 SIMPLEC/PISO 改进算法。对高 Reynolds 数壁面流动,壁面函数与边界层网格($y^+$ 控制)策略同样决定计算的可信度,这些内容将在后续文章中展开。
发表回复