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. globalNumbering_的作用是怎么发挥的?(OF中的全局索引和局部索引)

globalNumbering_的作用是怎么发挥的?(OF中的全局索引和局部索引)

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

    老师们好,在OF并行计算的过程中,涉及到区域分解,目前我了解的知识有:在每个进程上,所有的实体(单元,节点,面)都会有自己的局部编号(从0开始编起)。但是进程之间通信的时候,需要借助全局编号(此处我不知道自己的理解对不对,或是不需要??请指正!)总之,有用到全局编号的时候,那么这个时候就需要调用globalNumbering_函数(该函数在globalindex类中)。请问大家有没有解读过这个函数的功能呢?或者诸位能否提供一下关于全局索引和局部索引转化的说明呢?谢谢!感恩!

    1 条回复 最后回复
  • MicroM 离线
    MicroM 离线
    Micro
    写于 最后由 编辑
    #2

    自挖自填,大家可以看下这个网站https://develop.openfoam.com/Development/OpenFOAM-plus/-/issues/1412。

    不过还有一个疑问,就是每个进程中重新调用globalNumbering_函数获得的global index,和一开始串行blockMesh得到的全局索引,是一致的吗?有没有大师指点下迷津

    1 条回复 最后回复
  • MicroM 离线
    MicroM 离线
    Micro
    写于 最后由 编辑
    #3

    说一下新发现,经过globalindex后输出的全局坐标和一开始串行划分的全局坐标不一致。新的问题,OF中什么时候会调用这个globalindex函数呢?进程间通信需要全局信息吗?谢谢!

    马乔马 1 条回复 最后回复
  • K 离线
    K 离线
    keke
    写于 最后由 编辑
    #4

    你好,请问你解决了这个问题吗?我也遇到了这个问题。

    1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    在 中回复了 Micro 最后由 编辑
    #5

    @micro 这个会在每个核里存一个共享的偏移数组,根据当前核编号和核locasize累计。在decompose后,全局编号是当前核的局部编号+偏移,这个一般会跟未分解前不一致(比如blockmesh编号是按定义的x-y-z来的)。一般在需要reconstruct, distribute,聚合的地方用到吧,我也就用过一次。

    装逼没输过,吵架没赢过!

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 马乔 最后由 编辑
    #6

    @马乔 您好,想请教一下,对于流固耦合,我现在用的浸入边界法,按照您的经验,并行时候我需要把固体节点也分割给不同decomposed流体区域吗,还是每个流体区域都享有同样的完整的固体数据免得固体信息还要传来传去。但是就算如此,固体和流体之间插值时候,我用二阶插值,还是免不了外部循环总固体节点,内循环是在每个固体节点处查找邻近的两个网格间距内所有流体cell,会用findCell,效率奇低。不知您有什么建议吗?谢谢

    马乔马 1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    在 中回复了 OItoCFD 最后由 编辑
    #7

    @oitocfd 如果只是交换边界两侧的值,试试syncTools::swapBoundaryCellList. 如果只是查找离边界两层的网格可以用下FaceCellWave这个类(这个类会迭代全场网格,你需要修改类的迭代行为)。如果是固定距离就trisurfaceSearch了。话说为嘛不直接移指下foam-Extend的ib呢?

    装逼没输过,吵架没赢过!

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 马乔 最后由 编辑
    #8

    @马乔 谢谢指导,foam-Extended那个ibm的方法我不喜欢,我之前看的别人用的好像还是压力震荡的问题,我自己写的ibm没压力震荡,而且因为是自己写的,我结合其他有限元的方法更方便写的速度更快。问题只是出在并行写法上,用到并行其实就是ib点的速度插值,和体积力分散给流体这里,用二阶函数要用到周围两个格子距离内所有网格,会跨区域,但是一直findcell再合并,对于移动物体没法预处理打表的是真的慢。

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #9

    @oitocfd extend那面给定一个点矢量,在最初的时候怎么寻找这个点所在的网格的?

    在运行过程中,如果你把这个点当做拉格朗日粒子,通过拉格朗日库来跟踪粒子,这样粒子所在的网格就出来了,可以么?

    每一步findCell确实不可忍受。我之前见他们做fast-fluid的时候,需要定位某个点矢量所在的网格,用的类似拉格朗日的方法

    2b758a93-0b08-4e20-9d31-4833cf9b2e1f-image.png

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

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #10

    @李东岳 老师这个我就没仔细看extend的代码了,我是看他们还有压力震荡我就直接自己重写IBM了。我在写类似方法时候是按照网格的固体填充度算一个梯度得个方向矢量,然后沿着矢量方向findcell,速度极慢。现在是直接固体表面拉格朗日点,背景流体网格全用均匀的正四面体,这样随便给一个粒子坐标,o(1)的时间就知道它位于哪个流体网格。前后左右上下的临近网格也都是o(1)就能算。不用findcell了。但是就丢掉了非结构网格的优势。

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 OItoCFD 最后由 编辑
    #11

    @oitocfd 如果用非结构网格,如果网格只是扭曲变形的话,是不是也可以在最开始自定义一下网格的连接性,然后通过结构网格的思想,缩小寻找范围?

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

    O 1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    在 中回复了 李东岳 最后由 编辑
    #12

    @李东岳 老师,我自己觉得是可以,只是我没想好具体的实际方法,这也是为什么我选择在均匀的网格下弄。 我对于我现在均匀网格的就这么搞得 我自定义了我的固体活动范围里的网格编号和关系 均匀网格的连接关系很简单 我甚至连数组都不用开个去记录 我只是为了并行 预处理了固体活动范围内每个网格所在核心的编号和所处分块区域内我自定义编号的cell在对应核心对应分解域内的真实编号 计算时候根据连接关系,o(1)的运算时间取出临近网格的自定义标号 然后根据预处理记录的它在所属分块内的真实编号来计算 。

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

    1 条回复 最后回复

  • 登录

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