k壁面函数没有考虑一个网格多个边界面?
-
- 问题1:of1806的kLowReWallFunction.C在计算壁面上的k值(kw),kw看似是指边界面上的k,但是由于yPlus算的应该是最近的单元体心处的yPlus,所以我猜想这就是算的离壁面第一层的单元的k,只是先存储在边界面上而已,代码如下:
if (yPlus > yPlusLam_) { scalar Ck = -0.416; scalar Bk = 8.366; kw[facei] = Ck/kappa_*log(yPlus) + Bk; } else { scalar C = 11.0; scalar Cf = (1.0/sqr(yPlus + C) + 2.0*yPlus/pow3(C) - 1.0/sqr(C)); kw[facei] = 2400.0/sqr(Ceps2_)*Cf; } kw[facei] *= sqr(uTau);
然而后面我又发现,k没有像epsilon计算那样通过
求和平均
,来考虑一个网格多个边界面的情况。那么当一个网格有多个边界面时,对于这个网格,边界面上就会存有不同的k值,这时候如何确定这个单元的k值呢?- 问题2:在chalmers大学的学生report里有提到壁面函数计算有两类,一类是计算的是边界面上的值,例如k;一类是计算的体心的值。例如epsilon。而在kEpsilon.C中epsEqn会通过
updateCoeffs()
来改变第一层单元的epsilon值,这样刚好就用上了epsilon壁面函数所计算的体心值,而并没有发现kEqn通过updateCoeffs()
来改变第一层网格单元的k值。这样的话前面求kw的目的是什么呢?
-
补充一下问题2:在这篇知乎最后一个评论印子斐说:“k(注:应该说的是第一层网格体心的k)比较难给,of和fluent都采用给定tke方程里的production,在求解过程中自动得到k的值”。很疑惑是如何做到的。
-
(1)对使用k的壁面函数有一个比较疑惑的地方是,kLowReWallFunction.C中是定义
updateCoeff()
来计算kw的,然而在kEpsilon.C文件里面根本找不到
k使用了这个函数来计算kw,也就是根本没计算k
。所以设置kqRWallFunction和kLowReWallFunction,看起来都没有区别,因为我暂时没有找到在哪里调用了
。。而与之相对的是epsilon和G都使用了updateCoeff来更新离壁面第一层网格中心的值。所以我怀疑离壁面第一层网格的k根本没用
壁面函数,而是直接靠解方程计算出来
。我的一个猜想是,kEpsilon模型本身是为对数区设计的,使用这个模型,就默认第一层网格中心处于对数区,而在对数区,常规做法是不设置k的,而只计算epsilon和G,并且epsilon和G满足平衡条件,在WALL边界处默认设置了k的法向梯度为零(这似乎就默认了使用kqRWallFuntion)。所以在kEpsilon.C里面并没有调用k的updateCoeff()进行计算,(不知到印博士是不是这个意思),是靠直接求解方程得到k,而只对epsilon和G使用壁面函数。
(2)油管上的fluidmechanical101对此有些视频,里面有提到k在对数区和粘性区的计算,公式和kLowReWallFunction对应,但是还是那个问题,这个计算是靠updateCoeffs()调用的,而没有发现在其他地方有使用。另外,这个函数计算的值是储存在边界面上的,而非网格中心。epsilon在计算的过程中也放在了边界面上,但用了求和平均,最后还是为了算出第一层网格中心的epsilon值。而kw并没有求和平均
,在放到网格中心去,所以现在不清楚把k值放在边界面上
的目的是什么。我另一个猜想是,是不是在组成k方程的时候用了边界的值,相当于把这个算出来的值当做边界条件
了,可能是放入矩阵系数
,也可能是放到等号右边的b
去了。