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. OpenFOAM
  3. LES直流槽道边界层模拟,如何得到正则化速度u+以及正则化坐标y+?

LES直流槽道边界层模拟,如何得到正则化速度u+以及正则化坐标y+?

已定时 已固定 已锁定 已移动 OpenFOAM
大涡模拟
123 帖子 13 发布者 115.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • S 离线
    S 离线
    SSSSK
    在 中回复了 2019201300 最后由 编辑
    #79

    @2019201300 超过上限访问不了了:wocao:

    2 1 条回复 最后回复
  • 2 离线
    2 离线
    2019201300
    在 中回复了 SSSSK 最后由 编辑
    #80

    @SSSSK 习惯问题,忘了改默认设置,下边这个应该就没问题了。链接:https://pan.baidu.com/s/16PwL1nIOXCucqKU3XoZ1_A?pwd=gg61
    提取码:gg61

    S L 2 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 2019201300 最后由 编辑
    #81

    @2019201300 感谢感谢

    1 条回复 最后回复
  • 尚 在线
    尚 在线
    尚善若水
    写于 最后由 编辑
    #82

    看到 cfd online 的后处理代码:compressibleyPlusLES,感觉修改下作为后处理工具,不失为一个更简单直接的方法。

    
            volScalarField yPlusTemp
            (
                IOobject
                (
                    "yPlusTemp",
                    runTime.timeName(),
                    mesh,
                    IOobject::NO_READ,
                    IOobject::NO_WRITE
                ),
                mesh,
                dimensionedScalar("yPlusTemp", dimless, 0.0)
            );
    	
            volVectorField uPlus
            (
                IOobject
                (
                    "uPlus",
                    runTime.timeName(),
                    mesh,
                    IOobject::NO_READ,
                    IOobject::NO_WRITE
                ),
                mesh,
                dimensionedVector("uPlus", dimless, vector::zero)
            );
    
            volScalarField uTau
            (
                IOobject
                (
                    "uTau",
                    runTime.timeName(),
                    mesh,
                    IOobject::NO_READ,
                    IOobject::NO_WRITE
                ),
                mesh,
                dimensionedScalar("uTau", dimVelocity, 0.0)
            );
    	
            volScalarField yPlus
            (
                IOobject
                (
                    "yPlus",
                    runTime.timeName(),
                    mesh,
                    IOobject::NO_READ,
                    IOobject::NO_WRITE
                ),
                mesh,
                dimensionedScalar("yPlus", dimless, 0.0)
            );
    
            Info<< "Reading field UMean\n" << endl;
            volVectorField UMean
            (
                IOobject
                (
                    "UMean",
                    runTime.timeName(),
                    mesh,
                    IOobject::MUST_READ,
                    IOobject::NO_WRITE
                ),
                mesh
            );
    
    	Info<< "Reading field U\n" << endl;
    	volVectorField U
            (
                IOobject
                (
                    "U",
                    runTime.timeName(),
                    mesh,
                    IOobject::MUST_READ,
                    IOobject::NO_WRITE
                ),
                mesh
            );
    	
    	Info<< "Reading field rho\n" << endl;
    	volScalarField rho
            (
                IOobject
                (
                    "rho",
                    runTime.timeName(),
                    mesh,
                    IOobject::MUST_READ,
                    IOobject::NO_WRITE
                ),
                mesh
            );
    	
    #       include "compressibleCreatePhi.H"
    	Info<< "successs1\n" << endl;
    	autoPtr<basicThermo> pThermo
    	(
    	basicThermo::New(mesh)
    	);
    	
    	basicThermo& thermo = pThermo();
    
    	Info<< "successs2\n" << endl;
    	autoPtr<compressible::LESModel> sgsModel
    	(
    	    compressible::LESModel::New(rho, UMean, phi, thermo)
    	);
    
    
    /*---------------------------------------------------------------------------*\
      =========                 |
      \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
       \\    /   O peration     |
        \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
         \\/     M anipulation  |
    -------------------------------------------------------------------------------
    License
        This file is part of OpenFOAM.
    
        OpenFOAM is free software: you can redistribute it and/or modify it
        under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.
    
        OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
        ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
        FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        for more details.
    
        You should have received a copy of the GNU General Public License
        along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
    
    Application
        yPlusLES
    
    Description
        Calculates and reports yPlus and uPlus for all wall patches, for the specified times, for compressible LES.
    
    \*---------------------------------------------------------------------------*/
    
    #include "fvCFD.H"
    //#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
    //aali
    #include "compressible/LES/LESModel/LESModel.H"
    #include "basicThermo.H"
    //ali
    #include "wallFvPatch.H" 
    #include "LESModel.H"
    #include "nearWallDist.H"
    #include "wallDist.H"
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    int main(int argc, char *argv[])
    {
        timeSelector::addOptions();
        #include "setRootCase.H"
    #   include "createTime.H"
        instantList timeDirs = timeSelector::select0(runTime, args);
    #   include "createMesh.H"
    
        forAll(timeDirs, timeI)
        {
            runTime.setTime(timeDirs[timeI], timeI);
            Info<< "Time = " << runTime.timeName() << endl;
            fvMesh::readUpdateState state = mesh.readUpdate();
    
            // Wall distance
    	wallDist y(mesh, true);
            if (timeI == 0 || state != fvMesh::UNCHANGED)
            {
                Info<< "Calculating wall distance\n" << endl;
                
                Info<< "Writing wall distance to field "
                    << y.name() << nl << endl;
                y.write();
            }
    
    #include "createFields.H"
    
            volScalarField::GeometricBoundaryField d = nearWallDist(mesh).y();
            volScalarField muEff(sgsModel->muEff());
    
            const fvPatchList& patches = mesh.boundary();
    	
    	dimensionedScalar uTauAvg("uTauAvg", dimVelocity, 0);
    
            const volScalarField muLam(sgsModel->mu());
    	
    	scalar nPatch = 0;
    	
    	Info<< "Summary: " << nl << endl;
    
            forAll(patches, patchi)
            {
                const fvPatch& currPatch = patches[patchi];
    
                if (typeid(currPatch) == typeid(wallFvPatch))//isA<wallFvPatch>(currPatch))
                {
                    yPlusTemp.boundaryField()[patchi] =
                        d[patchi]
                       *sqrt
                        (
                            muEff.boundaryField()[patchi]/rho.boundaryField()[patchi]
                           *mag(UMean.boundaryField()[patchi].snGrad())
                        )
                       /muLam.boundaryField()[patchi]/rho.boundaryField()[patchi];
                    const scalarField& YpTemp = yPlusTemp.boundaryField()[patchi];
    
    //effective viscosity used in the calculation of u*
    		uTau.boundaryField()[patchi] =
                        sqrt
                        (
    		    sgsModel->muEff()
                       *mag(UMean.boundaryField()[patchi].snGrad())
                       /sgsModel->rho()
                        );
    		const fvPatchScalarField& uTauWall = uTau.boundaryField()[patchi];
    		
    		dimensionedScalar uTauTmp("uTauTmp", dimVelocity, average(uTauWall));
    		
    		uTauAvg += uTauTmp;
    		
    		nPatch ++;
    		
                    Info<< "Patch " << patchi
                        << " named " << currPatch.name()
                        << " y+ : min: " << min(YpTemp) << " max: " << max(YpTemp)
                        << " average: " << average(YpTemp) 
                        << " avgUGradWall: " <<  average(mag(U.boundaryField()[patchi].snGrad())) 
                        << nl << endl;
    
                }
            }
    	    
    	uTauAvg /= nPatch; 
    	
    	Info << "  avg. friction velocity uTau is: "
    	      << uTauAvg.value() << " (averaged over " << nPatch << " wall(s))" << nl <<endl;
    //yPlus is = u* x y/nu	      
    	yPlus = y.y() * uTauAvg / ((sgsModel->mu()) / (sgsModel->rho()));
    	
    	uPlus = UMean / uTauAvg;
    	
    	Info << "Writing yPlus and uPlus to corresponding fields." << nl <<endl;
    	yPlus.write();
    	uPlus.write();
    
    //         Info<< "Writing yPlus to field "
    //             << yPlus.name() << nl << endl;
    // 
    //         yPlus.write();
        }
    
        Info<< "End\n" << endl;
    
        return 0;
    }
    
    
    // ************************************************************************* //
    
    
    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #83

    老铁们,你们做q-DNS的老铁们,有没有什么工作搞出来,更新更新让大家观摩观摩

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 李东岳 最后由 编辑
    #84

    @李东岳

    1. 用q-DNS算过一个时间衰减均匀各向同性盒子湍流,类似of2112自带这个算例Decay of homogeneous isotropic turbulence,只是初始湍流场用自己的方法生成。目前湍流生成方法大多能比较好的生成均匀各向同性湍流。q-DNS用的网格256×256×256,采用laminar。同样网格也算过LES模型,结果没太大区别。

    2. 时间衰减均匀各向同性盒子湍流主要是验证湍流生成方法的性能,与实验对比指标主要包括:湍动能衰减曲线,不同时刻的三维能谱和空间相关性。具体可参考以下2篇论文结果:
      [1] Chen L, Li C, Wang J, et al. A coherence-improved and mass-balanced inflow turbulence generation method for large eddy simulation[J]. Journal of Computational Physics, 2024,498:112706.
      [2] Li C, Chen L, Wang J, et al. A novel vector potential random flow generation method for synthesizing divergence-free homogeneous isotropic turbulence with arbitrary spectra[J]. Physics of Fluids, 2024,36(3).
      166bac7f-d88d-4b9c-be29-1e3061bbb671-image.png

    李东岳李 S 3 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 coolhhh 最后由 李东岳 编辑
    #85

    @coolhhh 太屌了大佬。干了一个JCP一个POF。 :146: :146:

    大佬感兴趣,可以用白话介绍介绍工作,可以给你CFD界推一推

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 李东岳 最后由 编辑
    #86

    @李东岳 谢谢李老师,目前觉得方法还不够完美,还在想一种理论上更好的方法,等方法搞定了再写写比较好。到时可以简单写一个目前现有方法问题的阐述,就是这个RFG-based系列方法虽然有好多sci,但好几篇高引文章都是混淆一些概念,觉得这个值得说一说

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

    但好几篇高引文章都是混淆一些概念,觉得这个值得说一说

    流弊!确实如此。只有实践过代码写出来才是真知。我更相信你的。

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

    1 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 coolhhh 最后由 编辑
    #88

    @coolhhh 大佬你用of算过forced的这种湍流没?

    1 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 coolhhh 最后由 编辑
    #89

    @coolhhh 最近刚接触这种湍流,有些地方有点疑惑,decay的话是不给力,最后让他一直衰减到0吗。然后forced就是给他一个力维持,最后让他平衡,给的力不同的话对结果影响会不会很大,如果我算forced的话,直接用dnsfoam里面的那种force可以吗

    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 SSSSK 最后由 编辑
    #90

    @SSSSK

    1. 我算的是均匀衰减湍流,没有额外的force,最后湍动能衰减到0。以下是书上关于均匀湍流的阐述:

    引自《张兆顺, 崔桂香, 许春晓. 湍流理论与模拟[M]. 北京: 清华大学出版社, 2005》31页
    c53167b7-6de2-484b-8991-35c9fc3a733a-image.png

    1. dnsfoam我没用过,没了解过是怎么加的,是否类似of自带算例channel395,施加了一个梯度源项?我理解湍流能够自保持,NS方程右边是合力,如果没有施加外力,耗散项不等于0,使得湍流不断衰减。channel395算例加了梯度源项,这个力刚好抵消耗散项,等到充分发展状态时候,NS方程右边合力等于0,这个时候就能保持不变发展。根据充分发展时候合力等于0,施加的力大小不同,那么耗散项的大小也不同,耗散项与速度梯度有关,也就对应了那几个平均速度剖面,雷诺应力剖面的不同。
    S 1 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 coolhhh 最后由 SSSSK 编辑
    #91

    @coolhhh 感谢分享。dnsfoam是通过加了一个力得到的,这个力好像是按照wiener process加的,然后傅里叶变换到xy坐标。但这个加力的方式有个bug,他没法并行,所以像很多论文里都按照波数来加的那种方法的话就没法实现,也查了好多资料,就是查不到openfoam算forced各项同性湍流的。

    C 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #92

    我之前一直想做dnsfoam解析,一直没倒出时间。dnsfoam这个跟icofoam啥的唯一的区别就是这个力,这个力的生成算法我还没细看,dnsfoam解析也一直没写出来。我记得是有什么傅里叶变化啥的东西在里面。

    另外新版dnsfoam应该已经没了。变成了一个力源项。

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

    S 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 SSSSK 最后由 编辑
    #93

    @SSSSK 确实没看过对均匀各向同性湍流加force的,一般都是多是对类似channel395这种非均匀湍流加force。就是对均匀各向同性湍流加force,要想想是否理论上加force是否就能实现不衰减?或者加的force需要一个很复杂的形式才能实现,而不像channel395只加一个固定的压力梯度。

    S 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    写于 最后由 编辑
    #94

    对均匀各向同性湍流加force的自保持,如果只是要实现到目标结构位置湍流特性是所想要的,可以对入口湍流乘以放大系数。均匀各向同性湍流衰减曲线的对数率形式接近一条直线,根据衰减曲线估计下在入口处对湍流增强洗漱,应该能调整出目标位置的所需要的湍流特性

    1 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 李东岳 最后由 编辑
    #95

    @李东岳 新版的能像dnsfoam一样加白噪声力吗?原版的我稍微看了一下,是通过高斯分布得到白噪声然后再根据维纳过程施加和时间有关的力,最后傅里叶变换变成方程里的force,李老师你说的新版是of11和12吗?

    1 条回复 最后回复
  • S 离线
    S 离线
    SSSSK
    在 中回复了 coolhhh 最后由 编辑
    #96

    @coolhhh 对这种湍流加的力和channel不一样,channel只需要一个固定压力梯度就行,但这个是从波数域加的,需要傅里叶变化,但傅里叶变换里面有个kmesh,就是这个不能并行

    1 条回复 最后回复
  • L 离线
    L 离线
    LESKIN
    在 中回复了 2019201300 最后由 编辑
    #97

    @2019201300文件过期呜呜呜,最近也在研究管道流动问题,想知道大佬怎么做的,可以重新传一下文件嘛

    2 1 条回复 最后回复
  • 2 离线
    2 离线
    2019201300
    在 中回复了 LESKIN 最后由 编辑
    #98

    @LESKIN 这个是个槽道,流向和展向都是周期性边界条件。通过网盘分享的文件:Channel180_Kong.rar
    链接: https://pan.baidu.com/s/1TvKiFbKk-H0n-pm5LBmXyA?pwd=vnfi 提取码: vnfi

    L 1 条回复 最后回复

  • 登录

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