前面计算对流扩散问题的算例中都直接假设了计算域的流场是已知的(假设是均匀流场,各地流速的方向和大小都相同),然而,实际情况下流场是未知的,是需要求解的量,而其他输运量(如android 交错的网格 交错网格法_android 交错的网格)的对流通量是和当地速度的大小与方向密切相关的。因此,计算出流场是关键性的一步。本文主要介绍求解流场中面对的问题及解决方法。

二维稳态的动量方程和连续性方程如下:
android 交错的网格 交错网格法_解决方法_02
对比上式的动量方程和前面对流扩散问题的输运方程可见,此处动量方程中包含了压力梯度项,而输运方程中没有该项,可以认为是把压力项归入源项中处理了。然而,压力梯度是引起流体流动最直接的动力,在真实流场的计算分析中,压力梯度项是动量方程的主要源项,压力场也是需要求解的。

‘checker-board’压力场

公式android 交错的网格 交错网格法_二维_03android 交错的网格 交错网格法_二维_04android 交错的网格 交错网格法_二维_05方向的动量方程中都含有压力梯度项,在计算网格节点处的压力梯度时,我们需要用到单元界面的压力值来进行差分(如使用中心差分格式),而界面处的压力值未知,如果再使用各界面两侧的节点值来插值界面处的压力值,那么如果出现‘checker-board’压力场(每隔一个节点,压力相等。如下图所示的二维压力场)的情形则压力梯度就消失了。

android 交错的网格 交错网格法_解决方法_06


假设android 交错的网格 交错网格法_二维_04动量方程在网格单元android 交错的网格 交错网格法_cfd_08处离散,那么我们就需要计算压力android 交错的网格 交错网格法_cfd_09在节点android 交错的网格 交错网格法_cfd_08处的导数,

android 交错的网格 交错网格法_cfd_11

android 交错的网格 交错网格法_二维_05动量方程的压力导数也是类似计算,即使用节点两侧的节点值来差分近似该节点处的压力梯度。然而,从上图可见,任意节点处的压力梯度都为零。这就使得压力场无法再为速度场提供有效源项,这样计算出的压力场和速度场是不符合物理事实的。

交错网格

解决’checher-board’压力场问题的方法就是交错网格,即将速度场和压力场的离散网格错开,不再重合在一起,如下图。

android 交错的网格 交错网格法_android 交错的网格_13


图中向上的箭头(android 交错的网格 交错网格法_cfd_14)所示的交点代表的是android 交错的网格 交错网格法_解决方法_15速度场的网格,向右的箭头(android 交错的网格 交错网格法_android 交错的网格_16)所示的交点代表的是速度android 交错的网格 交错网格法_android 交错的网格_17的网格,黑色圆点代表的是压力场的网格。根据图中阴影可以看出,相对于压力场网格(I,J),速度android 交错的网格 交错网格法_android 交错的网格_17的网格(i,J)向左错开了半个网格单元的距离,速度android 交错的网格 交错网格法_解决方法_15的网格(I,j)向下错开了半个网格单元的距离。

有了交错网格后,不同变量的值保存在其各自的网格节点中。然后流动方程的离散也是在各自网格上进行,例如android 交错的网格 交错网格法_android 交错的网格_17的动量方程要在android 交错的网格 交错网格法_android 交错的网格_17的网格上离散,android 交错的网格 交错网格法_解决方法_15动量方程要在android 交错的网格 交错网格法_解决方法_15的网格上离散。以android 交错的网格 交错网格法_android 交错的网格_17动量方程为例,动量方程在点(i,J)离散,因此压力梯度是计算节点(i,J)处的压力梯度。

android 交错的网格 交错网格法_二维_25

同理android 交错的网格 交错网格法_解决方法_15方程的压力梯度

android 交错的网格 交错网格法_android 交错的网格_27

因为交错网格中压力网格和速度网格已经错开了,因此公式android 交错的网格 交错网格法_cfd_28android 交错的网格 交错网格法_android 交错的网格_29中的android 交错的网格 交错网格法_cfd_30android 交错的网格 交错网格法_cfd_31即使速度场网格单元的边界值,又是压力场网格单元的节点值,也就不需要像公式android 交错的网格 交错网格法_cfd_32那样通过插值获取边界值,这样即使遇到‘checker-board’压力场也不会出现压力梯度为零的情况。

注:
上文所谓的‘checker-board’压力场并不是指现实物理世界中的压力场,这是不存在的。在求解流动方程时,通常使用迭代方法求解,在迭代的过程中是可能出现这种‘checker-board’压力场的。如果在某一步迭代计算后压力场出现了‘checker-board’,那压力梯度作为速度场源项的作用就消失了,这回使得速度场不能向一个正确的方向迭代,最终导致迭代计算收敛到一个错误的结果。

参考资料

Versteeg H K , Malalasekera W . An introduction to computational fluid dynamics : the finite volume method = 计算流体动力学导论[M]. 世界图书出版公司, 2010.