@李东岳 老师,我自己觉得是可以,只是我没想好具体的实际方法,这也是为什么我选择在均匀的网格下弄。 我对于我现在均匀网格的就这么搞得 我自定义了我的固体活动范围里的网格编号和关系 均匀网格的连接关系很简单 我甚至连数组都不用开个去记录 我只是为了并行 预处理了固体活动范围内每个网格所在核心的编号和所处分块区域内我自定义编号的cell在对应核心对应分解域内的真实编号 计算时候根据连接关系,o(1)的运算时间取出临近网格的自定义标号 然后根据预处理记录的它在所属分块内的真实编号来计算 。
只是对于非结构网格,不均匀,有变形这种,我具体不太知道openfoam里编号的规律,也不知道老师您这里具体的应用场景是什么。我个人觉得,也是在进入时间步循环前,搞个预处理,把非结构网格的cell中心坐标提前循环一遍预处理,映射给自己自定义的一套均匀网格,然后一个数组记录,数组下标是自定义映射均匀网格的编号,该数组下标里数组对应内容是落在这个自定义网格内的非结构网格的真实编号,均匀网格的关系很简单,可以简单查找临近关系。而且这个映射网格的作用纯粹就是,映射个大致的位置关系。但是这个映射的均匀网格的尺寸要小于实际非结构最小cell的尺寸,大致我是这么想的。但是这样我不知道提前记录的内存开销有多大,我觉得甚至还不如,自己知道每个非结构网格要查找的周围感兴趣网格范围,每个模拟开始进入时间步前,提前预处理输出给文件打个表 (因为是预处理,所以无所谓,各种findcell也花不太久,因为只需要执行一次并记录),然后运算时候,对于某个非结构网格,直接读取预处理打表的那个文件,再取出周围符合关系的网格编号。这里读取文件,和字符串处理花一点运算时间。