OpenFOAM求解器植入自己的代码后并行计算问题
-
OpenFOAM 并行和通常意义上的并行有点区别。一般并行的部分都是写在代码里的。OpenFOAM 的并行部分不在代码里,严格说,都不是并行的。并行的任务分配是通过 decomposePar 完成。并行计算是通过 runParallel 完成的。所谓并行就是一下开几个求解器进程,同时算不同的区域,几个求解器的计算区域的交接处信息交换也是 runParallel 完成的。
这样求解器中的变量就不能“特殊”,要“通识”。不能直接“全场”信息,要用“我计算的所有网格”信息。
你的第一个帖子说要用每个时间步计算的到的数据,这个数据的调用直接写进求解器。那么在各个区域上计算的进程有的快,有的慢。全场的信息(或者说某个时间步计算的到的结果)对于单个进算进程来说是未知的。对于单个进程:我只计算左上角的区域,然后下一步计算需要引用全区域变量。
runParallel 应该是没有这样的调度的。进程有快慢,所以偶尔会互相等待。等待也是等待交界面的信息。而这个全场信息是等不来的,得合并各个进程的计算结果才有。
所以有些求解器它就是不能并行,施主又何必强求