我目前正在开发一种域分解方法来解决散射问题。基本上,我正在迭代地解决Helmholtz BVP系统。我在三角形或四面体网格上使用有限元方法离散化方程。我正在为我的博士学位论文开发代码。我知道一些现有的有限元库,例如Deal.ii或DUNE,尽管我认为它们很棒,具有鼓舞人心的设计和API,但出于学习目的,我想从头开始开发自己的小应用程序。
我现在正在运行我的串行版本,现在我想对其进行并行化。毕竟,至少在原则上,制定易于并行化的算法是领域分解框架的优势之一。但是实际上,有许多细节必须考虑。网格管理就是其中之一。如果应用程序在达到高分辨率的同时可以很好地扩展到许多CPU,则在每个CPU上复制整个网格的效率很低。
我想问那些在高性能计算环境中从事类似应用程序工作的开发人员如何处理此问题。
有用于分布式网格管理的p4est库。我不需要AMR,所以这可能是一个过大的选择,因为我只对使用统一网格感兴趣,并且不确定是否可以优化三角形网格。我也可以简单地创建一个统一的网格,然后将其输入到网格划分器之一中,并对输出进行一些后期处理。
最简单的方法似乎是为每个分区创建一个单独的文件,其中包含仅与该特定分区相关的网格信息。该文件将由单个CPU读取,该CPU负责在网格的该部分上组装离散系统。当然,某些全局分区连接性/邻居信息也需要存储在所有CPU读取的文件中以进行进程间通信。
还有哪些其他方法?如果你们中的一些人可以分享,那么与该问题相关的行业或政府研究机构中最常用的方法有哪些?对于编程并行有限元求解器,我是一个新手,我想了解一下我是否在正确地考虑这个问题以及其他人如何解决这个问题。任何有关相关研究文章的建议或指针将不胜感激!
提前致谢!