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. 求解器中如何使用私有变量

求解器中如何使用私有变量

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

    我想在自己的求解器中使用incident radiation 'G',它在'fvDOM.H'中是一个private data

    相关代码如下:

    /*---------------------------------------------------------------------------*\
                               Class fvDOM Declaration
    \*---------------------------------------------------------------------------*/
    
    class fvDOM
    :
        public radiationModel
    {
        // Private data
    
    
            //- Incident radiation  [W/m2]
            volScalarField G_;
    …………………………………………………
    //- Const access to incident radiation field
                inline const volScalarField& G() const;
    

    在我的求解器中,我打算调用G来计算温度:

    T=pow(G/(4*sigma),0.25);
    

    但G是否要定义?如何进行读取?

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

    需要提供成员函数,例如:

    inline const volScalarField& G() const
    {
        return G_;
    }
    

    然后在你的求解器里面可以

    T=pow(yourClass.G()/(4*sigma),0.25);
    

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

    stergopilotS 1 条回复 最后回复
  • stergopilotS 离线
    stergopilotS 离线
    stergopilot
    在 中回复了 李东岳 最后由 李东岳 编辑
    #3

    @东岳 您好,我仅在createfields.h中定义这个成员函数,

    inline const volScalarField& G() const
    {
        return G_;
    }
    

    但是编译无法通过,出现错误

    In file included from radiationFoam.C:45:0:
    createFields.H: In function ‘int main(int, char**)’:
    createFields.H:49:1: error: a function-definition is not allowed here before ‘{’ token
     {
    

    此外,yourClass指的是什么?fvDOM?

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #4

    你好,我看了一下 fvDOM.H 这个文件,发现它里边已经定义了一个函数 G() 用于调用 G_,即该文件中的:

     //- Const access to incident radiation field
     inline const volScalarField& G() const;
    

    这样你就不需要在 solver 中定义了,通过这个函数使用它即可。
    然后我看 fireFoam 里使用了辐射模型,它创建了一个指针 radiation,类型是 radiationModel。但是这个类里边并没有 G() 这个函数,因此我们需要把它转换成它的派生类 fvDOM ,这样才能使用 G() 这个函数。
    你可以这样做,在求解器里边:

    const volScalarField & G = dynamic_cast<const Foam::radiation::fvDOM &>(radiation()).G();
    

    这句话有两个作用,1. 把 radiation 转换成它的派生类 fvDOM,2. 创建一个体标量场的引用,通过 G() 这个函数指向 fvDOM 类的私有数据 G_。
    于是就可以使用 G 来更新你的温度了:T=pow(G/(4*sigma),0.25);。我编译了一下改动后的代码,发现这里的 T 是一个 const引用 ,编译失败,如果你也遇到这个问题,可以在创建它的地方,把 const volScalarField& T = thermo.T(); 改为
    volScalarField& T = thermo.T(); 即可。
    对了,我们在求解器中使用了 fvDOM 这个类,所以需要在求解器最开始的地方 include 其头文件。

    祝顺利~

    OpenFOAM 学习交流:https://openfoam.top

    stergopilotS 1 条回复 最后回复
  • stergopilotS 离线
    stergopilotS 离线
    stergopilot
    在 中回复了 浪迹天大 最后由 编辑
    #5

    @浪迹天大 非常感谢您的帮助,我已经完美解决这个问题。

    1 条回复 最后回复

  • 登录

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