PISO法
PISO法的理论基础
PISO法的概述
老师,PISO法和SIMPLE法有什么区别?
PISO(Pressure-Implicit with Splitting of Operators)是1986年由Issa提出的压力-速度耦合算法。SIMPLE法需要进行多次外部迭代(outer iteration)进行收敛,而PISO法在一个时间步内进行2次压力修正,无需外部迭代即可确保时间精度。
无需外部迭代是否在非定常计算中更有利?
PISO算法的步骤
请讲述具体步骤。
PISO法的步骤如下。
第1步:动量预测子(Predictor)
使用前一时间步的压力 $p^n$ 求解动量方程,得到临时速度 $\mathbf{u}^*$:
第2步:第一压力修正子(First Corrector)
修正速度: $\mathbf{u}^{**} = \frac{H(\mathbf{u}^*)}{a_P} - \frac{1}{a_P}\nabla p'$
第3步:第二压力修正子(Second Corrector)
最终速度: $\mathbf{u}^{n+1} = \frac{H(\mathbf{u}^{**})}{a_P} - \frac{1}{a_P}\nabla(p' + p'')$
SIMPLE中压力修正只进行一次,需要进行外部迭代,而PISO进行两次修正后即完成。
确切地说,PISO的第二次修正能够反映相邻单元系数 $H$ 的更新,从而改善SIMPLE的近似。因此无需松弛因子,并能保持时间精度。
SIMPLE法的理论对比
让我们整理两者的本质区别。
| 特性 | SIMPLE | PISO |
|---|---|---|
| 压力修正次数 | 1次/外部迭代 | 2次(及以上)/时间步 |
| 外部迭代 | 需要(10~数百次) | 不需要 |
| 松弛因子 | 必需(0.2~0.8) | 不需要 |
| 主要用途 | 定常计算 | 非定常计算 |
| 时间精度 | 伪时间演进 | 真实时间精度 |
| CFL限制 | 无(隐式) | 推荐CFL < 1~5 |
PISO也有CFL数的限制吗?不是隐式吗?
时间离散化本身是隐式的,但PISO的2次修正要充分降低分裂误差,需要控制CFL数在一定范围内。实际应用中CFL < 1较为安全,最大也建议CFL < 5左右。CFL数过大会导致精度下降。
PISO为何在非定常中比SIMPLE更强的"数学原因"
PISO法(Pressure Implicit with Splitting of Operators)与SIMPLE的决定性差异在于"在一个时间步内进行2次及以上的压力修正"。在非定常流中,1步的流动变化很大,1次压力修正无法完全满足连续方程(质量守恒)。PISO的第2次修正能将速度场的质量守恒误差降至近乎零——这是理论上的优势所在。心脏瓣膜启闭仿真、发动机缸内燃烧流动等"流场瞬时变化"的问题正是因此选用PISO。定常用SIMPLE、非定常用PISO的分工方案至今仍然有效。
PISO法的数值计算方法
PISO法的实现细节
实现PISO法时,H算子是什么?
这是OpenFOAM中经常出现的记号。将动量方程离散化后:
定义 $H(\mathbf{u}) = -\sum_N a_N \mathbf{u}_N + \mathbf{b}$,则:
这样就能把速度表示为压力梯度的函数。将其代入连续方程可得到压力的Poisson方程。
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 > 1 | PIMPLE(PISO+SIMPLE) |
| nOuterCorrectors大、nCorrectors=0 | 纯SIMPLE |
PIMPLE法的优势在于可大幅放宽CFL数限制。若nOuterCorrectors足够大,即使CFL >> 1也能稳定计算。
也就是说PIMPLE法既能"用大时间步稳定计算",又能"保证时间精度",两者兼得?
不过增加nOuterCorrectors会增加每时间步的成本。若能保持CFL < 1,纯PISO(nOuterCorrectors=1)效率更高。
时间离散化方案的组合
时间离散如何选择?
与PISO法配合的常见时间离散方案对比如下。
| 方案 | 精度 | 稳定性 | OpenFOAM名称 |
|---|---|---|---|
| Euler隐式 | 1阶 | 无条件稳定 | Euler |
| 2阶后向差分 | 2阶 | 无条件稳定 | backward |
| Crank-Nicolson | 2阶 | 无条件稳定 | CrankNicolson |
LES计算应使用2阶精度的backward或CrankNicolson。RANS定常的伪非定常(pseudo-transient)用Euler即可。
PIMPLE法——PISO与SIMPLE的"两全其美"实现
OpenFOAM用户肯定见过PIMPLE这个名字。它是PISO和SIMPLE的混合型混合算法。在一个时间步内既进行SIMPLE的外部迭代(PIMPLE循环),又进行PISO的内部压力修正。其最大优势是突破CFL < 1的束缚——即使CFL > 1也能稳定计算。也就是SIMPLE的"大时间步迅进"和PISO的"非定常精度"两大优点的融合。LES或复杂湍流的非定常解析中,当被CFL < 0.5~1的限制所困时,PIMPLE的价值就体现出来了。不过参数配置需要经验,当ΔtCFL达到设计值后,应该在计算的前几个周期反复调试nOuterCorrectors,找到"收敛足够、效率最高"的平衡点。
PISO法的实务应用
非定常CFD分析中的PISO实践
用PISO法进行非定常分析时,配置步骤是什么?
以典型案例(Re=200圆柱绕流层流涡脱落)为例说明。
第1步:时间步长的确定
从CFL条件确定时间步长:
若CFL = 0.5、最小网格尺寸 0.001m、最大流速 2 m/s,则:
$\Delta t = 0.5 \times 0.001 / 2 = 0.00025$ s
第2步:求解器配置
OpenFOAM情形:
```
PISO
{
nCorrectors 2;
nNonOrthogonalCorrectors 0;
}
```
Fluent情形:
- Transient Formulation: Second Order Implicit
- Pressure-Velocity Coupling: PISO
- PISO Parameters: Skewness Correction = 1, Neighbor Correction = 1
第3步:数据输出设置
结果保存频率怎么定?
设涡脱落周期为 $T$,则每周期采样20~50个时刻即可。Strouhal数 $St \approx 0.2$ 时,$T = D / (St \times U)$ 可估算。
LES计算中的PISO设置
LES(大涡模拟)计算时PISO配置要怎么改?
LES中空间与时间离散精度至关重要。
| 配置项 | 推荐值 | 理由 |
|---|---|---|
| 时间离散 | 2阶(backward) | 保证时间精度 |
| 对流项 | 2阶中心差分或混合 | 减少数值耗散 |
| CFL数 | < 1(理想≤0.5) | 控制分裂误差 |
| nCorrectors | 2~3 | 提高质量守恒精度 |
| 线性求解器残差 | $10^{-6}$ | 高精度解 |
LES中1阶风上不行吗?
1阶风上的数值粘性可能等于或超过LES的SGS(Sub-Grid Scale)粘性。这样就算解析了涡也会被数值耗散抹平。最低也要2阶,最好是中心差分类方案。不过中心差分无界,常用TVD限制器或混合方案(如linearUpwind)。
计算成本估算
非定常计算要花多少机时?
大概这样。
| 分析类型 | 网格规模 | 时间步数 | 典型CPU时间 |
|---|---|---|---|
| 2D涡脱落(层流) | 5万网格 | 20,000 | 数小时 |
| 3D RANS非定常 | 500万网格 | 10,000 | 数天 |
| 3D LES | 2000万网格 | 100,000 | 数周 |
| 3D DNS | 数亿网格 | 1,000,000+ | 数月(需HPC) |
LES和DNS的成本差距好大。
DNS要解析到Kolmogorov尺度,网格数随 $Re^{9/4}$ 增长。工业应用一般用LES或DES(分离涡模拟)。
把时间步减小就精度高?——PISO的现实
"非定常CFD时间步越小越准确"这个想法很危险。PISO中Δt缩小10倍,计算成本也增加10倍,但精度不一定增加10倍。反而太小的Δt会导致舍入误差累积。实务中的黄金法则是"选择把CFL数控制在0.5~1范围内的Δt"。有个真实故事:某工程师用Δt = 1e-6秒来模拟1秒的管道压力瞬变,算出100万步要1个月。计算CFL后发现Δt = 1e-4就够了,结果改为1万步、1天完成。PISO的关键是"定好CFL,一步到位",过度精细化反而是浪费。
PISO法的软件比较
非定常求解器的实现对比
各个CFD软件中PISO及其变种怎么实现?
| 求解器 | 非定常算法 | 时间精度 | 自适应时间步 |
|---|---|---|---|
| Ansys Fluent | PISO、SIMPLE系、耦合 | 1阶/2阶 | 有(全局CFL) |
| Ansys CFX | 耦合型+系数迭代 | 2阶后向差分 | 有 |
| STAR-CCM+ | SIMPLE系(含内部迭代) | 1阶/2阶 | 有 |
| OpenFOAM | PISO、PIMPLE | 1阶/2阶/C-N | 有(adjustTimeStep) |
Ansys Fluent 的PISO
Fluent的PISO有"Skewness Correction"和"Neighbor Correction"两个参数。Skewness Correction修正网格歪斜,Neighbor Correction控制相邻单元值的更新循环。通常保持默认值(1)就够了。
Fluent 2020R2起推荐用Pressure-Based Coupled Algorithm的Transient版,比PISO收敛更稳健。
OpenFOAM 的PISO/PIMPLE
OpenFOAM按用途提供不同求解器:
| 求解器名 | 用途 | 算法 |
|---|---|---|
| pisoFoam | 非压缩非定常 | 纯PISO |
| pimpleFoam | 非压缩非定常(大CFL) | PIMPLE |
| interFoam | VOF两相流 | PIMPLE + VOF |
| buoyantPimpleFoam | 浮力驱动流 | PIMPLE + 能量方程 |
pimpleFoam 是最通用的,CFL限制宽松,实务中常作为首选。
STAR-CCM+ 的非定常设置
Star-CCM+选Implicit Unsteady模型后,用内部迭代次数(Inner Iterations)控制质量。时间离散可选1阶或2阶。内部迭代通常5~20次,LES时应确保各时间步残差充分下降。
移动网格的联动
有转动或变形问题时怎么处理?
移动网格问题新增要求:GCL(几何守恒律)必须满足。PISO在时间步内的整合性好,与动网格兼容性优。
- 滑动网格:旋转机械(风机、泵)的非定常分析
- 动态网格/变形网格:流体-结构耦合(FSI)
- 重叠网格:大位移物体运动
OpenFOAM的dynamicMeshDict配合pimpleFoam最灵活。
Fluent的Transient SIMPLEC与OpenFOAM的pisoFoam——"非定常"实现哲学的差异
非定常求解器的选择因工具而异,名称与理念也不同。Fluent虽然用的是SIMPLE系(Transient SIMPLEC),内部也融入了PISO式补正,体现了混合思想。OpenFOAM则让用户明确选择pisoFoam或pimpleFoam,设计上更透明但也要求用户了解算法。Star-CCM+的"Segregated Solver"对非定常也适用,自适应时间步功能最完善。无论何种工具,理解"纯PISO"vs"PISO+SIMPLE混合"的本质区别会大大提升参数调试的效率。
PISO法的先进研究
PISO法在DNS/LES中的作用
DNS和LES中PISO怎么应用?
有限体积法的DNS/LES中,PISO是压力-速度耦合的标准手段。特别是OpenFOAM的dnsFoam和pisoFoam在学术研究中广泛应用。
DNS中数值误差直接影响物理尺度,所以PISO各步的收敛准则极严(残差 $10^{-8}$ 以下)。
分数步长法的关系
分数步长法(Fractional Step Method)和PISO是什么关系?
关系很密切。分数步长法(Chorin, 1968; Temam, 1969)分为:
1. 不含压力项的动量方程求仮速度
2. 求解压力Poisson方程
3. 修正速度达到无散
PISO可看作是该法在FVM上的实现。FEM体系(如Nek5000)叫分数步长法,FVM体系(OpenFOAM、Fluent)通常叫PISO。本质上是同一思想。
高阶精度FVM的组合
怎样进一步提高空间精度?
标准FVM通常2阶精度,可用以下方法提高:
- MUSCL重构:3阶梯度重构。OpenFOAM的linearUpwind接近
- WENO(加权本质无振荡):3~5阶精度。可用于含激波的问题
- 紧凑方案:高精度但并行困难
LES中滤波宽度由网格决定,高阶方案能扩大可解涡的范围。
谱元素法的比较
除FVM的PISO外,还有其他非定常CFD方法?
谱元素法(SEM)在高精度DNS/LES中很重要。代表代码有Nek5000和NekRS。多项式次数N越高精度指数级增长(p-refinement)。
但SEM在复杂形状网格生成困难,工业应用仍以FVM的PISO/PIMPLE为主。最近GPU加速的NekRS(Argonne国家实验室)实现了10亿网格点级DNS。
PISO法的故障排查
PISO法的典型问题
用PISO做非定常计算发散了,什么原因?
PISO发散的Top 5原因:
1. CFL数过大
症状:计算初期或流场展开后发散
对策:
- 设
maxCo≤ 0.5(OpenFOAM adjustTimeStep模式) - Fluent设Global Courant Number ≤ 1
- 切换到PIMPLE,增加nOuterCorrectors
2. 初值条件不当
症状:最初几时间步即发散
对策:
- 先用SIMPLE求定常解作为初值
- 速度不用零,用近似流场初始化
- 湍流量(k, omega)从强度与长度尺度合理初始化
3. 出口逆流
出口逆流会导致发散?
涡脱落等问题中出口常有局部逆流。
对策:
- 出口远离物体(物体宽度的20倍及以上)
- OpenFOAM:用
inletOutlet边界条件 - Fluent:启用Backflow Direction Specification
4. 网格质量问题
PISO特别要注意的质量指标:
| 指标 | 许可范围 | PISO特别注意 |
|---|---|---|
| 非正交角度 | < 70° | 用nNonOrthogonalCorrectors修正 |
| 歪斜度 | < 0.85 | 启用Skewness Correction |
| 网格体积比 | < 10:1 | 剧变易致压力振荡 |
5. 时间与空间离散的不协调
症状:计算稳定但结果非物理
原因:时间用2阶(backward),空间只用1阶风上 → 时间精度与空间精度脱节
对策:时间空间精度要对齐。时间2阶则空间也应2阶以上。
PISO vs PIMPLE 的选择判断
什么时候该用PISO,什么时候用PIMPLE?
也就是说拿不准就用PIMPLE是稳的,要精度就用PISO?
没错。PIMPLE的nOuterCorrectors=1其实就是PISO,所以初期用PIMPLE开始,稳定后减少nOuterCorrectors也是一策。
"用PISO算非定常,压力还在振荡" ——常见陷阱
用PISO非定常计算时,压力场出现锯齿状振荡——这类问题不少见。多数原因是"nCorrectors(修正循环)设成1"。默认为1的求解器中,每步只修正压力一次,PISO的真正优势发挥不出来。改为2~3次,振荡往往就消失了。另一常见陷阱是"边界条件的时间非协调"——入口条件若随时间阶梯式变化,这种不连续会在PISO循环中被放大。诊断PISO问题的黄金法则是:先看"参数设置"(nCorrectors等),再看"边界时间协调性"。
相关主题
价值
详细
错误