非结构化网格问题中的光环区域通信

计算科学 有限元 并行计算 有限体积 mpi 非结构化网格
2021-12-20 17:30:29

我目前正在使用 ParMETIS,它需要确定并行非结构化网格中局部元素的光环区域。假设网格很大,不能存储在单个处理器上。

我的方法是收集元素的全局列表及其在每个处理器中的处理器位置。然后识别不属于当前处理器的本地元素的邻居,然后进行通信。

执行冗余通信,因为一些非本地元素显然不是任何本地元素的邻居,因此不会在光环区域中,但需要它们的位置。

在非结构化网格计算中传达光晕信息的最有效程序是什么?(假设通信范式是 MPI 并且来自 ParMETIS 的调用可用于获取对偶图、全局邻接等)

2个回答

最好看看别人怎么做。

你需要所谓的幽灵节点和幽灵细胞。最好的方法是查看 PETSc 中如何实现幽灵向量;您可以在文档中找到它是如何工作的。

原则上,并行向量在每个处理器上保留一份未知数的本地副本,最后还有额外的幽灵数据,用于通信。

您必须启动您拥有哪些节点,哪些节点是共享的,哪些是重影的。通常,重叠区域中的节点由较低的处理器拥有,但您可以有更多的策略。

PETSc 管理代数(和网格参见 DMPLEX),如果您想了解如何在网格 sied 上进行管理,请参见 MOAB, http ://sigma.mcs.anl.gov/moab-library/ 查看 文档。

对此进行编程,如果您进行通信尝试一次完成所有通信,您希望使用多个通信事件,MoAB 对此有类 CrystalRouter,请参阅 http://ftp.mcs.anl.gov/pub/fathom/moab-docs /

我不确定这是否是您正在寻找的。

首先是找到当前处理器及其所有者处理器的光环单元。我们创建一个列表来记录它。然后我们使用 MPI_SEND 和 MPI_receive 进行通信。