LES直流槽道边界层模拟,如何得到正则化速度u+以及正则化坐标y+?
-
排版非常好。
你用的是层流模拟么,还是什么湍流模型?没看到你用什么湍流模型。
然后你这个槽道,u+y+是某个点上的还是底面平均之后的?
另外,你试一下用这个方式来计算u+与y+
{ // Evaluate near-wall behaviour scalar nu = turbulence->nu()().boundaryField()[patchId][faceId]; scalar nut = turbulence->nut()().boundaryField()[patchId][faceId]; symmTensor R = turbulence->devSigma()().boundaryField()[patchId][faceId]; scalar epsilon = turbulence->epsilon()()[cellId]; // scalar omega = turbulence->omega()()[cellId]; scalar k = turbulence->k()()[cellId]; scalar magUp = mag(U[cellId] - U.boundaryField()[patchId][faceId]); scalar tauw = flowDirection & R & wallNormal; scalar uTau = ::sqrt(mag(tauw)); scalar yPlus = uTau*y[cellId]/(nu + rootVSmall); scalar uPlus = magUp/(uTau + rootVSmall); scalar nutPlus = nut/nu; scalar kPlus = k/(sqr(uTau) + rootVSmall); scalar epsilonPlus = epsilon*nu/(pow4(uTau) + rootVSmall); // scalar omegaPlus = omega*nu/(sqr(uTau) + rootVSmall); scalar Rey = magUp*y[cellId]/nu; Info<< "Rey = " << Rey << ", uTau = " << uTau << ", nut+ = " << nutPlus << ", y+ = " << yPlus << ", u+ = " << uPlus << ", k+ = " << kPlus << ", epsilon+ = " << epsilonPlus << endl; }
-
感谢李老师关注。
你用的是层流模拟么,还是什么湍流模型?没看到你用什么湍流模型。
我用的湍流模型和channel395的一样,是
FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // simulationType LES; LES { LESModel WALE; turbulence on; printCoeffs on; delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } PrandtlCoeffs { delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } smoothCoeffs { delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } maxDeltaRatio 1.1; } Cdelta 0.158; } vanDriestCoeffs { delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } smoothCoeffs { delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } maxDeltaRatio 1.1; } Aplus 26; Cdelta 0.158; } smoothCoeffs { delta cubeRootVol; cubeRootVolCoeffs { deltaCoeff 1; } maxDeltaRatio 1.1; } }
然后你这个槽道,u+y+是某个点上的还是底面平均之后的?
是底面平均之后的,postChannel工具会把槽道按照xz线(x和z坐标固定,y坐标变化)求平均,所以我使用postChannel输出的数据计算u+和y+,就是底面平均之后的。
-
这个方法的重点是那个应力张量吧
symmTensor R = turbulence->devSigma()().boundaryField()[patchId][faceId];
我输出了wallShearStress,壁面切应力应该就是X方向的分量吧,和上面代码一个思路。能在paraview中看到上下壁面(patch)上的数据,话说做个平均应该就可以吧。顺便问下怎么做?
另外,wallShearStress计算出来的单位是(dimensions [0 2 -2 0 0 0 0];)也即m2/s2,而剪切应力的单位应该是(dimensions [1 -2 -2 0 0 0 0];)kg/m2/s2,刚好相差一个密度,所以OpenFOAM输出的wallShearStress还需要乘以密度,才是实际计算使用的剪切应力。
-
以OpenFOAM自带的channel395算例为例,我这里有4种计算$u_{\tau}$的方法。
方法一:
$$ u_{\tau } = {\rm Re}_{\tau }\nu/h=395*2e-5/1 $$
得$u_{\tau } = 0.0079000$。
方法二:
过计算出来的速度-高度曲线,实际地进行计算。$$ {u_\tau } = \sqrt {\nu {{\left. {\frac{{du}}{{dy}}} \right|}_{y = 0}}} = \sqrt {\nu {\frac{{u_1}}{{y_1}}}} $$
其中${u_1}$和${y_1}$分别是第一个输出点的流向速度和到壁面距离。
得到$u_{\tau } = 0.0069133$。方法三:
通过paraview的filter - integrate variables - 查看 cellData,得到wallShearStress的和以及面积Area,计算固壁面上的wallShearStress平均值,再使用$$ {u_\tau } = \sqrt {\frac{{{\tau _w}}}{\rho }} $$
计算摩擦速度$ {u_\tau }$。注意不可压缩求解器中没有密度,则认为$\rho=1$。
结果是$u_{\tau } = 0.0066952$。方法四:
在完全发展的槽道流中$$ \frac{{\partial p}}{{\partial x}} \times h = {\tau _w} $$
也就是 压力梯度 乘以 槽道半高 等于 壁面摩擦应力。给定平均速度的情况下,OpenFOAM会调节压力梯度使得平均速度达到设定值。在channel395的算例中到计算快结束时候,选择了某一时刻的压力梯度$\frac{{\partial p}}{{\partial x}} = 4.44604e-05$。代入计算,
得到$u_{\tau } = 0.0066678$。
你看这种方式计算出来的$u_{\tau }$跟你的区别大么
可以看到方法一是一种结果,方法二、三、四的结果很接近。
现在的问题就是实际计算出来的摩擦速度和由${\rm Re}_{\tau}$给出的摩擦速度不一样,但方法一的结果才是正确的。自带的channel395也对不上么?
channel395算例的结果
方法一的摩擦速度归一化结果是方法二(方法三和四也是这样子的图)摩擦速度归一化结果是
channel1000的结果在一楼。
现在感觉是槽道流动还是没算对。 -
channel395的平均yPlus是1.5910。channel1000的平均yPlus是0.8471。
channel395的fvScheme格式是下面这个,channel1000也没改fvScheme。FoamFile { version 2.0; format ascii; class dictionary; location "system"; object fvSchemes; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes { default backward; } gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) Gauss linear; div(phi,k) Gauss limitedLinear 1; div(phi,B) Gauss limitedLinear 1; div(B) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; } wallDist { method meshWave; }
-
对,我最开始做槽道流算例的时候,用的他的初始化流场的方法,不然一直算的都是层流。不过chanel1000的这个不用特地初始化也可以。
下面这个是我的channel1000的算例,LES,就是在channel395的基础上改的,OpenFOAM版本是v2012。Allrun脚本可以直接运行,画图用matlab文件夹里面的boundary_layer_profile_2.m就行,改一下要画哪个时刻的就行。
各位老师同学有兴趣可以算一算,看看是哪里出问题了。帮帮我吧🙏
https://jbox.sjtu.edu.cn/l/L1Asg4 (提取码:1234) -
@学流体的小明 你好,这个下载链接需要校内VPN,外校无法下载,想问下能提供个外校人员可下载链接吗?
对,我最开始做槽道流算例的时候,用的他的初始化流场的方法,不然一直算的都是层流。不过chanel1000的这个不用特地初始化也可以。
下面这个是我的channel1000的算例,LES,就是在channel395的基础上改的,OpenFOAM版本是v2012。Allrun脚本可以直接运行,画图用matlab文件夹里面的boundary_layer_profile_2.m就行,改一下要画哪个时刻的就行。
各位老师同学有兴趣可以算一算,看看是哪里出问题了。帮帮我吧🙏
https://jbox.sjtu.edu.cn/l/L1Asg4 (提取码:1234) -
@coolhhh @李东岳
昨天仔细读了一下下面的这个文章,作者对OpenFOAM计算LES槽道进行了比较系统的分析。我发现他的图也是,只有最细的那套网格才算出了非常好的速度剖面,比较粗的两套网格都没算好,形状也和我的问题一样。
这篇文章还是在https://www.cfd-china.com/topic/2121/q-dns计算槽道流遇到了一些问题-求大神们指点看到的。之前读过,但是没仔细读😂。然后就浪费了好多好多时间。
确实是网格不够细的问题。https://www.sciencedirect.com/science/article/pii/S0021999117304059?via%3Dihub