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. 编程小白求问:kEpsilon模型中 k_() 的定义在哪?

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

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

    在求解器(例如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 离线
    Y 离线
    yfclark 神
    写于 最后由 编辑
    #2

    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 离线
    M 离线
    MecYHL
    在 中回复了 yfclark 最后由 编辑
    #3

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

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

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

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

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

    1 条回复 最后回复
  • Y 离线
    Y 离线
    yfclark 神
    写于 最后由 编辑
    #5

    不好意思,我常看的是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 离线
    M 离线
    MecYHL
    在 中回复了 yfclark 最后由 编辑
    #6

    @yfclark

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

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 李东岳 编辑
    #7

    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 离线
    M 离线
    MecYHL
    在 中回复了 wwzhao 最后由 编辑
    #8

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

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 MecYHL 最后由 编辑
    #9

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

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

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

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

    1 条回复 最后回复

  • 登录

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