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