压力-速度耦合求解器
理论:同时求解压力与速度
概述
我的CFD软件有“SIMPLE”和“Coupled”两个选项。有什么区别,该选哪个?
不可压缩流动中没有直接确定压力的方程,压力是“使速度满足连续方程”的那个值。SIMPLE法先用动量方程暂求速度,再修正压力使其满足连续方程,交替进行。每次很轻,但只能一点点地纳入压力与速度的耦合,往往迭代很多。耦合求解器把两者组装成一个大方程组同时求解,每次更重,但迭代少得多。
耦合方程组
$A_u$、$A_v$ 为动量算子(对流与扩散),$G$ 为压力梯度,$D$ 为散度(连续方程)。非线性对流项用上一次迭代的速度固定(Picard法),每次外迭代都求解这个方程组。
SIMPLE修正
SIMPLE法只用动量方程对角项 $a_P$ 近似压力修正,所以不用松弛系数 $\alpha_u$、$\alpha_p$ 抑制更新就容易发散。这种近似正是迭代次数多的原因。
如何求解压力这一长期难题
SIMPLE法由Patankar和Spalding于1972年发表,作为用少量内存求解不可压缩流动的方法,成为此后通用CFD软件的标准——当时的计算机在内存上不可能把全部未知数作为一个方程组求解。21世纪初,代数多重网格等高效求解大型方程组的技术与内存增长齐备,耦合求解器才在商用软件中实用化。求解方法的选择随着计算机的进步而变化。
算例:用方腔流比较
用相同离散(交错网格、一阶迎风)分别以耦合求解器和SIMPLE法求解顶盖驱动方腔流,比较残差降到10⁻⁶所需的外迭代次数(计算时间受实现影响很大,这里用迭代次数比较):
| 条件 | 耦合求解器 | SIMPLE(0.7/0.3) | SIMPLE(0.5/0.2) | 中心线最小速度 |
|---|---|---|---|---|
| 16分、Re 100 | 9 | 110 | 240 | −0.170 |
| 32分、Re 100 | 9 | 355 | 810 | −0.189 |
| 64分、Re 100 | 8 | 1,215 | 2,825 | −0.201 |
| 32分、Re 400 | 13 | 335 | 760 | −0.200 |
网格加密后,只有SIMPLE法的迭代越来越多。
对。SIMPLE法只能把压力信息一点点传给相邻单元,单元越多,传遍全域越费时。耦合求解器每次都解整体方程组,几乎不受网格数影响。两者最终得到相同的解(差约10⁻⁵),所以选择是速度与内存的问题,而非精度。中心线最小速度随网格加密接近−0.201,但达不到文献值−0.211——这是一阶迎风的数值扩散所致,与求解方法无关。
选择与设置
- 内存宽裕、大网格稳态计算时,尝试耦合求解器。
- 用SIMPLE法时,松弛系数不要降得太低(会使迭代增加一倍以上)。
- 耦合求解器用库朗数(伪时间步长)调节稳定性,发散时降低。
- 瞬态计算中,根据每步内迭代次数与时间步长的平衡来选择。
- 不只看残差,还要以监测点值不再变化来判断收敛。
“改用耦合就内存不足”
某泵的稳态计算用SIMPLE法要2天,切换为耦合求解器后中途因内存不足停止。耦合求解器把压力和速度的全部未知数作为一个方程组处理,同样网格内存用量为数倍。增加计算节点、提高并行数后,迭代次数约为十分之一,计算时间约为四分之一。速度是用内存换来的,要结合计算资源来选择。
常见错误
错误与对策
| 错误 | 后果 | 对策 |
|---|---|---|
| 认为解法改变精度 | 漏掉网格和格式问题 | 精度由离散决定 |
| 松弛系数降得太低 | 迭代大幅增加 | 从默认值逐步调整 |
| 不确认内存就用耦合 | 内存不足停止 | 估算并行数和内存 |
| 库朗数过大 | 耦合求解器发散 | 从小开始逐步提高 |
| 只凭残差判断收敛 | 监测量未收敛 | 也确认监测点 |
我想了解相关内容。
详细
错误