h5

HDF5 から ParaView へ

ソルバーが書き終えた各時刻の HDF5 を h5xdmf で索引化し、生成されたメッシュ別の XDMF を ParaView で開きます。

出典:h5xdmf/README.md、h5xdmf/docs/USAGE.md、h5fortran/docs/USAGE-visualization.md。

1. ソルバーの出力を確認する

可視化ライターで、座標・接続情報・物理量・時刻を書きます。単に配列を書いただけの任意の HDF5 には、可視化の対応情報がありません。3 言語の可視化ライターは共通の scheme_version=1 を出力します。

1 時刻 1 ファイルとし、同じ計算では番号のゼロ埋め幅を揃えます。glob は辞書順に展開されます。読み込むのは書き込みが完了したファイルだけにしてください。

result/
├── seq000000.h5
├── seq000001.h5
└── seq000002.h5

並列出力も全ランクを連結した一つの論理メッシュになります。connectivity はランク内の 0 始まりの節点番号を渡し、ライターがオフセットを加えます。出力するセルは owned cell のみとし、ghost cell の二重出力を避けます。詳細は 可視化ライターを参照してください。

2. 読み取り専用で検査する

h5xdmf の導入後、出力ディレクトリの親で次を実行します。glob を引用符で囲み、h5xdmf に展開させます。

h5xdmf --check "result/seq*.h5"

--check は一致した全ファイルの scheme version、座標・接続情報、物理量の成分数・要素数、存在する __partition__ の境界を検査します。問題はファイル名と HDF5 オブジェクトのパスごとに表示し、問題があれば終了ステータス 1 を返します。HDF5 を変更せず、索引・XDMF・出力ディレクトリも作りません。

3. 索引と XDMF を生成する

h5xdmf "result/seq*.h5" --metadata result/metadata.h5 --outdir result

metadata.h5 は h5xdmf が作る再生成可能な索引です。元の seq*.h5 がデータの正本で、ソルバーから索引を直接更新しません。

メッシュのグループ名ごとに <mesh_name>.xdmf が生成されます。Fortran の可視化例なら fluid.xdmf と soil_particles.xdmf、このサイトの C・C++ 例なら fluid.xdmf と particles.xdmf です。

XDMF は元の HDF5 dataset を相対パスで参照します。ParaView を使うマシンへ移すときは、XDMF と snapshot HDF5 を相対位置を保ったまままとめてコピーします。metadata.h5 を開く手順ではありません。

4. ParaView で開く

mesh ごとに <mesh_name>.xdmf が生成されるので、見たい mesh のものを開きます。時系列は 1 つの XDMF にまとまっているため、時刻の切り替えはそのまま使えます。field は書き出したときの名前で現れ、3 成分は Vector、6 成分は対称テンソルとして扱われます。

  1. ParaView の File → Open で result/fluid.xdmf を選び、Apply を押します。
  2. 粒子も表示するなら soil_particles.xdmf または particles.xdmf を追加して Apply を押します。
  3. 流体を Pressure で色付けし、必要なら Slice/Clip で内部を見ます。
  4. 速度は Glyph の方向に Velocity を選びます。Fortran 例では大きさに Speed も使えます。
  5. 粒子は Point Gaussian などで表示します。Fortran 例なら EquivalentStress、C・C++ 例なら Radius で色付けできます。
  6. 時刻を切り替えるかアニメーションを再生します。

上の field 名は例のものです。自分の出力では、書き出した名前がそのまま現れます。表示例の出典:h5fortran/example/serial-viz/README.md。ランク境界の重複節点を結合したい場合は Clean to Grid を使えます。

時系列を更新する

新しい時刻を追加しただけなら、生成コマンドをもう一度実行します。未登録ファイルだけが索引へ追加されます。既存の名前の HDF5 を上書きした場合は全再構築が必要です。

h5xdmf "result/seq*.h5" --metadata result/metadata.h5 --outdir result --rebuild

snapshot を再走査せず、既存の索引から XDMF だけを再生成する場合は入力 glob を指定しません。

h5xdmf --generate-only --metadata result/metadata.h5 --outdir result

削除済みの snapshot を索引から除いて更新する場合:

h5xdmf "result/seq*.h5" --metadata result/metadata.h5 --outdir result --prune

同じメッシュ名では topology、要素当たり節点数、物理量の構成・順序・型、節点/セルへの対応、Scalar/Vector/Tensor 種別を固定します。時刻や節点・粒子数は変えられます。要素数 0 の時刻は空の Spatial Collection になり、空 dataset を XDMF から参照しません。

h5xdmf の詳細、snapshot と索引の役割、共通ファイル形式