OpenFOAM課題の入口
OpenFOAMとは
OpenFOAMは、CFD、つまり数値流体力学のためのオープンソースソフトウェア群です。2026年大会のHPC側では、メモ上、OpenFOAM HPC Committee repositoryのケースが使われる可能性があります。
現時点では、どのケースが大会本番で使われるかは未確定です。
OpenFOAM HPC Committee repository
OpenFOAM HPC Benchmark SuiteのREADMEでは、このリポジトリの目的が次のように説明されています。
- HPCアーキテクチャ上でデータセットをセットアップして実行するためのガイドや初期スクリプトを提供する。
- ハードウェア、ソフトウェア環境、設定を比較するための共通基準を提供する。
- 性能を測るためのKPIを定義する。
README上では、Grand Challenges、Industrial Applications、Microbenchmarks、Other Benchmarksに分かれ、DrivAer、cavity、motorbike、combustion、wind farmなど複数のケースが整理されています。
OpenFOAMの並列実行の基本
OpenFOAM v13 User Guide: Running applications in parallelでは、OpenFOAMの並列実行はdomain decomposition、つまり計算領域を複数の部分に分割して各プロセスに割り当てる方式だと説明されています。
基本の流れは次の通りです。
decomposeParDictで分割数と分割方法を決める。decomposeParでメッシュと初期場を分割する。mpirunなどでソルバを-parallel付きで実行する。- 必要なら
reconstructParで結果を再構成する。
よく出る分割方法は次の通りです。
| 方法 | 意味 |
|---|---|
simple | x/y/z方向に単純分割する |
hierarchical | 分割順序を指定できる幾何分割 |
scotch | プロセッサ境界を減らすことを狙うグラフ分割 |
ptscotch | 並列実行向けのSCOTCH系分割 |
性能に効きそうな場所
初心者が最初に見るべき観点です。
| 観点 | 見るもの | なぜ重要か |
|---|---|---|
| 領域分割 | decomposeParDict、各rankのセル数、境界面 | MPI通信量とロードバランスに直結する |
| 線形ソルバ | fvSolution、反復回数、残差 | OpenFOAM実行時間の大部分を占めやすい |
| I/O | writeInterval、fileHandler、ログ出力 | 並列ファイル数が多いとファイルシステムが詰まる |
| コンパイル | MPI、最適化フラグ、OpenFOAM版 | CPU命令、通信ライブラリ、数学ライブラリで差が出る |
| ノード配置 | rank mapping、core binding、NUMA | CPUメモリ帯域とネットワーク利用に影響する |
最初の実験テンプレート
本番ケースが出たら、まず次を固定してベースラインを作ります。
| 項目 | 記録内容 |
|---|---|
| Git commit / OpenFOAM version | 再現性のため |
| ケース名、メッシュサイズ | 問題規模の確認 |
| ノード数、rank数、threads | 並列条件 |
decomposeParDict | 分割条件 |
| 実行コマンド | PBS/Slurmスクリプト含む |
| wall time | 大会指標の中心 |
| 反復回数、残差 | 速いが解が悪い変更を見抜く |
| I/O時間、ログサイズ | ボトルネック確認 |