欧拉-拉格朗日方法,用不同的线程来进行流场计算和颗粒跟踪
-
现在E-L方法中,在多线程计算的情况下,同一个线程需要计算连续相和离散相,但是在颗粒分布极度不均匀的时候就会产生每个线程所需要的计算时间完全不同的情况。既然连续相和离散相也是依次计算,那么有没有一种办法把两个东西分开呢?打个比方说,某个求解器,计算区域分为4块,4个线程来计算,然后用16个线程进行颗粒跟踪,每个线程分配的颗粒数量大致相当,两边再耦合。
如果有这种求解器的话,求指点一下,如果不能的话,求讨论一下为啥不能 -
@hurricane007 在 欧拉-拉格朗日方法,用不同的线程来进行流场计算和颗粒跟踪 中说:
如果有这种求解器的话,求指点一下,如果不能的话,求讨论一下为啥不能
线程 != processor 进程
OpenFOAM only applies the MPI library, not OpenMP. Another problem, the particle/cloud classes require the local velocity, temperature, turbulence, and pressure field to calculate the particle velocity or forces. You need to solve that, how particle tracking slaves access the those information from CFD slaves. Furthermore, does the particle field affect the fluid field? Then, ... It is complex.
Sorry, I don't have Chinese typing now. -
@刘雄国 哈哈哈好没事,反正看得懂的。嗯应该是进程。
MPI或者OpenMP并不影响这个问题,反正都是两边交流信息,所以其实影响这个问题的是第二个。如果离散相分数很低,考虑单向耦合,或者二向耦合(连续相->离散相,离散相->离散相),那么可以把离散相和连续相分开,因为只需要把所有的连续相的流动汇总,并加给离散相就好了。
如果是四向耦合,是不是大概这样:- 如果在每个时间步骤,用一个进程把所有的流场信息都集中起来供其他颗粒跟踪的进程去访问,并且还需要把所有的离散相信息汇总给连续相,那么通信量太大了。
- 即使把每个进程跟踪的颗粒都加上label,只定点访问某些进程的信息,似乎通信量也还挺大问题。
- 如果把流场的作为主进程,跟踪颗粒的作为slave进程,如果这个master/slave比是定的,那么也是之前的那个效率问题。