PISO法

分类: 流体解析(CFD) | 综合版 2026-04-06
CAE visualization for piso algorithm theory - technical simulation diagram
PISO法 — 理論と非定常圧力補正

理论与物理

PISO法概述

🧑‍🎓

老师,PISO法和SIMPLE法有什么区别?


🎓

PISO(Pressure-Implicit with Splitting of Operators)是Issa于1986年提出的压力-速度耦合算法。与SIMPLE法需要通过多次外部迭代来收敛不同,PISO法在一个时间步内进行两次压力修正,无需外部迭代即可确保时间精度。


🧑‍🎓

不需要外部迭代,是不是在非稳态计算中更有优势?


🎓

没错。对于非稳态流动(LESDNS、动网格问题等),每个时间步都需要严格满足连续性方程。PISO虽然每个时间步的计算成本较高,但由于无需外部迭代,总体上通常更高效。


PISO算法步骤

🧑‍🎓

请告诉我具体步骤。


🎓

PISO法按以下步骤进行。


Step 1: 动量预测步(Predictor)


使用前一时间步的压力 $p^n$ 求解动量方程,得到中间速度 $\mathbf{u}^*$:


$$ a_P \mathbf{u}_P^* = H(\mathbf{u}^*) - \nabla p^n $$

Step 2: 第一压力修正步(First Corrector)


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

修正速度: $\mathbf{u}^{**} = \frac{H(\mathbf{u}^*)}{a_P} - \frac{1}{a_P}\nabla p'$


Step 3: 第二压力修正步(Second Corrector)


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

