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. decomposePar 的手动分块/手动指定计算区域分块

decomposePar 的手动分块/手动指定计算区域分块

已定时 已固定 已锁定 已移动 OpenFOAM
20 帖子 4 发布者 16.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hurricane007
    在 2019年4月17日 07:32 中回复了 浪迹天大 最后由 编辑
    #8

    @浪迹天大 对的,邱老师这篇博客讲的是一样的。
    @东岳 对,和你这个也是一样的。
    @bestucan 包围面积的话,是不是scotch考虑的是通信最少,所以采用的是边界网格数最少的方式?我去重新手动不要用python脚本试试,找不到constant文件我真是惊呆了

    1 条回复 最后回复
  • H 离线
    H 离线
    hurricane007
    在 2019年4月17日 07:53 中回复了 bestucan 最后由 编辑
    #9

    @bestucan update一下,的确手动复制就可以了,用python代码就不对。我得找找那个代码哪儿的问题

    1 条回复 最后回复
  • B 离线
    B 离线
    bestucan 版主 大神
    写于2019年4月17日 07:56 最后由 编辑
    #10

    @hurricane007 我说蜂窝只是不加其他考虑的回答你的那个问题,怎么样让接触边界小。
    我觉得通信量的大小倒不是很影响并行速度,主要是区域间的互相影响。


    比如如果有个长管喷嘴,照着喷嘴中心竖切分成两个区域。这样喷嘴左边和喷嘴右边都可以各自影响不是很大的一起计算。
    如果是横切两个区域,一个包含喷嘴,一个不包含喷嘴。那没有喷嘴的区域在初始时间没有什么计算量。因为还没喷过来。


    这是个很糙的例子,最恶劣的状况,网格分区,犬牙交错。那么计算过程更像是核之间的接力赛,你方唱罢我登台。那并行的优势是一点点都没有了。

    所以要避免这样的状况,我觉得要结合边界条件对流域有个定性的预估。至于scotch的工作原理我是不懂的:mihu:

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

    H 1 条回复 最后回复 2019年4月17日 08:05
  • H 离线
    H 离线
    hurricane007
    在 2019年4月17日 08:05 中回复了 bestucan 最后由 编辑
    #11

    @bestucan 对的对的,我也觉得是这样,那个“很糙”的例子其实很好,当计算区域内计算负载不均衡的时候,均匀的分区其实并不能均匀分配负载在各个线程上,我想做这个手动分区其实就是想搞这个,把计算负载最大的catalytic 边界分在更多的核上算。
    BTW,既然blockMeshDist里面能指定blcoks了,意味着在blockMesh里面已经是分块划分网格了,有没有一种方式直接在decomposeParDist里面指定每一个blcoks的分区方式呢?

    B 1 条回复 最后回复 2019年4月17日 08:32
  • H 离线
    H 离线
    hurricane007
    写于2019年4月17日 08:28 最后由 编辑
    #12

    再update一下python的代码,不知道哪个为啥错,但是重新写了下执行对了。但是响了下应该是可以写个script执行的,如果电脑上没python。。。

    #read file
    f1 = open("0/cellDist", "r")
    lines = f1.readlines()
    f1.close()
    
    #replace and delete unwanted lines
    lines[11] = lines[11].replace("volScalarField", "labelList")
    lines[12] = lines[12].replace("0", "constant")
    del lines[17:21]
    bfline = 0
    for i, line in enumerate(lines):
        if (line.find("boundaryField") != -1):
            bfline = i
            break
    del lines[i:]
    
    #write file
    f2 = open("constant/cellDist", "w")
    for line in lines:
        f2.write(line)
    f2.close();
    
    
    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2019年4月17日 08:31 最后由 编辑
    #13

    :xiexie: 感谢诸位大神分享!

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

    1 条回复 最后回复
  • B 离线
    B 离线
    bestucan 版主 大神
    在 2019年4月17日 08:32 中回复了 hurricane007 最后由 编辑
    #14

    @hurricane007 比block还简单粗暴,横着分两份,竖着分两份。第三个维度没有。
    zzaz.png

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

    H 1 条回复 最后回复 2019年4月17日 08:50
  • H 离线
    H 离线
    hurricane007
    在 2019年4月17日 08:50 中回复了 bestucan 最后由 编辑
    #15

    @bestucan 如果我在blockMeshDict里面定义了两个blocks,然后我想把第一个block分成两快,第二个block分成6块,有简单的实现方法么。。

    B 1 条回复 最后回复 2019年4月18日 01:32
  • B 离线
    B 离线
    bestucan 版主 大神
    在 2019年4月18日 01:32 中回复了 hurricane007 最后由 编辑
    #16

    @hurricane007 我的实际操作经验还是挺少的。没见有可以把block和分区结合一起的方法,毕竟这两个分的依据都不太一样。有个方式是manual,看起来很适合你的样子。直接指定哪个网格属于哪个分区。但没见过相关例子。 :mianmo:

    zszz.png zzzzz.png

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

    H 1 条回复 最后回复 2019年4月18日 07:26
  • H 离线
    H 离线
    hurricane007
    在 2019年4月18日 07:26 中回复了 bestucan 最后由 编辑
    #17

    @bestucan
    这个就是我这个帖子说的。。。。

    B 1 条回复 最后回复 2019年4月18日 07:39
  • B 离线
    B 离线
    bestucan 版主 大神
    在 2019年4月18日 07:39 中回复了 hurricane007 最后由 编辑
    #18

    @hurricane007 那这种方法挺好的:duang:
    如果手动加工去关联block和分区。可以用写脚本,bash、python都行。读constant/polymesh里的数据,计算生成celllist。
    这个工作量并不是很大,就是逻辑理着麻烦。
    linux一切皆文本的好处,什么信息都可读,操作方法通用,容易嫁接。

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

    H 1 条回复 最后回复 2019年4月18日 07:45
  • H 离线
    H 离线
    hurricane007
    在 2019年4月18日 07:45 中回复了 bestucan 最后由 编辑
    #19

    @bestucan 其实这个方法是用 setFields 先赋值一个cellLabel 场,每个点的值为想分的区,再把这个场给转化成manualDist,然后再用decomposePar 根据这个manualDist 分区了。
    但是我觉得可能自己分区不一定有算法分的好,那么最好就是手动分成几块,然后算法再把每块分成几小块

    B 1 条回复 最后回复 2019年4月18日 08:04
  • B 离线
    B 离线
    bestucan 版主 大神
    在 2019年4月18日 08:04 中回复了 hurricane007 最后由 编辑
    #20

    @hurricane007 这个思路挺不不错。我没见过手动分区的例子,不懂了 :zoule: 加油。

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

    1 条回复 最后回复
2019年4月16日 18:18

17/20

2019年4月18日 07:26

2019年4月18日 08:04
  • 登录

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