SIMPLE法

分类: 流体解析(CFD) | 综合版 2026-04-06
CAE visualization for simple algorithm theory - technical simulation diagram
SIMPLE法 — 理論と圧力-速度連成の基礎

理论与物理

SIMPLE法概述

🧑‍🎓

老师,我经常听到SIMPLE法这个名字,它是哪个词的缩写,具体是做什么的方法呢?


🎓

SIMPLE 是 Semi-Implicit Method for Pressure-Linked Equations 的缩写,是Patankar和Spalding于1972年提出的压力-速度耦合算法。在用有限体积法求解不可压缩Navier-Stokes方程时,它解决了如何一致地求出压力和速度的问题。


🧑‍🎓

压力和速度的耦合,为什么会那么棘手呢?


🎓

在不可压缩流动中,连续性方程(质量守恒)不包含独立的压力方程。因为密度恒定,所以无法通过状态方程求出压力。结果就是,需要找到同时满足动量方程和连续性方程的压力场和速度场。这就是压力-速度耦合问题。


控制方程

🧑‍🎓

请先告诉我基本的方程。


🎓

不可压缩流动的控制方程如下。


连续性方程质量守恒):


$$ \nabla \cdot \mathbf{u} = 0 $$

动量方程(Navier-Stokes方程):


$$ \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u} \cdot \nabla)\mathbf{u} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{u} $$

这里 $\mathbf{u}$ 是速度矢量,$p$ 是压力,$\rho$ 是密度,$\nu$ 是运动粘度系数。


🧑‍🎓

未知数有4个(u, v, w, p),方程也有4个,理论上应该是可解的吧?


🎓

是的。但是直接导出压力的Poisson方程并同时求解计算成本很高。SIMPLE法采用"预测-修正"的方法,高效地将这个耦合问题分离求解。


SIMPLE法算法

🧑‍🎓

请告诉我具体的步骤。


🎓

SIMPLE法的一次迭代由以下4个步骤构成。


Step 1: 用假定的压力 $p^*$ 求解动量方程


$$ a_P \mathbf{u}_P^* = \sum_N a_N \mathbf{u}_N^* + \mathbf{b} - \nabla p^* $$

由此得到假定速度 $\mathbf{u}^*$。这个速度场通常不满足连续性方程。


Step 2: 求解压力修正方程


为了消除连续性方程的残差,求解压力修正 $p'$:


$$ \nabla \cdot \left(\frac{1}{a_P} \nabla p'\right) = \nabla \cdot \mathbf{u}^* $$

Step 3: 修正压力和速度


$$ p = p^* + \alpha_p \, p' $$
$$ \mathbf{u} = \mathbf{u}^* - \frac{1}{a_P} \nabla p' $$

这里 $\alpha_p$ 是压力的松弛系数。


Step 4: 求解其他标量方程,并进行收敛判定


🧑‍🎓

$a_P$ 是动量方程的对角系数对吧。压力修正方程的右边是速度的散度,也就是说是在让连续性方程的残差趋近于零呢。


🎓

没错。反复迭代后 $\nabla \cdot \mathbf{u}^* \to 0$,质量守恒就得到了满足。


松弛系数的作用

🧑‍🎓

$\alpha_p$ 这个松弛系数是什么意思?


🎓

SIMPLE法中,由于在压力修正时省略了相邻单元系数($a_N$项)的贡献,存在近似,因此一次修正往往容易过度修正。所以通常对压力施加 $\alpha_p = 0.3$ 左右、对速度施加 $\alpha_u = 0.7$ 左右的亚松弛(under-relaxation)。根据经验法则,也有 $\alpha_u + \alpha_p \approx 1$ 的做法。


🧑‍🎓

原来如此,因为近似需要付出代价,所以需要松弛。这就是SIMPLE被称为"Semi-Implicit"的原因吧。


🎓

是的。如果要完全隐式(Fully Implicit)求解,就会变成耦合求解器,但SIMPLE法作为分离型(Segregated)求解器非常高效。


Coffee Break 闲谈

Patankar在1970年代的计算机上运行SIMPLE法的故事

开发了SIMPLE法(Semi-Implicit Method for Pressure-Linked Equations)的S.V. Patankar,在1972年挑战了在当时计算机上求解Navier-Stokes方程的难题。当时的内存容量不到现代智能手机的万分之一。他采取的策略是"将压力和速度分离,交替求解"的迭代法——这就是SIMPLE的本质。这种"不必一次性求解完美的联立方程组"的思路转换,是为了最大限度地利用有限计算资源的智慧结晶。即使在现代,数百万网格的CFD分析仍在使用SIMPLE,这得益于这种"分离型迭代"的简洁性和实际业绩。

各项的物理意义
  • 时间项 $\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$。直接关系到时间步长的稳定性

数值解法与实现

SIMPLE族算法比较

🧑‍🎓

除了SIMPLE,我还听说过SIMPLEC、SIMPLER等等,它们有什么不同呢?


🎓

有几个改进SIMPLE法的变体。我们来比较一下主要的几种。


SIMPLEC(SIMPLE-Consistent)

由Van Doormaal和 Raithby(1984)提出。在压力修正方程中部分考虑相邻单元系数影响的改进版。

$$ \mathbf{u} = \mathbf{u}^* - \frac{1}{a_P - \sum a_N} \nabla p' $$

使用 $a_P - \sum a_N$ 代替 $a_P$,可以使压力的松弛系数接近1.0。通常收敛会更快。

SIMPLER(SIMPLE-Revised)

由Patankar(1980)作为改进版提出。在压力修正之前,额外求解压力方程以估计更好的压力场的方法。

🧑‍🎓

SIMPLEC可以增大松弛系数,这很不错呢。实际工作中一般用哪个?


🎓
算法松弛系数(压力)收敛速度稳定性单次迭代成本
SIMPLE0.2〜0.5
SIMPLEC0.7〜1.0
SIMPLER0.5〜0.8高(需两次求解压力)

定常计算中SIMPLEC是实用的选择。非定常计算中则常用PISO法。


Rhie-Chow插值

🧑‍🎓

用有限体积法实现SIMPLE时,压力和速度的网格配置是怎样的?


🎓

这是非常重要的一点。使用同位网格(压力和速度配置在同一位置)时,会出现压力棋盘格式(checkerboard)的问题。


Rhie-Chow插值(1983)就是解决这个问题的方法,在计算单元面上的速度时,添加一个类似压力三阶导数的项,从而抑制棋盘格式振荡。


$$ u_f = \overline{u_f} - \overline{d_f} \left(\frac{\partial p}{\partial x}\bigg|_f - \overline{\frac{\partial p}{\partial x}\bigg|_f}\right) $$

现在大多数商用CFD代码都采用同位网格+Rhie-Chow插值。


🧑‍🎓

交错网格(速度和压力配置在不同位置)就不需要吗?


🎓

交错网格可以自然避免棋盘格式问题。但难以扩展到非结构网格,因此现代CFD代码中同位网格是主流。


线性方程组解法

関連シミュレーター

この分野のインタラクティブシミュレーターで理論を体感しよう

シミュレーター一覧

関連する分野

熱解析V&V・品質保証構造解析
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
关于作者