CFD 控制方程:质量、动量、压力耦合与离散系统 / CFD Governing Equations, Pressure-Velocity Coupling, and Discretization
📅 创建时间:2026-07-20 🏷️ 标签:#CFD #NavierStokes #有限体积 #压力速度耦合 📚 前置知识:[[03-marine-fluid-physics]]
1. 质量守恒
流体不会凭空产生或消失。一般形式:
∂ρ/∂t + ∇·(ρu) = 0对于密度不变的不可压缩流体:
∇·u = 0这意味着流入一个控制体的净质量流量必须等于流出的净质量流量。
2. 动量守恒
Navier-Stokes 方程可以理解为流体版本的牛顿第二定律:
质量 × 加速度 = 压力力 + 黏性力 + 体积力不可压缩牛顿流体形式:
ρ(∂u/∂t + u·∇u) = -∇p + μ∇²u + ρg各项含义:
∂u/∂t:局部时间变化u·∇u:流体运动造成的对流变化-∇p:压力梯度μ∇²u:黏性扩散ρg:重力等体积力
非线性主要来自对流项 u·∇u。
3. 为什么压力没有独立演化方程
不可压缩流动中,压力的作用是调整速度,使速度满足质量守恒。
求解器通常采用预测-校正思想:
先用旧压力预测速度
→ 预测速度一般不满足 ∇·u=0
→ 建立压力修正方程
→ 修正压力和速度
→ 重复直到守恒常见算法:
- SIMPLE:稳态压力-速度耦合
- PISO:瞬态计算常用
- PIMPLE:组合 SIMPLE 与 PISO 思想
4. 湍流平均后的方程
RANS 把速度分解成平均量和脉动量:
u = U + u'代入并平均后会出现雷诺应力:
-ρ overline(u'u')这个新未知量需要湍流模型封闭。k-ε、k-ω 等模型本质上是在建立额外输运方程和经验关系。
因此增加湍流模型意味着每个网格单元增加未知量和方程。
5. 相分数方程
自由液面 VOF 方法需要求解相分数:
∂α/∂t + ∇·(αu) = 0实际算法可能加入界面压缩项,以减少数值扩散。密度和黏度由相分数混合:
ρ = αρwater + (1-α)ρair
μ = αμwater + (1-α)μair水气密度差很大,使压力和界面计算更具挑战。
6. 有限体积离散
有限体积法对每个控制体积分:
∫V ∂φ/∂t dV + ∫S ρuφ·n dS
= ∫S Γ∇φ·n dS + ∫V Sφ dV通过高斯定理,体积内的散度转化为控制体表面的通量。
离散后,每个单元形成类似关系:
aP φP = Σ aN φN + bP:当前单元N:相邻单元aP:中心系数aN:邻居系数b:源项和边界贡献
对全部单元组装后得到稀疏线性系统:
Aφ = b7. 为什么矩阵是稀疏的
一个控制体通常只与相邻控制体直接耦合,而不是与全部网格单元耦合。
如果有一百万个单元,完整矩阵有 10¹² 个位置,但每行可能只有十几个非零项。
因此 CFD 使用稀疏存储,只保存:
- 非零数值
- 对应列索引
- 每行起始位置
8. 非线性迭代
对流系数依赖当前速度,湍流参数也依赖当前流场,因此一次线性求解不能完成整个问题。
给定旧流场
→ 更新离散系数
→ 求解速度方程
→ 求解压力方程
→ 修正通量
→ 求解湍流/相分数
→ 检查残差和监控量
→ 进入下一轮每一轮中又包含多个稀疏线性方程求解。
9. 时间离散
一阶隐式
稳定、鲁棒,但数值耗散较大。
二阶格式
时间精度更高,但可能更敏感,需要更好的初始场和时间步。
时间步还受到 Courant 数影响:
Co = u Δt / Δx网格越小、速度越高,允许的时间步通常越小。
10. 边界条件怎样进入矩阵
入口、出口、壁面、对称面并不只是在界面上显示一个图标,它们会改变离散方程:
- 指定值:Dirichlet 条件
- 指定梯度或通量:Neumann 条件
- 混合条件:Robin 条件
- 周期条件:把两个边界的未知量耦合
不合理的边界条件可能导致矩阵奇异、流量不守恒或非物理反射。
11. CFD 计算量来自哪里
总成本 ≈
网格单元数
× 每个时间步的外迭代次数
× 每轮方程数量
× 每个线性方程的迭代次数
× 每次稀疏矩阵操作成本因此降低成本可以从多个方向入手:
- 减少不必要网格
- 采用更好的初始场
- 选择更合适的离散格式
- 使用更有效的预条件器
- 降低不必要输出
- 并行计算
下一篇:[[05-marineflow-workflow]]