OpenFOAM求解器植入自己的代码后并行计算问题



  • 请问一下,OpenFOAM求解器植入自己的代码后还能并行计算吗,代码功能并不是CFD相关算法,具体来说应该是对求解器每个时间步计算得到数据的再次使用。


  • 版主 副教授

    那并行求解器也是人写的……
    用开源不就是为了对计算过程肆意妄为,想干啥干啥:chitang:
    当然能啊,只要想到就能。计算机就是帮助人类做重复无意义的工作的。

    你描述的这个其实不用改求解器也行,只是用时间步的数据,算了完再处理也行。编程语言都能处理纯文本数据,或者matlab、excel



  • 首先,谢谢老师回答,我们这个工作不能输出后再处理,涉及利用计算数据进行反演计算。第二,我不是很懂OpenFOAM的并行是什么原理,只是按照使用规则用过,加了自己的代码后再并行就崩了 :xinlei:


  • 版主 副教授

    OpenFOAM 并行和通常意义上的并行有点区别。一般并行的部分都是写在代码里的。OpenFOAM 的并行部分不在代码里,严格说,都不是并行的。并行的任务分配是通过 decomposePar 完成。并行计算是通过 runParallel 完成的。所谓并行就是一下开几个求解器进程,同时算不同的区域,几个求解器的计算区域的交接处信息交换也是 runParallel 完成的。

    这样求解器中的变量就不能“特殊”,要“通识”。不能直接“全场”信息,要用“我计算的所有网格”信息。

    你的第一个帖子说要用每个时间步计算的到的数据,这个数据的调用直接写进求解器。那么在各个区域上计算的进程有的快,有的慢。全场的信息(或者说某个时间步计算的到的结果)对于单个进算进程来说是未知的。对于单个进程:我只计算左上角的区域,然后下一步计算需要引用全区域变量。

    runParallel 应该是没有这样的调度的。进程有快慢,所以偶尔会互相等待。等待也是等待交界面的信息。而这个全场信息是等不来的,得合并各个进程的计算结果才有。

    所以有些求解器它就是不能并行,施主又何必强求:chigua:


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1