CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    如何在可编程源项中使用codeCorrect或codeSetValue来实时修正场量

    OpenFOAM
    1
    2
    125
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 田畔的风
      田畔的风 讲师 最后由 田畔的风 编辑

      有一项工作需要在每个时间步对物理场进行修正,之前采用的方法是参考fvOptions/corrections的源码编译自己的库(OpenFOAM-v2206),但是这种方法比较麻烦。现在我注意到coded source的参考文档有这么一句话:

      The coded option is available to all primitive field types, i.e.

      scalarCodedSource: scalar equations
      ...
      It provides hooks to:

      include sources: codeAddSup
      constrain values before the equation is solved: codeSetValue
      apply corrections after the equation has been solved: codeCorrect

      看上去似乎能在求解控制方程的前后使用codeSetValue或codeCorrect调整场量,从源码看似乎传入了一个场的引用:

      template<class Type>
      void Foam::fv::CodedSource<Type>::correct
      (
          GeometricField<Type, fvPatchField, volMesh>& field
      )
      {
          DebugInfo
              << "fv::CodedSource<" << pTraits<Type>::typeName
              << ">::correct for source " << name_ << endl;
      
          updateLibrary(name_);
          redirectOption().correct(field);
      }
      
      

      但是最后并没有找到用法...在codeCorrect代码段里试了试变量名称和field都显示变量未声明,不知哪位大佬有正确的使用方法?还是我理解有误,这个函数并不能实现修改场量的功能?

      1 条回复 最后回复 回复 引用
      • 田畔的风
        田畔的风 讲师 最后由 编辑

        算是解决了吧,其实大可不必费力去猜,先写个Info看看这玩意执行的时间点合不合适,然后直接访问fvMesh对象,拿个引用出来就完事了:mihu:

        codeCorrect
        #{
        volVectorField &U = mesh().lookupObjectRef<volVectorField>("U");
        #}
        
        1 条回复 最后回复 回复 引用
        • First post
          Last post