decomposePar 的手动分块/手动指定计算区域分块
-
@bestucan 对的对的,我也觉得是这样,那个“很糙”的例子其实很好,当计算区域内计算负载不均衡的时候,均匀的分区其实并不能均匀分配负载在各个线程上,我想做这个手动分区其实就是想搞这个,把计算负载最大的catalytic 边界分在更多的核上算。
BTW,既然blockMeshDist里面能指定blcoks了,意味着在blockMesh里面已经是分块划分网格了,有没有一种方式直接在decomposeParDist里面指定每一个blcoks的分区方式呢? -
再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();
-
@hurricane007 比block还简单粗暴,横着分两份,竖着分两份。第三个维度没有。
-
@bestucan 如果我在blockMeshDict里面定义了两个blocks,然后我想把第一个block分成两快,第二个block分成6块,有简单的实现方法么。。
-
@hurricane007 我的实际操作经验还是挺少的。没见有可以把block和分区结合一起的方法,毕竟这两个分的依据都不太一样。有个方式是manual,看起来很适合你的样子。直接指定哪个网格属于哪个分区。但没见过相关例子。
-
@bestucan
这个就是我这个帖子说的。。。。 -
@hurricane007 那这种方法挺好的
如果手动加工去关联block和分区。可以用写脚本,bash、python都行。读constant/polymesh里的数据,计算生成celllist。
这个工作量并不是很大,就是逻辑理着麻烦。
linux一切皆文本的好处,什么信息都可读,操作方法通用,容易嫁接。 -
@bestucan 其实这个方法是用 setFields 先赋值一个cellLabel 场,每个点的值为想分的区,再把这个场给转化成manualDist,然后再用decomposePar 根据这个manualDist 分区了。
但是我觉得可能自己分区不一定有算法分的好,那么最好就是手动分成几块,然后算法再把每块分成几小块 -
@hurricane007 这个思路挺不不错。我没见过手动分区的例子,不懂了
加油。
20/20