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 です。
metadata.h5 を開く手順ではありません。4. ParaView で開く
mesh ごとに <mesh_name>.xdmf が生成されるので、見たい mesh のものを開きます。時系列は 1 つの XDMF にまとまっているため、時刻の切り替えはそのまま使えます。field は書き出したときの名前で現れ、3 成分は Vector、6 成分は対称テンソルとして扱われます。
- ParaView の
File → Openでresult/fluid.xdmfを選び、Applyを押します。 - 粒子も表示するなら
soil_particles.xdmfまたはparticles.xdmfを追加してApplyを押します。 - 流体を
Pressureで色付けし、必要ならSlice/Clipで内部を見ます。 - 速度は
Glyphの方向にVelocityを選びます。Fortran 例では大きさにSpeedも使えます。 - 粒子は
Point Gaussianなどで表示します。Fortran 例ならEquivalentStress、C・C++ 例ならRadiusで色付けできます。 - 時刻を切り替えるかアニメーションを再生します。
上の 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 から参照しません。