最终速度: $\mathbf{u}^{n+1} = \frac{H(\mathbf{u}^{**})}{a_P} - \frac{1}{a_P}\nabla(p' + p'')$


🧑‍🎓

与SIMPLE法只有一次压力修正并需要外部迭代不同,PISO法通过两次修正就完成了呢。


🎓

准确地说,PISO的第二次修正反映了相邻单元系数 $H$ 的更新,从而改善了SIMPLE的省略近似。结果是不再需要松弛系数,并且保持了时间精度。


与SIMPLE法的理论比较

🎓

我们来整理一下两者的本质区别。


特性SIMPLEPISO
压力修正次数1次/外部迭代2次(或以上)/时间步
外部迭代需要(10~数百次)不需要
松弛系数需要(0.2~0.8)不需要
主要用途稳态计算非稳态计算
时间精度伪时间推进真实时间精度
CFL限制无(隐式)推荐CFL < 1~5
🧑‍🎓

PISO法也有CFL数的限制吗?它不是隐式的吗?


🎓

时间离散本身是隐式的,但为了通过PISO的两次修正充分减少分裂误差,需要将CFL数控制在一定的范围内。实用上CFL < 1是安全的,最大推荐CFL < 5左右。CFL数过大会导致精度下降。


Coffee Break 闲谈

PISO在非稳态计算中强于SIMPLE的“数学原因”

PISO法(Pressure Implicit with Splitting of Operators)与SIMPLE法的决定性区别在于“在一个时间步内进行两次或以上的压力修正”。在非稳态流动中,由于一个时间步内流动变化很大,仅靠一次压力修正无法完全满足连续性方程(质量守恒)。PISO通过第二次修正,几乎可以将速度场的质量守恒误差降至零——这就是其理论上的优势。心脏瓣膜开闭模拟、发动机气缸内燃烧流等“流动瞬时变化”的问题之所以选择PISO,原因就在于此。稳态分析用SIMPLE,非稳态用PISO,这种区分使用至今仍是有效的基本策略。

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

数值解法与实现

PISO法实现细节

🧑‍🎓

实现PISO法时,H算子是什么?


🎓

这是在OpenFOAM语境中常见的表述。将动量方程离散化得到:


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

这里定义 $H(\mathbf{u}) = -\sum_N a_N \mathbf{u}_N + \mathbf{b}$。于是:


$$ \mathbf{u}_P = \frac{H(\mathbf{u})}{a_P} - \frac{\nabla p}{a_P} $$

写成这种形式后,速度就可以表示为压力梯度的函数。将其代入连续性方程,就能得到压力的泊松方程。


nCorrectors 与 nNonOrthogonalCorrectors

🧑‍🎓

OpenFOAM的设置里有个叫 nCorrectors 的参数,这是什么?


🎓

nCorrectors 是PISO压力修正步的次数。默认是2,但在CFL数较大或需要提高精度时,有时也会设为3~4。


nNonOrthogonalCorrectors 是为了修正网格非正交性而进行的额外迭代。在非正交网格中,压力拉普拉斯算子会产生非正交贡献,因此需要迭代修正。


```

PISO

{

nCorrectors 2;

nNonOrthogonalCorrectors 1;

}

```


PIMPLE法(PISO-SIMPLE混合)

🧑‍🎓

我听说过PIMPLE法,它和PISO有什么区别?


🎓

PIMPLE法是OpenFOAM中实现的PISO与SIMPLE的混合算法。它在时间步内进行外部迭代(类似SIMPLE的循环),同时最终用PISO修正来收尾。


```

PIMPLE

{

nOuterCorrectors 2; // SIMPLE式的外部迭代

nCorrectors 1; // PISO修正

nNonOrthogonalCorrectors 1;

}

```


参数值的含义
nOuterCorrectors = 1纯PISO
nOuterCorrectors > 1PIMPLE(PISO+SIMPLE)
nOuterCorrectors大、nCorrectors=0纯SIMPLE

PIMPLE法的优点是可以大幅放宽CFL数限制。只要nOuterCorrectors足够大,即使CFL >> 1 也能稳定计算。


🧑‍🎓

也就是说PIMPLE法“即使时间步长较大也稳定”且“能确保时间精度”,是取两者之长呢。


🎓

不过增加nOuterCorrectors会增加每个时间步的成本。如果CFL < 1,纯PISO(nOuterCorrectors=1)效率更高。


时间离散格式的组合

🧑‍🎓

时间离散化应该怎么做?


🎓

我们来比较一下与PISO法组合的常用时间离散格式。


格式精度稳定性OpenFOAM名称
隐式欧拉1阶无条件稳定Euler
二阶向后差分2阶无条件稳定backward
Crank-Nicolson2阶无条件稳定CrankNicolson

LES计算应使用二阶精度的 backward 或 CrankNicolson。RANS稳态计算的伪非稳态(pseudo-transient)用 Euler 就足够了。


Coffee Break 闲谈

PIMPLE法——融合PISO与SIMPLE优点的“取长补短”实现

用过OpenFOAM的人应该都见过PIMPLE这个名字。这是结合了PISO和SIMPLE的混合算法。其结构是在一个时间步内进行SIMPLE式的外部迭代(称为PIMPLE循环),同时在该循环内进行PISO的内部压力修正。其最大的优势是即使CFL数超过1也能稳定推进计算——也就是说,它兼具了SIMPLE“用大时间步长推进”的优点和PISO的“非稳态精度”。在LES或湍流的非稳态分析中,如果受限于CFL=0.5~1而感到困扰……这种场合下,这个实用的实现就非常宝贵。

迎风格式(Upwind)

一阶迎风:数值扩散大但稳定。二阶迎风:精度提高但有振荡风险。高雷诺数流动中必备。

中心差分(Central Differencing)

二阶精度,但Pe数 > 2时会产生数值振荡。适用于低雷诺数的扩散主导流动。

TVD格式(MUSCL、QUICK等)

通过限制器函数抑制数值振荡同时保持高精度。对捕捉激波或陡峭梯度有效。

有限体积法 vs 有限元法

FVM:自然满足守恒定律。CFD的主流。FEM:对复杂形状·多物理场有利。SPH等无网格法也在发展中。

CFL条件(库朗数)

関連シミュレーター

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

シミュレーター一覧

関連する分野

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