decomposePar 的手动分块/手动指定计算区域分块
-
但是我试了下,运行出了个错误,感觉搞笑得一塌糊涂,找不到constant文件??不是应该找的是constant/cellDist么?
--> FOAM FATAL IO ERROR: cannot find file file: /home/he/catalyticFOAM/case/cloneCaseStudy/constant at line 0. From function regIOobject::readStream() in file db/regIOobject/regIOobjectRead.C at line 72. FOAM exiting
-
@hurricane007 我说蜂窝只是不加其他考虑的回答你的那个问题,怎么样让接触边界小。
我觉得通信量的大小倒不是很影响并行速度,主要是区域间的互相影响。
比如如果有个长管喷嘴,照着喷嘴中心竖切分成两个区域。这样喷嘴左边和喷嘴右边都可以各自影响不是很大的一起计算。
如果是横切两个区域,一个包含喷嘴,一个不包含喷嘴。那没有喷嘴的区域在初始时间没有什么计算量。因为还没喷过来。
这是个很糙的例子,最恶劣的状况,网格分区,犬牙交错。那么计算过程更像是核之间的接力赛,你方唱罢我登台。那并行的优势是一点点都没有了。
所以要避免这样的状况,我觉得要结合边界条件对流域有个定性的预估。至于scotch的工作原理我是不懂的
-
再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还简单粗暴,横着分两份,竖着分两份。第三个维度没有。
-
@hurricane007 我的实际操作经验还是挺少的。没见有可以把block和分区结合一起的方法,毕竟这两个分的依据都不太一样。有个方式是manual,看起来很适合你的样子。直接指定哪个网格属于哪个分区。但没见过相关例子。
-
@hurricane007 那这种方法挺好的
如果手动加工去关联block和分区。可以用写脚本,bash、python都行。读constant/polymesh里的数据,计算生成celllist。
这个工作量并不是很大,就是逻辑理着麻烦。
linux一切皆文本的好处,什么信息都可读,操作方法通用,容易嫁接。 -
@hurricane007 这个思路挺不不错。我没见过手动分区的例子,不懂了 加油。