如何找到mesh_.nCells()的源文件具体位置?
-
各位朋友们好!
我现在正在研究lagrangian库中的代码,参考网上的教程进行一些二次开发,其中有些设置流场初始值 或者 调用某些网格单元 中心、边长的代码自己不太懂。(例如: mesh_.nCells(), mesh_nCells().size()等)
本着溯源的目的,目前自己采取的方法是在lagrangian库下面 调用搜索命令
grep -R 'mesh_.nCells() ./
查找对应的文件,例如搜索到:./intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
然后在doxygen上查找对应文件的源代码(链接:https://cpp.openfoam.org/v3/a06411_source.html),
可以发现KinematicCloud.C中mesh_.nCells()的位置 ,但在这里却没有对应的链接 来解释mesh_.nCells()的含义(见下图)
请问我如何找到真正定义mesh_n.Cells() 的源文件的位置呢?我想查看一下nCells()函数的具体功能
我感觉这个找mesh_n.Cells() 源代码的方法,也应该可以推广应用到查找网格单元的其他属性吧?(比如想查找单元中心的位置,单元的边长等等)
希望各位前辈 朋友们能够指点一下
-
@xpqiu 非常感谢邱老师的热心指点!
根据邱老师的指点,我自己梳理了一下思路:
1.找到对象mesh_的类fvMesh,fvMesh类具体介绍:https://cpp.openfoam.org/v3/a08664_source.html ,可以发现fvMesh类继承了primitiveMesh这个类,necll() 函数是在primitiveMesh类中定义的。
2.查找primitiveMesh类,发现了成员函数nCell(),这样就可以在primitiveMesh.H文件、primitiveMeshI.H文件查看具体定义了
但上述这个过程,我目前存在一个问题,在fvMesh.H中 fvMesh类 调用 基类primitiveMesh成员函数nCell() 的接口 是 哪几行代码呢?(fvMesh.H文件源代码链接:
https://cpp.openfoam.org/v3/a05817_source.html
)我自己对老师说的 “搜索fvMesh这个类的接口” 这句话 不太理解
同时,结合我自己初学的一些C++知识,fvMesh类的接口应该是 留给fvMesh类的子类 调用的,这里我要找的应该是fvMesh类的某个基类(即primitiveMesh),总感觉有点矛盾
麻烦老师能否再指点一下?谢谢
-
在fvMesh.H中 fvMesh类 调用 基类primitiveMesh成员函数nCell() 的接口 是 哪几行代码呢?
换一种说法,不用接口之类这样容易混淆的概念。简单地说,C++里面类的成员函数是可以继承的。先只说公有的成员函数,父类的公有成员函数可以被子类的对象调用,比如 nCells 这个函数,是 primitiveMesh 类的公有成员函数,所以这个函数可以给其子类的对象来调用。fvMesh 是 primitiveMesh 的一个子类,所以,mesh_ 作为 fvMesh 类的对象,可以调用 nCells 这个函数。
而不是说fvMesh.H 里面需要怎么调用 “基类primitiveMesh成员函数nCell() 的接口”。fvMesh类的接口应该是 留给fvMesh类的子类 调用的,这里我要找的应该是fvMesh类的某个基类(即primitiveMesh),总感觉有点矛盾
这个你说得对,我上面用接口这个概念的时候太随意了,所以我们就直接说成员函数好了。