globalNumbering_的作用是怎么发挥的?(OF中的全局索引和局部索引)
-
老师们好,在OF并行计算的过程中,涉及到区域分解,目前我了解的知识有:在每个进程上,所有的实体(单元,节点,面)都会有自己的局部编号(从0开始编起)。但是进程之间通信的时候,需要借助全局编号(此处我不知道自己的理解对不对,或是不需要??请指正!)总之,有用到全局编号的时候,那么这个时候就需要调用globalNumbering_函数(该函数在globalindex类中)。请问大家有没有解读过这个函数的功能呢?或者诸位能否提供一下关于全局索引和局部索引转化的说明呢?谢谢!感恩!
-
自挖自填,大家可以看下这个网站https://develop.openfoam.com/Development/OpenFOAM-plus/-/issues/1412。
不过还有一个疑问,就是每个进程中重新调用globalNumbering_函数获得的global index,和一开始串行blockMesh得到的全局索引,是一致的吗?有没有大师指点下迷津
-
说一下新发现,经过globalindex后输出的全局坐标和一开始串行划分的全局坐标不一致。新的问题,OF中什么时候会调用这个globalindex函数呢?进程间通信需要全局信息吗?谢谢!
-
你好,请问你解决了这个问题吗?我也遇到了这个问题。
-
@李东岳 老师,我自己觉得是可以,只是我没想好具体的实际方法,这也是为什么我选择在均匀的网格下弄。 我对于我现在均匀网格的就这么搞得 我自定义了我的固体活动范围里的网格编号和关系 均匀网格的连接关系很简单 我甚至连数组都不用开个去记录 我只是为了并行 预处理了固体活动范围内每个网格所在核心的编号和所处分块区域内我自定义编号的cell在对应核心对应分解域内的真实编号 计算时候根据连接关系,o(1)的运算时间取出临近网格的自定义标号 然后根据预处理记录的它在所属分块内的真实编号来计算 。
只是对于非结构网格,不均匀,有变形这种,我具体不太知道openfoam里编号的规律,也不知道老师您这里具体的应用场景是什么。我个人觉得,也是在进入时间步循环前,搞个预处理,把非结构网格的cell中心坐标提前循环一遍预处理,映射给自己自定义的一套均匀网格,然后一个数组记录,数组下标是自定义映射均匀网格的编号,该数组下标里数组对应内容是落在这个自定义网格内的非结构网格的真实编号,均匀网格的关系很简单,可以简单查找临近关系。而且这个映射网格的作用纯粹就是,映射个大致的位置关系。但是这个映射的均匀网格的尺寸要小于实际非结构最小cell的尺寸,大致我是这么想的。但是这样我不知道提前记录的内存开销有多大,我觉得甚至还不如,自己知道每个非结构网格要查找的周围感兴趣网格范围,每个模拟开始进入时间步前,提前预处理输出给文件打个表 (因为是预处理,所以无所谓,各种findcell也花不太久,因为只需要执行一次并记录),然后运算时候,对于某个非结构网格,直接读取预处理打表的那个文件,再取出周围符合关系的网格编号。这里读取文件,和字符串处理花一点运算时间。
8/12