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. 请教一下标准k-epsilon湍流模型中的epsilon_()与k_()与epsilon_和k_有什么区别

请教一下标准k-epsilon湍流模型中的epsilon_()与k_()与epsilon_和k_有什么区别

已定时 已固定 已锁定 已移动 OpenFOAM
7 帖子 2 发布者 3.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • ShaneHEEES 离线
    ShaneHEEES 离线
    ShaneHEEE
    写于 最后由 编辑
    #1

    各位大佬,
    标准k-epsilon模型中的epsEqn:

        // Dissipation equation
        tmp<fvScalarMatrix> epsEqn
        (
            fvm::ddt(alpha, rho, epsilon_)
          + fvm::div(alphaRhoPhi, epsilon_)
          - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_)
         ==
            C1_*alpha()*rho()*G*epsilon_()/k_()
          - fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha()*rho()*divU, epsilon_)
          - fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_)
          + epsilonSource()
          + fvModels.source(alpha, rho, epsilon_)
        );
    

    请问epsilon_()与k_()中的操作符()返回的是上一个迭代步/时间步的值吗?

    另外,我想像LaunderSharmaKE一样改变这一项的系数

     - fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_)
    

    参考LaunderSharmaKE中定义系数的代码:

    //LaunderSharmaKE.H声明
    tmp<volScalarField> f2() const;
    
    //LaunderSharmaKE.C定义
    template<class BasicMomentumTransportModel>
    tmp<volScalarField> LaunderSharmaKE<BasicMomentumTransportModel>::f2() const
    {
        return
            scalar(1)
          - 0.3*exp(-min(sqr(sqr(k_)/(this->nu()*epsilon_)), scalar(50.0)));
    }
    

    参考LaunderSharmaKE定义的epsilonEqn:

    tmp<fvScalarMatrix> epsEqn
        (
            fvm::ddt(alpha, rho, epsilon_)
          + fvm::div(alphaRhoPhi, epsilon_)
          - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_)
         ==
            C1_*alpha*rho*G*epsilon_/k_
          - fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha*rho*divU, epsilon_)
          - fvm::Sp(C2_*f2()*alpha*rho*epsilon_/k_, epsilon_)
          + alpha*rho*E
          + epsilonSource()
          + fvModels.source(alpha, rho, epsilon_)
        );
    

    LaunderSharmaKE中直接使用的是epsilon_,k_,不加括号表示的是下一个迭代步的待求值吗?

    如果在标准k-epsilon中定义一模一样的函数f2(),并加到eqsEqn中,只有将标准k-epsilon中的epsilon_(), k_()改为epsilon_, k_,编译才能通过,否则会因为无法匹配Sp函数报错:

    error: no matching function for call to ‘Sp(Foam::tmp<Foam::Field<double> >, Foam::volScalarField&)’
      418 |       - fvm::Sp(C2_*f2()*alpha()*rho()*epsilon_()/k_(), epsilon_)
    

    那么我将epsilon_()/k_()直接改为epsilon_/k_会影响结果吗?

    或者有没有其他解决方法

    谢谢各位大佬!!

    1 条回复 最后回复
  • ShaneHEEES 离线
    ShaneHEEES 离线
    ShaneHEEE
    写于 最后由 编辑
    #2

    epsilon,k在声明时:

    volScalarField epsilon_;
    volScalarField k_;
    

    这俩变量类型都是volScalarField,volScalarField就包含internalField 和boundaryField ,epsilon_()和k_()以及rho()和alpha()中的 operator()返回internalField ,类型相当于volScalarField::Internal

    目的:减少并行通信,从而降低并行计算的计算成本。(只有boundaryField才需要通信)

    注意:epsilon_()和k_()以及rho()和alpha()使用时仅在方程右边构造源项

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

    目的:减少并行通信,从而降低并行计算的计算成本。(只有boundaryField才需要通信)

    你在哪里看到的这个答案?

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

    1 条回复 最后回复
  • ShaneHEEES 离线
    ShaneHEEES 离线
    ShaneHEEE
    写于 最后由 ShaneHEEE 编辑
    #4

    https://www.cfd-online.com/Forums/openfoam-programming-development/224302-difference-between-rho-rho_-rho.html
    @李东岳 李老师,这里。修正下:大部分通信发生在boundaryField
    另外,两个湍流模型里的divU和G的定义也不一样:

    //standard k-epsilon
        volScalarField::Internal divU
        (
            fvc::div(fvc::absolute(this->phi(), U))()
        );
    
        tmp<volTensorField> tgradU = fvc::grad(U);
        volScalarField::Internal G
        (
            this->GName(),
            nut()*(dev(twoSymm(tgradU().v())) && tgradU().v())
        );
    
    //LaunderSharmaKE
        volScalarField divU(fvc::div(fvc::absolute(this->phi(), U)));
        tmp<volTensorField> tgradU = fvc::grad(U);
        
        volScalarField G(this->GName(), nut*(tgradU() && dev(twoSymm(tgradU()))));
    

    可以看到,标准模型里都是InternalField

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

    目的:减少并行通信,从而降低并行计算的计算成本。(只有boundaryField才需要通信)

    我不觉得是这个原因。我觉得应为这个是源项。源项是源项。源项不应该对boundary产生印象。

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

    ShaneHEEES 1 条回复 最后回复
  • ShaneHEEES 离线
    ShaneHEEES 离线
    ShaneHEEE
    在 中回复了 李东岳 最后由 编辑
    #6

    @李东岳 在 请教一下标准k-epsilon湍流模型中的epsilon_()与k_()与epsilon_和k_有什么区别 中说:

    目的:减少并行通信,从而降低并行计算的计算成本。(只有boundaryField才需要通信)

    我不觉得是这个原因。我觉得应为这个是源项。源项是源项。源项不应该对boundary产生印象。

    感谢李老师回复,:146: 我再查查看看

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

    @ShaneHEEE 是的。openfoam很多算法都是Henry自己搞的。因此目前针对OpenFOAM的算法解说,要么需要跟数学一一对应,这个是严谨的独一无二的。要么就是自己的理解。自己的理解的话我个人只相信Henry,Jasak他们的观点。当然了,在观点不一致的情况下,大家也可以选择相信他们的,也可以选择相信我的 :chitang: 各抒己见,并且也欢迎更详细的讨论

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

    1 条回复 最后回复

  • 登录

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