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. cellMotion边界条件源码阅读求助

cellMotion边界条件源码阅读求助

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

    大家好,变形网格求解cellDisplacement时,需要用到cellMotion边界条件。我在看其updateCoeffs()函数时(见下),不理解这句:this->operator[](i) = pp[i].average(points, pointMotion); average函数咋有两个输入参数了呢?

        const fvPatch& p = this->patch();
        const polyPatch& pp = p.patch();
        const fvMesh& mesh = this->internalField().mesh();
        const pointField& points = mesh.points();
     
        word pfName = this->internalField().name();
        pfName.replace("cell", "point");
     
        const GeometricField<Type, pointPatchField, pointMesh>& pointMotion =
            this->db().objectRegistry::template
                lookupObject<GeometricField<Type, pointPatchField, pointMesh>>
                (pfName);
     
        forAll(p, i)
        {
            this->operator[](i) = pp[i].average(points, pointMotion);
        }
    
    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #2

    https://www.openfoam.com/documentation/guides/latest/api/index.html
    https://cpp.openfoam.org/v12/

    右上角有搜索窗口,可以快速找到函数原型

    滚来滚去……~(~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

    L 1 条回复 最后回复
  • L 在线
    L 在线
    lwjetmann
    在 中回复了 bestucan 最后由 编辑
    #3

    @bestucan 谢谢老师回复!我也知道这个搜索功能,只是我在里边实在找不到原型 ╯︿╰
    再就是这种直接定义在FOAM名称空间下的函数,浏览器toolbox查看卡的不行,也很难搜索在哪儿定义的,不知道有没有好的解决方法

    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #4

    找pp[i].average的定义

    pp是p的patch的引用,p是this的patch的引用。

    所以pp是this的patch的patch。

    所以pp的子函数average要从this里找。this就是当前这个类:cellMotionFvPatchField

    这个类的定义在:src/fvMotionSolver/fvPatchFields/derived/cellMotion/cellMotionFvPatchField.H

    由类定义可知,该类继承自 fixedValueFvPatchField.H (src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.H)

    fixedValueFvPatchField 又继承自 fvPatchField (src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H)
    这里352行,有patch函数,返回值是patch_

    src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.C 中显示patch_的初始变量是fvPatch类型的(this的patch)

    src/finiteVolume/fvMesh/fvPatches/fvPatch/fvPatch.H
    这里142行,有patch函数,返回值是polyPatch_,它的声明在69行,是polyPatch类型(this的patch的patch)

    polyPatch里没有average函数,接着往基类上找(src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H)

    继承自两个类:patchIdentifier, primitivePatch

    第一个查无所获,第二个:
    src/OpenFOAM/meshes/primitiveMesh/primitivePatch/primitivePatch.H

    里面有四个头文件,一个个找过去,

    第一个:

    src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H(^处两个字母,大小写和上面不一样)
                                      ^              ^
    

    没有average函数
    第二个:
    src/OpenFOAM/meshes/meshShapes/face/face.H

    好了,找到函数原型:148行

            //- Calculate average value at centroid of face
            template<class Type>
            Type average(const pointField&, const Field<Type>&) const;
    

    代码行数都是OpenFOAM 10版本的

    网页搜着慢,可以自己编译个本地的,搜着快,一句命令就可以生成。

    can@M320-TC:/home/can/.local/share/OpenFOAM/OpenFOAM-10/doc/Doxygen> ll                                                     (git)-[master]-
    total 140K
    drwxr-xr-x 2 can can 4.0K Jan  6  2023 Macros/
    -rwxr-xr-x 1 can can 2.0K Jan  6  2023 Allwmake*
    -rw-r--r-- 1 can can  496 Jan  6  2023 CFDFoundation55x55.png
    -rw-r--r-- 1 can can  948 Jan  6  2023 customdoxygen.css
    -rw-r--r-- 1 can can 103K Jan  6  2023 Doxyfile
    -rw-r--r-- 1 can can  716 Jan  6  2023 footer.html
    -rw-r--r-- 1 can can 2.1K Jan  6  2023 header.html
    -rw-r--r-- 1 can can 7.5K Jan  6  2023 README.html
    -rw-r--r-- 1 can can 1.7K Jan  6  2023 README.org
    can@M320-TC:/home/can/.local/share/OpenFOAM/OpenFOAM-10/doc/Doxygen> ./Allwmake                                             (git)-[master]-
    

    也可以手动找。加载了OpenFOAM环境后,src命令直接跳到源代码目录,然后:

    直接找到类的定义:

    find   .   -name   calssWhatIWant.H
    

    直接找函数:

    grep   -r   "functionWhatIWant("   .
    

    加半拉括号是为了减少搜索到的结果。搭配正则表达式用,搜的效率更高。

    滚来滚去……~(~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

    李东岳李 L 2 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 bestucan 最后由 编辑
    #5

    @bestucan :146: :146: :146:

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

    1 条回复 最后回复
  • L 在线
    L 在线
    lwjetmann
    在 中回复了 bestucan 最后由 编辑
    #6

    @bestucan 谢谢老师的手把手指导!原来是可以沿着基类往上找的,之前一看到继承了好几个基类就感觉太麻烦找不出来了。

    使用grep在src中搜还可以搜到用法,也很不错,但是函数定义换行了就不好搜了。比如这个要是用 grep -rP "::average\n\(" . 啥也找不到。

    编译本地doxygen也学到了,openfoam2406版本的方法整理一下

    sudo apt-get install doxygen graphviz  
    cd /usr/share/doc/openfoam2406-common/doc/Doxygen/
    gzip -dk Doxyfile.gz  #解压doxygen配置文件
    ./Allwmake
    firefox html/index.html
    

    本地查看foam下的函数不会卡了,不过网页中没有的函数原型本地也没有

    1 条回复 最后回复

  • 登录

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