CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    编程小白求问:kEpsilon模型中 k_() 的定义在哪?

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

      在求解器(例如pisoFoam.C)中添加代码turbulence->k()可以得到湍动能的量。这是因为在kEpsilon.H中,对k()有如下定义

      //- Return the turbulence kinetic energy
      virtual tmp<volScalarField> k() const
      {
          return k_;
      }
      

      所以我明白k_和k()代表什么。
      但是,在kEpsilon.C中,对湍动能的求解方程如下

      tmp<fvScalarMatrix> kEqn
      (
          fvm::ddt(alpha, rho, k_)
        + fvm::div(alphaRhoPhi, k_)
        - fvm::laplacian(alpha*rho*DkEff(), k_)
       ==
          alpha()*rho()*G
        - fvm::SuSp((2.0/3.0)*alpha()*rho()*divU, k_)
        - fvm::Sp(alpha()*rho()*epsilon_()/k_(), k_)
        + kSource()
        + fvOptions(alpha, rho, k_)
      );
      
      kEqn.ref().relax();
      fvOptions.constrain(kEqn.ref());
      solve(kEqn);
      fvOptions.correct(k_);
      bound(k_, this->kMin_);
      

      不论是显式离散还是隐式离散,源项括号左边中的湍动能都是用k_()表示的。那么k_()是在哪定义的?代表什么含义?

      1 条回复 最后回复 回复 引用
      • Y
        yfclark 讲师 最后由 编辑

        k_是class kEpsilon的protected 变量,k()是class kEpsilon的member function,这些都是很基础的C++类的知识,如果你时间充足可以阅读C++ prime(plus),如果时间不是很充足,推荐阅读Guide to Scientific Computing in Cpp。另外在http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/和知乎上你也能搜索到一些修改湍流模型的资料。

        M 1 条回复 最后回复 回复 引用
        • M
          MecYHL @yfclark 最后由 编辑

          @yfclark 在 编程小白求问:kEpsilon模型中 k_() 的定义在哪? 中说:

          http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/

          我知道k_和k()分别为protected变量和member function,但是这里出现了k_(),那么k_()是protected function吗?

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

            可能没把问题描述清楚。我问的是k_(),不是k_或者k()啊

            1 条回复 最后回复 回复 引用
            • Y
              yfclark 讲师 最后由 编辑

              不好意思,我常看的是2.3和2.4的单相流的代码,里面用的都是k_。比如openfoam2.4

                  tmp<fvScalarMatrix> kEqn
                  (
                      fvm::ddt(rho_, k_)
                    + fvm::div(phi_, k_)
                    - fvm::laplacian(DkEff(), k_)
                   ==
                      G
                    - fvm::SuSp((2.0/3.0)*rho_*divU, k_)
                    - fvm::Sp(rho_*epsilon_/k_, k_)
                  );
              

              不知道你看的是那个版本,看样子还是多相流的

              M 1 条回复 最后回复 回复 引用
              • M
                MecYHL @yfclark 最后由 编辑

                @yfclark

                5.0版本的。刚才受到你的启发,去知乎上搜了一下,用的是k_,看来k_和k_()没区别吧,好吧。谢谢了

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

                  k_() 调用的是 GeometricField 的 operator(),定义如下:

                  src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H

                          //- Return a const-reference to the dimensioned internal field  
                          //  Useful in the formulation of source-terms for FV equations
                          inline const Internal& operator()() const; 
                  
                  M 1 条回复 最后回复 回复 引用
                  • M
                    MecYHL @wwzhao 最后由 编辑

                    @wwzhao
                    谢谢
                    虽然没看懂,不过知道了这个在源项处理上非常有用:xinlei:

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

                      @MecYHL 简而言之就是返回一个不带边界的内场。

                      1 条回复 最后回复 回复 引用
                      • 李东岳
                        李东岳 管理员 最后由 李东岳 编辑

                        感谢大家分享!:xiexie: 论坛急需散金币机制。暂且欠每人1000金币!:w:

                        线上CFD课程开始报名:http://www.dyfluid.com/class.html

                        CFD高性能服务器 http://dyfluid.com/servers.html

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