导读:介绍CFD计算中变量梯度的求解,分析Green-Gauss Cell Based和Green-Gauss Node Based两种方法。
在CFD计算中,变量均会被储存在网格中心,无论是在Openfoam、Fluent、Star CCM上面的计算,都遵循这个规则。
(这与Ansys CFX有区别,变量在CFX中是存储在节点上。)
CFD代码会在网格中心计算这些变量。
但如果想得到这些变量的梯度呢?需要注意的是,在笛卡尔坐标系中,变量的梯度具有三个分量,以温度为例:
如果已经网格中心的变量值,则其梯度也就容易获得。
为什么在CFD计算需要这些梯度?
(1)如果对流项采用线性迎风差分方案时,这时候需要用到变量的梯度:
(2)对于一些质量差的网格进行非正交修正,需要用到梯度;
(3)计算某些源项时,会用到变量的梯度。
在CFD计算中,都需要先设定好梯度的计算方案,比方说在OpenFoam的计算中,这里选择的是高斯离散:
比方说在FLuent计算中,需要设置好空间的离散方案,这里选择的是最小二乘单元格:
当网格沿着 方向时,通过一个网格面的梯度就可以表示为:
其中 表示相邻网格的距离。当然变量在三个方向都有梯度,在Y方向,Z方向。对于网格的左表面也是用同样的方法来计算梯度。
对于网格 的梯度,对于一维而言,可以取左右平面的梯度的平均值来获得。但在三维中这种方式并不准确。
在三维中,网格具有多个指向不同方向的网格面,网格面也会有三角形,四边形,多边形等。
目前有三种方法可以计算网格中心变量的梯度。
(1)Green-Gauss Cell Based(线性方案)
(2)Green-Gauss Nodeed(节点线性方案)
(3)Least-Squares(最小二乘法)
本文着重介绍前面两种方案。
该方法基于高斯定律(散度定律)计算变量梯度。
其中 表示向量场,关于散度定律的详解可以看上一篇文章《CFD理论|网格体积的求解》,这里不展开赘述。
要注意到,我们需要求解的是梯度而不是散度。
令,将 拆分为标量和向量的乘积,可以得到下列方程:
进一步拆分可以得到:
取向量场 ,上述方程部分项恒等于0,于是就可以得到:
在CFD计算中,网格通常具有多个网格面,对每个面进行求和再叠加来代替对整个曲面的积分:
这样就可以得到网格内温度梯度的体积积分。
要记住,在有限体积法中,变量在面上的变化是线性的,因此变量在面上的积分可以转化为网格面的中心值乘上网格面的面积,上述公式可以变为:
但还没有完成,我们要得到的是梯度,而不是梯度的体积分。
在二阶有限体积法中,变量不仅沿着面变化是线性的,沿着整个网格体积变化也是线性。因此我们可以对上述公式继续改造,取网格中心的值来去掉公式中的体积分:
因此网格中心变量的梯度就可以表示为:
(1)或者网格中心的变量( );
(2)乘上向量和面积( );
(3)加上所有面的积分值( );
(4)除以网格体积( )。
根据网格面 中心变量计算方法的不同Green-Gauss方法可以分为两种:
(1)线性差值(Green-Gauss Cell Based);
(2)节点平均(Green-Gauss Node Based)。
基于线性插值方法获得网格中心面的值。
其中 为相邻网格之间的距离系数。方案。
基于节点方案就是取围绕网格面的节点的平均值,来获得网格面中心值:
(1)偏斜度误差(Skewness Error):基于网格方案(reen-Gauss Cell Based)计算的面中心值与实际有一定的偏差,如下图所示:相反,基于节点方案(Green-Gauss Node Based)则不会出现这种问题,换句话而言,基于节点方案计算更加精确。、
(2)计算量:基于节点方案计算量更大,计算过程中必须将节点上的温度作为单独的变量来计算,这里不做展开。
From:Fluid Mechanics101