关于壁面函数有些不懂


  • 管理员

    当求解湍流粘度的时候需要调用y+(看方程31),其可以采用不同的方法,最简单的方法就是我网页那种方法,然而另一种方法就是上文中提出的牛顿迭代法。俩种方法最后都需要使用方程31更新粘度。

    下面是OpenFOAM中采用我网页中方法的步骤:

    tmp<scalarField> nutkWallFunctionFvPatchScalarField::calcNut() const
    {
        const label patchi = patch().index();
    
        const turbulenceModel& turbModel = db().lookupObject<turbulenceModel>
        (
            IOobject::groupName
            (
                turbulenceModel::propertiesName,
                internalField().group()
            )
        );
    
        const scalarField& y = turbModel.y()[patchi];
        const tmp<volScalarField> tk = turbModel.k();
        const volScalarField& k = tk();
        const tmp<scalarField> tnuw = turbModel.nu(patchi);
        const scalarField& nuw = tnuw();
    
        const scalar Cmu25 = pow025(Cmu_);
    
        tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
        scalarField& nutw = tnutw.ref();
    
        forAll(nutw, facei)
        {
            label faceCelli = patch().faceCells()[facei];
    
            scalar yPlus = Cmu25*y[facei]*sqrt(k[faceCelli])/nuw[facei];//简单计算y+
    
            if (yPlus > yPlusLam_)
            {
                nutw[facei] = nuw[facei]*(yPlus*kappa_/log(E_*yPlus) - 1.0);//方程31
            }
        }
    
        return tnutw;
    }
    

    下面是OpenFOAM中采用你截图的迭代法求解的步骤:

    tmp<scalarField> nutUWallFunctionFvPatchScalarField::calcNut() const
    {
        const label patchi = patch().index();
    
        const turbulenceModel& turbModel = db().lookupObject<turbulenceModel>
        (
            IOobject::groupName
            (
                turbulenceModel::propertiesName,
                internalField().group()
            )
        );
        const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi];
        const scalarField magUp(mag(Uw.patchInternalField() - Uw));
        const tmp<scalarField> tnuw = turbModel.nu(patchi);
        const scalarField& nuw = tnuw();
    
        tmp<scalarField> tyPlus = calcYPlus(magUp);//通过速度迭代计算y+
        scalarField& yPlus = tyPlus.ref();
    
        tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
        scalarField& nutw = tnutw.ref();
    
        forAll(yPlus, facei)
        {
            if (yPlus[facei] > yPlusLam_)
            {
                nutw[facei] =
                    nuw[facei]*(yPlus[facei]*kappa_/log(E_*yPlus[facei]) - 1.0);//方程31
            }
        }
    
        return tnutw;
    }
    

    一直时间很紧没有时间细看这个帖子,不过看起来非常有意思,近期我更新一下你贴图那种方法的思路。


  • 管理员

    你对OpenFOAM代码熟悉么?



  • @李东岳 谢谢李老师,OpenFOAM这个不熟悉,您贴的这个我在底下先仔细看看



  • @李东岳 李老师,您这个简单计算y+的时候带入的kp是p点的值,如何确定的?还有这个p点是距离壁面y处的位置,但距离壁面y处的点应该有好多啊,而且每个应该都不一样吧?那求出来的y+也不止一个吧?


  • 管理员

    @lsprxd关于壁面函数有些不懂 中说:

    但距离壁面y处的点应该有好多啊

    只是距离壁面网格点的那个点,只有一个。

    抱歉最近事情比较多,不过你这个我会找时间把另一种更新y+的方法更新在我的网页。可能一个月之内吧…



  • @李东岳 没事,麻烦李老师了!一个?比如这个图0_1494841219186_QQ截图20170515173950.png
    这些都是p点吧?那不同的p点的kp应该不同吧?



  • @李东岳 岳哥,我也对比了一下,你网页那个流程好像和OpenFOAM算得壁面函数流程不太一致。OpenFOAM先求解的epsilon后解的k,网页中壁面函数在CFD中的实施过程是否有出处?求解方程先后关系中药么?


  • 管理员

    @赵一铭 我的思路按照《数值传热学》所写,请参考第355页。

    @lsprxd kp的值,按照《数值传热学》,等于边界的k值,边界的k要自行给定,因此是自定义的。最近在我的网站增加了邱小平专栏,应该这星期或者下星期就会增加壁面函数内容部分。



  • @lsprxd
    壁面函数部分更做了一小部分,但没更新完,看这:OpenFOAM中的壁面函数
    你可以看看公式6和公式4,应该是岳哥说的那种不同计算y+的方式。



  • @李东岳 @lsprxd @赵一铭 对于标准壁面函数我是这样理解的:在求解流场的时候还是用原来的k方程和epsilon方程来求解,只不过是将在壁面第一层网格(有可能是网格面上的值,有可能是网格中心的值)上的信息用壁面函数求解的结果来修正,而且壁面函数其实只求解壁面第一层网格的信息,第二层网格之后就是输运方程求解的结果了。不知我这样理解是否正确?


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待