現在、散乱の問題を解決するためのドメイン分解法を開発しています。基本的に、ヘルムホルツBVPのシステムを反復的に解いています。三角形または四面体メッシュ上の有限要素法を使用して方程式を離散化します。私は博士論文に向けてコードを開発しています。deal.iiやDUNEなど、既存の有限要素ライブラリのいくつかを知っています。インスピレーションに満ちたデザインとAPIを備えたすばらしいものだと思いますが、学習目的で、自分の小さなアプリケーションをゼロから開発したいと考えました。
私はシリアルバージョンを実行している時点で、それらを並列化したいと思っています。結局のところ、少なくとも原則として並列化が容易なアルゴリズムを策定することは、ドメイン分解フレームワークの強みの1つです。しかし実際には、考慮しなければならない多くの詳細があります。メッシュ管理もその1つです。アプリケーションが多くのCPUに適切にスケーリングしながら高解像度を実現する場合、すべてのCPUでのメッシュ全体の複製は非効率的です。
高性能コンピューティング環境で同様のアプリケーションに取り組んでいる開発者に、この問題への対処方法を尋ねたいと思いました。
分散メッシュ管理用のp4estライブラリがあります。私はAMRを必要としないので、均一なメッシュの使用にのみ関心があり、三角形メッシュを洗練できるかどうかはわかりません。また、単純に均一なメッシュを作成し、それをメッシュパーティショナーの1つに供給して、出力の後処理を行うこともできます。
最も単純なアプローチは、特定のパーティションのみに関連するメッシュ情報を含むパーティションごとに個別のファイルを作成するようです。このファイルは、メッシュのその部分で個別のシステムを組み立てる単一のCPUによって読み取られます。もちろん、プロセス間通信のために、一部のグローバルパーティションの接続性/近隣情報も、すべてのCPUが読み取るファイルに保存する必要があります。
他にどのようなアプローチがありますか?皆さんが共有できる場合、業界で一般的に使用されている方法論や、この問題の処理に関連する政府研究機関は何ですか?並列有限要素ソルバーをプログラミングするのは初めてで、この問題について正しく考えているかどうか、他の人がどのように近づいているのかを知りたいと思いました。関連する研究記事へのアドバイスやポインタは大歓迎です!
前もって感謝します!