数値解析の結果を HDF5 で出し、ParaView で見る
Fortran・C・C++ 用の HDF5 ラッパーと、その出力を ParaView 用の XDMF に変換する ツールです。4 つとも同じファイル形式を共有しているので、どの言語で書いても 同じ後処理が使えます。
どれを使うか
ソルバーを書いている言語で選びます。可視化する場合はこれに h5xdmf が加わります。
HDF5 の Fortran インターフェースのラッパー。
HDF5 の C API のラッパー。平坦バッファと明示的な shape で扱います。
h5c の薄いラッパー。RAII、std::vector、例外で扱えます。
出力した HDF5 から XDMF を生成します。可視化するなら必ず使います。
HDF5 とは
数値データを 1 つのファイルに階層構造で格納する形式です。ディレクトリのように group を作り、その中に配列を dataset として置きます。テキスト出力と違って 精度が落ちず、大きな配列でも速く、並列に書けます。
HDF5 自体は「配列が入った箱」でしかありません。どの配列が座標で、 どれが物理量で、どういうメッシュなのかを HDF5 は知りません。 可視化ソフトに渡すには、その対応関係を別途伝える必要があります。
なぜ XDMF が要るのか
XDMF は「この HDF5 のこの dataset が節点座標で、これが接続情報で、これが圧力」 という対応を書いた XML です。ParaView はこの XML を開き、実データは HDF5 から 読みます。データは複製されません。
このプロジェクトでは、ライブラリ側は HDF5 だけを出力し、XDMF の生成は h5xdmf に任せます。Fortran や C から XML を組み立てずに済みます。
1 ステップ 1 ファイル
時系列は 1 つの時刻を 1 つの HDF5 ファイルに書きます
(seq000000.h5, seq000001.h5, …)。
| 利点 | 内容 |
|---|---|
| 途中で落ちても残る | 計算が異常終了しても、それまでのステップは完全なファイルとして読めます。 |
| 途中から見られる | 計算の実行中に、書き終わったステップだけを可視化できます。 |
| 不要なステップを消せる | ファイルを削除するだけです。 |
h5xdmf はこれらをまとめて 1 つの時系列として扱う XDMF を生成します。 ファイル名のゼロ埋め桁数は自由ですが、同じ run の中では揃えてください。 辞書順が時刻順になります。