CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    OpenFOAM中为何要这样定义雷诺应力模型?

    OpenFOAM
    2
    8
    4490
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • zym604
      zym604 最后由 编辑

      我发现OpenFOAM2.4中把雷诺应力模型定义成了这样:
      0_1517916907141_6d4d04d5-04e5-48e5-b4fd-557c0c115f6b-image.png
      我不太理解为什么要这么写,以我的理解应该是这样:
      0_1517917166870_822a38ff-cdc3-40ef-8907-9bf02cc678b7-image.png
      请问有人能解开我的疑惑吗?

      1 条回复 最后回复 回复 引用
      • zym604
        zym604 最后由 编辑

        其中R代表雷诺应力,S代表源项

        1 条回复 最后回复 回复 引用
        • W
          wwzhao 教授 最后由 编辑

          哪个求解器?没找到这段代码。。。

          zym604 1 条回复 最后回复 回复 引用
          • zym604
            zym604 @wwzhao 最后由 编辑

            @wwzhao LRR 求解器+pimpleFoam,我把两边的公式加起来得到的这个完整的公式。

            1 条回复 最后回复 回复 引用
            • zym604
              zym604 最后由 李东岳 编辑

              tmp<fvVectorMatrix> UEqn
              (
                  fvm::ddt(U)
                + fvm::div(phi, U)
                + turbulence->divDevReff(U)
               ==
                  fvOptions(U)
              );
              
              
              tmp<fvVectorMatrix> UEqn
              (
                  fvm::ddt(U)
                + fvm::div(phi, U)
                + turbulence->divDevReff(U)
               ==
                  fvOptions(U)
              );
              

              且默认couplingFactor=0.

                  //- Return the effective viscosity
                      virtual tmp<volScalarField> nuEff() const
                      {
                          return tmp<volScalarField>
                          (
                              new volScalarField("nuEff", nut() + nu())
                          );
              
              1 条回复 最后回复 回复 引用
              • zym604
                zym604 最后由 李东岳 编辑

                LRR

                tmp<fvVectorMatrix> LRR::divDevReff(volVectorField& U) const
                {
                    if (couplingFactor_.value() > 0.0)
                    {
                        return
                        (
                            fvc::div(R_ + couplingFactor_*nut_*fvc::grad(U), "div(R)")
                          + fvc::laplacian
                            (
                                 (1.0 - couplingFactor_)*nut_,
                                 U,
                                 "laplacian(nuEff,U)"
                            )
                          - fvm::laplacian(nuEff(), U)
                        );
                    }
                    else
                    {
                        return
                        (
                            fvc::div(R_)
                          + fvc::laplacian(nut_, U, "laplacian(nuEff,U)")
                          - fvm::laplacian(nuEff(), U)
                        );
                    }
                }
                
                1 条回复 最后回复 回复 引用
                • W
                  wwzhao 教授 最后由 编辑

                  这可能是基于数值稳定性的考虑,只有nueff这一项用的是fvm隐式离散,其他用的都是fvc显式离散

                  zym604 1 条回复 最后回复 回复 引用
                  • zym604
                    zym604 @wwzhao 最后由 编辑

                    @wwzhao 谢谢。这个问题我现在已经搞清楚了,是为了增加矩阵的“对角占优”特性,提高收敛性。经过实验,假如修改成不加nu_t的公式,对于一些Co数较大的case就有可能计算发散。

                    1 条回复 最后回复 回复 引用
                    • First post
                      Last post