CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    关于omega_和omega_()中的括号

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

      各位好!
      我看到了东岳老师之前在CFD online上的一篇post:call a tmp formal value without a parentheses?,我最近在研究k-omega SST模型时也发现了类似的问题。
      例如在定义epsilonByk时,用到的是有括号的omega_():

      
      template<class BasicEddyViscosityModel>
      tmp<volScalarField::Internal>
      kOmegaSSTBase<BasicEddyViscosityModel>::epsilonByk
      (
          const volScalarField& F1,
          const volTensorField& gradU
      ) const
      {
          return betaStar_*omega_();
      }
      

      而在定义分段函数F2时用到的是omega_:

      template<class BasicEddyViscosityModel>
      tmp<volScalarField> kOmegaSSTBase<BasicEddyViscosityModel>::F2() const
      {
          tmp<volScalarField> arg2 = min
          (
              max
              (
                  (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_),
                  scalar(500)*(this->mu()/this->rho_)/(sqr(y_)*omega_)
              ),
              scalar(100)
          );
          return tanh(sqr(arg2));
      }
      

      我试着用Info将omega_和omega_()都输出到log文件中,得到的是完全一样的体标量场。但是有时如果删去原有的括号或是加上括号会引起报错。说明omega_和omega_()具有同样的值,但是类型不同。不知道这个括号是否也是由于<tmp>类所引起的?

      1 条回复 最后回复 回复 引用
      • bestucan
        bestucan 版主 副教授 最后由 编辑

        名字里带_的的基本是类的私有变量,类外无法读取,我猜这个带()的是返回私有变量的函数,即给其他的函数一个读取私有变量的接口。

        所以在类空间内他俩是一个东西,类外不带括号无法调用。就解释了你见到的现象。:mianmo:

        滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

        异步沟通方式(《posting style》from wiki)(下载后打开):
        https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
        提问的智慧(github在gitee的镜像):
        https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

        X 1 条回复 最后回复 回复 引用
        • X
          xpqiu 教授 @bestucan 最后由 xpqiu 编辑

          @bestucan 然而很可惜你猜错了。omega_() 返回的是 omega_ 这个 volScalarField 类型的变量的 Internal 部分(也就是只有内部网格的值,不包含边界值),而且是带量纲。

          bestucan 吴 2 条回复 最后回复 回复 引用
          • bestucan
            bestucan 版主 副教授 @xpqiu 最后由 编辑

            @xpqiu :jingya: :146: 来,举高高 :quwan:

            滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

            异步沟通方式(《posting style》from wiki)(下载后打开):
            https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
            提问的智慧(github在gitee的镜像):
            https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

            1 条回复 最后回复 回复 引用
            • 吴
              吴优 @xpqiu 最后由 吴优 编辑

              @xpqiu 谢谢您的回复,我把 omega_ 换成omega_() ,报了类型不匹配的错误,看了一下错误提示确实omega_() 是Internal的,但是omega_() 的相关定义在哪里可以找到呢?我看这个类里面没有,是在父类中吗?还是定义在volScalarField中呢?我看到GeometricField里面有一个重载:

              inline const Internal& operator()() const;
              

              不知道实现的是不是就是这个返回Internal信息的功能

              X 1 条回复 最后回复 回复 引用
              • X
                xpqiu 教授 @吴优 最后由 编辑

                @吴优 对,是这个。

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