Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. Algorithm
  3. 关于壁面函数有些不懂

关于壁面函数有些不懂

已定时 已固定 已锁定 已移动 Algorithm
26 帖子 5 发布者 34.0k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #17

    当求解湍流粘度的时候需要调用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;
    }
    

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    L 2 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #18

    你对OpenFOAM代码熟悉么?

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • L 离线
    L 离线
    lsprxd
    在 中回复了 李东岳 最后由 编辑
    #19

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

    1 条回复 最后回复
  • L 离线
    L 离线
    lsprxd
    在 中回复了 李东岳 最后由 编辑
    #20

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

    李东岳李 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 lsprxd 最后由 编辑
    #21

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

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

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

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    L 赵 2 条回复 最后回复
  • L 离线
    L 离线
    lsprxd
    在 中回复了 李东岳 最后由 编辑
    #22

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

    赵 1 条回复 最后回复
  • 赵 离线
    赵 离线
    赵一铭
    在 中回复了 李东岳 最后由 编辑
    #23

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

    李东岳李 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 赵一铭 最后由 编辑
    #24

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

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 赵 离线
    赵 离线
    赵一铭
    在 中回复了 lsprxd 最后由 编辑
    #25

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

    1 条回复 最后回复
  • benqingB 离线
    benqingB 离线
    benqing
    写于 最后由 编辑
    #26

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

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]