不可压Navier-Stokes方程
不可压Navier-Stokes方程的理论基础
概览
老师,Navier-Stokes方程是CFD的基础吧。请详细讲解不可压情况。
这是CFD求解中最基础和最重要的方程。不可压NS方程描述牛顿流体的粘性流动。由连续方程和动量方程组成。
控制方程
不可压NS方程由以下两个方程组成。
动量方程(牛顿第二定律):
请解释各项的物理意义。
用分量形式($x$方向)表示会更清楚。
雷诺数
雷诺数与NS方程有什么关系?
用特征速度 $U$ 和特征长度 $L$ 进行无量纲化,雷诺数作为唯一参数出现。
| Re范围 | 流动特征 | 典型例子 |
|---|---|---|
| Re < 1 | 蠕动流(Stokes流) | 微生物游泳、MEMS |
| 1 < Re < 2300 | 层流 | 管内发展流 |
| 2300 < Re < 4000 | 过渡区 | 管内流(不稳定) |
| Re > 4000 | 湍流 | 大多数工业流动 |
方程的数学特性
NS方程的解的存在性和唯一性是未解决问题吧?
没错。三维NS方程光滑解的全局存在性和唯一性是Clay数学研究所千禧年奖问题之一(奖金100万美元)。工程上通过DNS(直接数值模拟)可获得有限时间、有限区域的解,但数学上的证明仍未完成。
方程的非线性来自对流项 $(\mathbf{u}\cdot\nabla)\mathbf{u}$。这一项是产生湍流、混沌和涡破裂等复杂现象的源头。
100万美元的悬赏,至今无人破解
不可压Navier-Stokes方程的一个悖论在于"解是否必然存在"这一基本问题在数学上未被证明。这是Clay数学研究所2000年选定的"千禧年问题"7道题目中的一道,解决者奖金100万美元(约1.5亿日元)。工程师每天用CFD运行的计算,从严格意义上讲是"在求解一个不知道是否有解的方程"——这确实是个相当荒诞的处境。而在7个千禧年问题中,迄今仅有1个被解决——Navier-Stokes仍处于人类未曾涉足的领域。
不可压Navier-Stokes方程的数值计算方法
空间离散化
如何数值求解NS方程?
有限体积法(FVM)是商用CFD的标准。将计算域分割为单元,对每个单元离散化守恒律的积分形式。
对流项离散化
对流项的格式选择直接影响精度和稳定性。
| 格式 | 精度 | 稳定性 | 数值扩散 | 用途 |
|---|---|---|---|---|
| 一阶迎风 | $O(h)$ | 非常稳定 | 大 | 初始计算、收敛困难 |
| 二阶迎风 | $O(h^2)$ | 稳定 | 中 | 一般定常计算 |
| QUICK | $O(h^3)$ | 略不稳定 | 小 | 高精度计算 |
| 中心差分 | $O(h^2)$ | 不稳定(高Pe) | 无 | LES |
| 有界中心差分 | $O(h^2)$ | 稳定 | 最小 | LES标准 |
为什么LES要用中心差分?
数值扩散会人为减衰SGS涡。LES需要保留物理涡,只用SGS模型进行散逸。但中心差分容易产生棋盘式不稳定,所以实用上采用有界中心差分。
时间积分
非定常计算的时间积分格式比较。
| 格式 | 精度 | 稳定性 | CFL约束 |
|---|---|---|---|
| 一阶隐式(后退欧拉) | $O(\Delta t)$ | 无条件稳定 | 无 |
| 二阶隐式(BDF2) | $O(\Delta t^2)$ | 无条件稳定 | 无 |
| Crank-Nicolson | $O(\Delta t^2)$ | 无条件稳定 | 可能产生振荡 |
| 显式(RK4等) | $O(\Delta t^4)$ | 条件稳定 | $CFL < 1$ |
CFL条件
经常听到CFL数这个概念,具体是什么意思?
Courant-Friedrichs-Lewy数表示一个时间步内信息跨越多少个网格。
显式格式需要 $CFL < 1$ 才能稳定。隐式格式没有这个约束,但为了保证时间精度通常取 $CFL < 5$~20。LES常规上遵守 $CFL < 1$。
线性求解器
离散化后的线性方程组求解也很关键。
| 目标方程 | 推荐求解器 | 备注 |
|---|---|---|
| 压力(泊松方程) | AMG(代数多重网格) | 收敛最困难,占计算时间50~80% |
| 动量 | ILU预处理BiCGSTAB | 收敛相对容易 |
| 标量(温度等) | Gauss-Seidel或ILU | 线性问题 |
SIMPLE法的诞生——压力和速度的"心理战"
不可压流动的最大难题是"没有压力方程"。直接同时求解速度和压力会导致方程组奇异。1972年Patankar和Spalding提出的"SIMPLE法"算法巧妙地解决了这个困境:先用暂定的压力求解速度,再从速度推导出压力修正,然后重复求解速度。这个看似简单的思路是现代商用CFD的基石——今天你在Fluent上看着"Iterations"滚动的背后,50年前的两位天才的智慧在默默运转。
不可压Navier-Stokes方程的实际应用
实际应用
实际应用中求解NS方程的基本流程是什么?
这是标准流程。
分析流程
1. 问题定式化:计算Re数,判定层流/湍流。确认不可压条件($Ma < 0.3$)
2. 几何与网格:从CAD提取流体域,生成含边界层网格
3. 物理模型设置:湍流模型、定常/非定常、是否包含能量方程
4. 边界条件:入口(速度或压力)、出口(压力)、壁面(no-slip)、对称面
5. 求解:运行求解器,监测残差和监视量
湍流模型选择指南
湍流模型这么多,不知道怎么选…
整理最常用模型的用法。
| 模型 | 计算成本 | 分离预测 | 推荐用途 |
|---|---|---|---|
| Spalart-Allmaras | 低 | 中等 | 飞机外壳、附加流 |
| Realizable k-epsilon | 低 | 弱 | 管内流、混合、初步检查 |
| SST k-omega | 中 | 良好 | 通用。不知道选什么就用这个 |
| Transition SST | 中 | 捕捉过渡 | 低Re翼型、汽轮机 |
| DES/IDDES | 高 | 非常好 | 大规模分离、非定常力 |
| LES(WALE/Sigma) | 非常高 | 最精确 | 声学、燃烧、学术 |
网格收敛性验证
网格收敛性怎么确认?
推荐用GCI(网格收敛指数)方法。用三个网格密度(粗、中、密)计算关键量,用Richardson外推估计真值。
其中 $F_s = 1.25$(安全系数),$\epsilon$ 是中密和密网格结果差,$r$ 是网格比,$p$ 是收敛阶数。GCI低于5%可认为收敛充分。
典型基准问题
| 问题 | Re | 验证量 | 参考数据 |
|---|---|---|---|
| 方腔流(Lid-driven cavity) | 100~10000 | 中线速度分布 | Ghia et al. (1982) |
| 圆柱尾流 | 40~200 | Strouhal数、阻力系数 | 多种实验 |
| 后向台阶 | 36000 | 再附着长度 | Driver & Seegmiller |
| NACA0012翼型 | $6\times10^6$ | 升力系数、阻力系数 | 风洞数据 |
应该先用基准问题验证自己的计算环境,才进行实际分析吧。
完全同意。如果基准问题都做不好,实际问题的结果根本不可信。
"收敛"≠"正确"
CFD实务的常见陷阱:残差降到1e-6,高兴地喊"收敛了!",结果一检查流量不平衡——这种事工程上天天发生。在求解不可压N-S方程时,残差是"迭代计算的波动幅度",而不是"物理正确性"的保证。真正的检查清单还包括:①连续方程的质量流平衡,②能量守恒,③壁面y+确认等多项。只靠"残差消失=求解完成"会导致看似漂亮但物理破绽的结果堂堂正正地进入报告。
不可压Navier-Stokes方程的软件比较
主要CFD求解器比较
能比较一下求解不可压NS方程的主要求解器吗?
整理商用和开源的主要求解器。
| 求解器 | 开发方 | 离散化 | 主要优势 |
|---|---|---|---|
| Ansys Fluent | Ansys Inc. | FVM(单元中心) | 通用性、GUI、支持 |
| Ansys CFX | Ansys Inc. | FVM(顶点中心) | 耦合求解器、涡轮机械 |
| STAR-CCM+ | Siemens | FVM(单元中心) | 自动网格、多面体 |
| OpenFOAM | 开源 | FVM(单元中心) | 自由度、可扩展性、免费 |
| COMSOL | COMSOL AB | FEM | 多物理耦合 |
求解器类型区别
Fluent的Pressure-Based和Density-Based有什么区别?
不可压流用Pressure-Based求解器。
| Pressure-Based | Density-Based | |
|---|---|---|
| 适用对象 | 不可压~低速可压 | 高速可压(Ma > 0.3) |
| 压力确定 | 压力修正法 | 状态方程 |
| 耦合 | 分离或耦合 | 耦合(隐式) |
| 适用Ma数 | 0~数Ma | 全Ma数 |
OpenFOAM求解器选择
OpenFOAM求解器太多了,不知道选哪个。
整理不可压的主要求解器。
| 求解器名 | 定常/非定常 | 算法 | 用途 |
|---|---|---|---|
| simpleFoam | 定常 | SIMPLE | 最基础 |
| pisoFoam | 非定常 | PISO | 通用非定常 |
| pimpleFoam | 非定常 | PIMPLE(PISO+SIMPLE) | 大CFL数时稳定 |
| icoFoam | 非定常 | PISO(仅层流) | 学习用、低Re |
| adjointOptimisationFoam | 定常 | 随伴法 | 形状优化 |
许可证和成本
| 求解器 | 许可形式 | 年成本估算 |
|---|---|---|
| Fluent | 商业(节点锁定/浮动) | 数百万日元~ |
| STAR-CCM+ | 商业(令牌制) | 数百万日元~ |
| OpenFOAM | GPL(开源) | 免费(支持收费) |
| COMSOLCFD模块 | 商业(模块分售) | 百万日元~ |
OpenFOAM免费,但缺乏支持是个问题。
ESI Group和CFD direct提供付费支持。大学和研究机构的OpenFOAM社区很活跃,信息获取也容易。商业工具相当于为稳定性和支持付费。
ANSYS和OpenFOAM的根同源——伦敦帝国大学
追溯主要CFD代码的历史,许多都源自伦敦帝国大学Spalding教授的实验室——那个发明SIMPLE法的地方。Fluent的原始版本也由此衍生,后被Ansys收购。OpenFOAM也继承了同系的思想。换句话说,无论用昂贵的商业高级许可还是免费的OpenFOAM,数值格式的"基因"几乎相同。这也解释了为什么不同厂商的CFD计算结果往往接近——他们在某种意义上传承自同一源头。
不可压Navier-Stokes方程的先端研究
前沿课题
NS方程数值求解的最新动向是什么?
介绍几个重要趋势。
DNS(直接数值模拟)的发展
DNS直接求解NS方程,不用湍流模型。由于需要解析所有尺度,单元数按 $N \propto Re^{9/4}$ 缩放。
| Re_tau | 单元数(通道流) | 计算资源 |
|---|---|---|
| 180 | 约$10^6$ | 工作站 |
| 1000 | 约$10^9$ | 中等HPC |
| 5200 | 约$10^{11}$ | 大型HPC(Lee & Moser 2015) |
| 工业Re($10^6$以上) | $10^{18}$以上 | 目前不可能 |
工业规模的Re数用DNS完全不可能啊。
正是。所以RANS和LES的精度改进仍然至关重要。
GPU加速CFD
利用GPU并行性的CFD在快速普及。
- Fluent(2024+):原生GPU求解器。最高10倍加速
- AmgX:NVIDIA的AMG库。高速压力泊松求解
- LBM:格子Boltzmann法与GPU兼容性特别好
物理信息神经网络 (PINN)
PINN是将NS方程嵌入损失函数的神经网络。
无需网格,可处理逆问题,但目前还远非高Re湍流的完全方案。在与实验数据融合(数据同化)方面有前景。
高精度方法
超越FVM二阶精度的方法也在进展。
| 方法 | 精度 | 特点 |
|---|---|---|
| 谱单元法(Nek5000/NekRS) | 高阶(p阶) | DNS/LES最优 |
| 不连续Galerkin(DG) | 任意高阶 | 也能处理激波 |
| Flux重构(FR) | 任意高阶 | DG的高效实现 |
| 格子Boltzmann(PowerFLOW) | 二阶 | 空气动力声学强项 |
一个百年前的方程,如今仍在如此活跃的研究,真令人惊讶。
NS方程包含了流体力学的全部内核。随着计算机进步和算法创新,能解决的问题范围在不断拓展。
DNS计算的惊人成本
湍流直接数值模拟(DNS)是求解不带模型的Navier-Stokes方程的终极手段,但所需网格数按Re数的9/4次方增长。试图用DNS模拟汽车周围的流(Re≈10^7),单纯计算就会达到地球上所有计算机束手无策的规模。目前DNS实用范围仅限于Re数几千的通道流等。记住"DNS能用=流动非常小、非常慢",就能直观感受论文中尖端成果的分量。
不可压Navier-Stokes方程的故障排除
故障排除
求解NS方程常见的故障有哪些?
发散和非物理结果是两大问题。
1. 计算发散
现象:残差急剧增加,速度或压力变为$10^{20}$等异常值。
| 原因 | 诊断 | 对策 |
|---|---|---|
| CFL数过大 | 检查时间步 | $\Delta t$ 减半 |
| 网格质量差 | 检查最小正交性 | 修正质量低于0.1的单元 |
| 边界条件矛盾 | 入出流量平衡 | 重新审视BC |
| 初始条件不适当 | 初始速度场非物理 | 用势流初始化 |
| 松弛系数过高 | 检查SIMPLE设置 | 尝试压力0.3,动量0.5 |
2. 残差停滞
残差在$10^{-3}$左右就不动了…
对策优先顺序:
1. 检查并改进网格质量
2. 从二阶格式开始,用一阶初始化后切换
3. 调整松弛系数(过高会发散,过低会停滞)
4. 切换至耦合求解器(Fluent)
5. 改进初始条件(插值粗网格解)
3. 非物理逆流
现象:出口出现大量"Reversed Flow"(逆流)警告。
原因:出口位置过于靠近流动分离·再循环区。
对策:
- 将出口延伸下游(管径10~20倍)
- Fluent启用Prevent Backflow选项
- 设置逆流时的温度和湍流量值
4. 压力振荡(棋盘式)
现象:压力场呈棋盘式图案振荡。
原因:同位网格上Rhie-Chow补间不充分,或网格非正交性高。
对策:
- 压力离散化改为PRESTO!(Fluent)
- OpenFOAM增加nNonOrthogonalCorrectors
- 改进网格正交性
5. 定常计算无法收敛(物理原因)
怎么改进网格都不收敛的情况…
流动本身可能是非定常的。 卡门涡街(Re > 47时发生)这样的物理非定常流用定常计算会让残差持续振荡。此时应切换到非定常计算。监视量出现周期性振荡就说明应该用非定常求解。
不懂物理的话,数值问题和物理现象根本分不清。
完全同意。CFD调试需要扎实的流体力学基础。
发散的真凶,9成是边界条件
"计算发散了!"——CFD初学者的第一道坎。乍看上去怀疑网格质量和时间步,但现场经验法则说"发散原因9成是边界条件设置失误"。比如,入口设定为速度型,出口却也固定压力,方程组会变得数学上不定而发散。不可压流对压力边界的设置特别敏感,只要记住"至少在一处绝对固定压力"这个原则,大多数神秘发散都能预防。