1. 介绍
压力速度耦合(Pressure-velocity Coupling)问题仅在基于压力求解器时才会出现,用于控制压力和速度的迭代方式。为什么会产生压力和速度耦合的问题呢??
这主要是因为动量方程中包含了压力场和速度场这两个未知数,而压力场没有单独的方程进行求解,因此求解过程需要先假定压力场,根据动量方程先求解出速度场,然后再使用连续性方程对压力场进行修正,修正的压力场再对速度场进行更新。
不同的压力速度耦合方式可以控制压力和速度更新顺序,比如分别更新segregated方式,或者同时更新Coupled方式
注:基于密度的求解器不需要考虑压力速度耦合问题,因为基于密度的求解器是可压缩流动,方程组中包含了理想气体状态方程,可用于求解压力
当勾选Density-Based后,Solution Methods界面不再出现Pressure-velocity Coupling选项
2. 算法类型
segregated算法和coupled算法主要不同的地方在于如何对压力进行修正
segregated算法主要有以下类型:
SIMPLE
SIMPLEC
PISO
coupled算法主要类型:
Coupled
3. SIMPLE和SIMPLEC算法
先介绍两种segregated算法SIMPLE和SIMPLEC算法
3.1 SIMPLE算法
SIMPLE算法使用速度和压力修正之间的关系来满足质量守恒,同时获得压力场。
先假设初始的压力场p*,通过动量方程可以求得面质量流量Jf*。(上标*表示为假设值)
但由于上述的压力场是假设的,因此求得的Jf*是不满足质量守恒方程的,需要对其进行修正,Jf’表示修正项,则修正后的真实值Jf为(上标’表示修正值)
经过修正后,Jf满足质量守恒方程。SIMPLE算法中假设修正项Jf’公式为
其中的c0及c1即相邻的网格cell
SIMPLE算法通过对质量守恒方程进行推导可得到压力修正方程,p’为压力修正项
因此压力真实值p为
为了加强收敛性,对p’进行一定的缩小乘以系数αp
αp即为下图中的亚松弛因子,参考文章
3.2 SIMPLEC算法
SIMPLEC算法与SIMPLE算法的流程基本相同,所不同的是对Jf的修正,修正公式如下:
已经证明,SIMPLEC算法可以明显加速收敛。
SIMPLEC算法涉及到网格的偏斜度修正Skewness Correction。当网格的Skewness(网格的一个质量标准)较大时,相邻网格的压力修正梯度即(p’c0-p’c1)并不准确,因此在压力修正后,需要重新计算压力修正梯度,并用于修正Jf。
网格偏斜度较大时,Skewness Correction可以显著地增加计算的收敛性。默认设置为0,表示不修正;大于0表示修正。
4. 适用情况
SIMPLE算法是默认设置,但大多数的问题使用 SIMPLEC算法更好,尤其是当亚松弛因子较大时。
对于简单问题,如不附加其他模型的层流问题,使用SIMPLEC算法,能够快速收敛。在SIMPLEC算法下,压力校正欠松弛因子通常设置为1.0,有助于加速收敛。
但是对于一些问题,将压力校正欠松弛因子增加到1.0可能会由于高网格偏度而导致收敛不稳定。在这种情况下,使用低欠松弛因子(如0.7)或者使用SIMPLE算法,可以帮助收敛。
对于复杂的问题,如湍流或者涉及到其他的物理模型,SIMPLE算法和SIMPLEC算法收敛速度基本相同。
通过以上分析,SIMPLE和SIMPLEC算法,优先选择SIMPLEC算法。
5. PISO算法
PISO算法是对SIMPLE算法的一种改进,是基于压力和速度修正之间的更高程度的近似关系。前面我们提过SIMPLE算法和SIMPLEC算法在对压力进行修正后,得到新的速度和通量是不满足动量方程的,需要重复计算直到满足动量守恒为止。
这种计算方式比较耗费资源。为了提高计算的效率,PISO算法在SIMPLE算法的基础上进行了两个额外的校正:neighbor correction和skewness correction。
5.1 Neighbor Correction
所谓的Neighbor Correction就是将SIMPLE算法和SIMPLEC算法所需的重复计算移动到压力修正方程中。
这使得计算时会多出一个或多个额外的PISO循环,但通过这种方式后,修正后的速度能够更接近地满足连续性方程和动量方程。
因此PISO算法在每次迭代中需要更多的CPU时间,但它可以显著减少收敛所需的迭代次数,特别是对于瞬态问题。
默认的设置都为1,表示考虑了修正。设置为0,表示不进行修正。
5.2 Skewness Correction
前面的SIMPLEC算法也提到过Skewness Correction,这里的Skewness Correction和前面的相同。当网格的Skewness(网格的一个质量标准)较大时,相邻网格的压力修正梯度即(p’c0-p’c1)并不准确,因此在压力修正后,重新计算压力修正梯度,并用于修正Jf。
网格偏斜度较大时,Skewness Correction可以显著地增加计算的收敛性。默认设置为1,表示修正;设置为0,表示不进行修正。
5.3 Skewness - Neighbor Coupling
对于Skewness比较大的网格,同时进行Neighbor Correction和Skewness Correction的修正可能会导致发散或稳定性不好。
PISO的一种处理方式是对每个迭代步的Neighbor Correction应用一次或多次Skewness Correction。这种方式会耗费更多的资源,但也会使得压力速度修正更加准确。
5.4 适用条件
1) 对于所有瞬态计算,强烈推荐使用带有neighbor correction的PISO算法,特别是当使用较大的时间步长时(Fluent帮助文档)。PISO对于较大的时间步长,高松弛因子如动量和压力的亚松驰因子为1.0,可以保持计算的稳定性。
2) 对于LES湍流模型,一般需要使用较小的时间步长,使用PISO会增加计算成本,可以使用SIMPLE或者SIMPLEC算法。
3) 对于稳态问题,带有neighbor correction的PISO算法与SIMPLE和SIMPLEC算法没有任何明显的优势。
4) 无论稳态还是瞬态,只要网格歪斜度较大,都推荐使用带有skewness correction的PISO算法
5) skewness correction的应用
如果使用带有neighbor correction的PISO算法,则所有方程的亚松驰因子都可以调整到1.0或者接近1.0;
如果使用带有skewness correction而不带有neighbor correction的PISO算法,推荐将动量方程和压力方程的亚松驰因子之和设置为1.0,如动量设置为0.7,压力设置为0.3。
对于大多数问题,不需要禁用Skeweness-Neighbor coupling。但是对于高歪斜度网格问题,建议不勾选Skeweness-Neighbor coupling。
6. Coupled算法
基于压力的分离算法(SIMPLE算法、SIMPLEC算法和PISO算法)分别求解了动量方程和压力修正方程,这种半隐式算法收敛速度较慢。
耦合算法(Coupled)同时求解动量方程和连续性方程。通过对动量方程中压力梯度项和面质量通量的隐式离散,可以实现一种全隐式的算法。
Coupled算法中动量方程中的压力梯度项离散形式
动量方程可以离散为
连续性方程的离散形式
最终,这个控制方程可以写成矩阵的形式
其中的A,X和B分别为
Coupled算法可以通过一组方程可以直接耦合求解,而不需要像SIMPLE算法那样分开求解压力和速度。
Coupled算法相较于分离方法有一定的优点,对于稳态单相问题,此算法更稳定、高效。
在某些情况下,使用多孔跳跃边界条件,耦合算法可能会遇到收敛问题。如果遇到这种情况,建议更换分离式算法。
6.1 不勾选Pseudo Transient
选择Coupled算法,而没有勾选Pseudo Transient。需要在Solution Controls界面设置库朗数,默认值200。
需要设置显式松弛因子Explicit Relaxation Factors,默认为0.5。如果网格歪斜度较大,可将值设置为0.25以增强收敛。
如果出现diverges in the AMG solver这种发散信息,说明库朗数过高,需要降低。但不建议将库朗数降低到10以下,可以将Coupled算法更改为分离算法。
在大多数瞬态计算中,CFL数应该设置成很大的数如10^7,而显式松弛因子设置为1.0
6.2 勾选Pseudo Transient
需要对伪瞬态进行设置,参考四十三、Fluent增强收敛性-伪瞬态计算
总结:对于稳态问题,推荐使用SIMPLEC算法。而对于稳定单相流问题,推荐使用Coupled算法(勾选伪瞬态可以大大加快收敛);对于瞬态问题,推荐使用PISO算法。