CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    如何使用lookupObject寻找SRC库内的场变量

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

      各位老师,我目前在使用MPPICFoam求解器时,需要在主函数中对壁面粘附的massStick这个场进行处理,但是现在无法寻找到这一场变量,尝试两种写法,虽都能通过编译,但运行均会报错,代码及报错信息如下1,2。具体需要寻找的场变量定义如下图,希望各位老师,朋友加以指点,不胜感激,卡在这地方好几天了:136:

      1.png
      1、

      const volScalarField  stick = mesh.time().lookupObject<volScalarField>("massStick");
      //报错信息是 
      request for volScalarField massStick from objectRegistry shiyan3 failed available objects of type volScalarField are 0()
      
      

      2、

      const volScalarField  stick = mesh.lookupObject<volScalarField>("massStick");
      //报错信息是      
      request for volScalarField massStick from objectRegistry region0 failed available objects of type volScalarField are
      8
      (
      alpha.air_0
      deltaH2
      nu
      mu.air
      p
      alpha.air
      rho.air
      deltaH1
      )
      
      
      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 李东岳 编辑

        前后调用关系正确么。还有你那个if执行了么。另外你那个定义放在别个位置可以么,另外你那个不需要this->owner().name() + ...,直接massStkck就行

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

        U 1 条回复 最后回复 回复 引用
        • U
          upc_ngh @李东岳 最后由 编辑

          @李东岳 感谢东岳老师的回答,第一张图内代码定义的massStick()不是我写的,是src库内定义的场变量,我目前想在求解器主程序内寻找到这一变量,于是在求解器程序内写了如代码1,2两种方式,发现都无法寻找到massStick这个场变量,老师您看代码1,2写的是不是有啥问题?谢谢东岳老师!

          马乔 1 条回复 最后回复 回复 引用
          • 马乔
            马乔 副教授 @upc_ngh 最后由 编辑

            @upc_ngh 试试在这两句lookup之前显式调用下massStick()呢?

            装逼没输过,吵架没赢过!

            U 1 条回复 最后回复 回复 引用
            • U
              upc_ngh @马乔 最后由 编辑

              @马乔 谢谢马乔老师的回答,这个问题我通过其他方法绕过去解决了。我在求解器外定义了一个场,然后传输进SRC中,把我想获取的值传递到这个场内,然后就可以在求解器调用massStick()的数值了,谢谢前辈的点拨,我后面试试先调用这个方法是否可行,再次感谢!:xinxin:

              四 1 条回复 最后回复 回复 引用
              • 四
                四季之中的隐星 @upc_ngh 最后由 编辑

                @upc_ngh 您好,我刚好最近也遇到这个问题,想要把src文件夹下的值传递到application中,请问您具体是怎么实现和解决的呢,望赐教,感激不尽:xinxin:

                U 1 条回复 最后回复 回复 引用
                • U
                  upc_ngh @四季之中的隐星 最后由 编辑

                  @四季之中的隐星 你好,我的方法比较笨。首先在application定义一个场变量(和你要传回来的场值最好一样);然后把这个量传递进SRC中,在SRC里面把场的const性质强行转换为非const,这样就可以赋值,传递出来了

                  四 1 条回复 最后回复 回复 引用
                  • 四
                    四季之中的隐星 @upc_ngh 最后由 编辑

                    @upc_ngh 从const转换到非const是怎么做的:140: ,我现在只能通过mesh.lookupObject<volScalarField>获得场值。

                    U 1 条回复 最后回复 回复 引用
                    • U
                      upc_ngh @四季之中的隐星 最后由 编辑

                      @四季之中的隐星
                      我自己写的求解器场变量是XX,传进去之后使用const volatile进行转换,你看看是否有帮助

                       const  fvMesh& mesh = this->owner().mesh();
                       const volatile volScalarField& zhan = mesh.objectRegistry::lookupObject<volScalarField>("XX");
                       const volatile volScalarField& Tsur = mesh.objectRegistry::lookupObject<volScalarField>("Tcell");    
                      volScalarField* modifier = (volScalarField*)(&zhan);
                      volScalarField& XXX = *modifier;  
                      volScalarField* modifierTsur = (volScalarField*)(&Tsur);
                      volScalarField& Tsurface = *modifierTsur;
                      
                      四 2 条回复 最后回复 回复 引用
                      • 四
                        四季之中的隐星 @upc_ngh 最后由 编辑

                        @upc_ngh 好的,非常感谢:146:

                        1 条回复 最后回复 回复 引用
                        • 四
                          四季之中的隐星 @upc_ngh 最后由 编辑

                          @upc_ngh 有一个更简单的方法,我最近发现的,你索引的时候不要用

                          ···lookupObject···
                          

                          用

                          ···lookupObjectRef···
                          

                          用这个函数查找的结果可以直接修改并传值回去

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