h5

数値解析の結果を HDF5 で出し、ParaView で見る

Fortran・C・C++ 用の HDF5 ラッパーと、その出力を ParaView 用の XDMF に変換する ツールです。4 つとも同じファイル形式を共有しているので、どの言語で書いても 同じ後処理が使えます。

どれを使うか

ソルバーを書いている言語で選びます。可視化する場合はこれに h5xdmf が加わります。

Fortran
h5fortran

HDF5 の Fortran インターフェースのラッパー。

C
h5c

HDF5 の C API のラッパー。平坦バッファと明示的な shape で扱います。

C++
h5cpp

h5c の薄いラッパー。RAII、std::vector、例外で扱えます。

Python
h5xdmf

出力した HDF5 から XDMF を生成します。可視化するなら必ず使います。

言語をまたいでも同じファイルです。 Fortran で書いた結果を C から読む、C++ の出力を h5fortran 利用者と共有する、 といったことができます。配列の次元順序だけは 言語ごとに見え方が違うので、そこは必ず読んでください。

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 の中では揃えてください。 辞書順が時刻順になります。

次に読むもの