h5

出典:h5fortran/docs/POSTPROCESS.md

ポストプロセス

方針

Fortranソルバーが出力する各stepのsnapshot HDF5を正本とし、metadata.h5 は Pythonポストプロセスが構築する再生成可能な索引とする。

Fortran solver
    ├── result/seq000000.h5
    ├── result/seq000001.h5
    └── result/seq000002.h5
              │ metadata-only走査
              ▼
         result/metadata.h5
              │
              ├── result/fluid.xdmf
              └── result/soil_particles.xdmf

ソルバーは metadata.h5 を更新しない。

ファイルの責務

seqNNNNNN.h5

Fortranソルバーが1 output stepにつき1ファイル出力する。field本体、geometry、 connectivityと、そのファイルを解釈するためのmetadataを保持する。

保存レイアウトは共有仕様の可視化レイアウトを参照する。

ファイル名の数字部分の桁数は固定しない。ただしglobを辞書順に並べるため、同じrun内 ではゼロ埋め桁数を統一する。標準例では6桁の seqNNNNNN.h5 を使用する。

metadata.h5

Pythonのindexerがsnapshot HDF5のshape、dtype、属性、pathだけを読み、field本体を ロードせずに作成する。削除または破損してもsnapshot HDF5から再構築できる。

初回は指定されたsnapshotを走査する。再実行時は未登録のsnapshotだけを読み、 索引へ追記する。同じ入力での再実行はno-opである。

時系列を通して固定するもの:

stepごとに変化できるもの:

XDMF

XDMFはfield値を複製せず、seqNNNNNN.h5 内のdatasetをHeavy Dataとして参照する。 現在はmesh group名ごとに1つの時系列XDMFを生成する。

時系列中にnode数またはelement数が0のstepがあるmeshは、各stepをSpatial Collectionで包む。非空stepにはUniform Gridを1つ置き、空stepは子Gridを持たない 空のSpatial Collectionとする。これにより、粒子が消滅する時系列を正確に表現しつつ、 ParaViewがゼロサイズHDF5 DataItemを時間更新時に再読込する経路を避ける。 HDF5 snapshotとmetadata.h5の粒子数は変更しない。

標準的な物理区分は次の2つである。

fluid.xdmf
soil_particles.xdmf

流体meshと土粒子をParaViewで個別に開くことができ、両方を読み込めば重ねて表示 できる。

meshが存在しないstepも扱える。scheme v1は同じmesh名の複数空間ブロックやAMRを扱わない。 粒子数は索引の /meshes/<mesh_name>/timeseries/num_elements で確認できる。

実行

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

snapshotのschemaだけを検査する場合は次を実行する。

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

完成形のexample

5 stepの流体・土粒子出力は逐次例と 並列例を参照する。 各例の result/ にsnapshot、metadata.h5、mesh別XDMFを生成する。 並列例はクラスタのジョブスクリプトから実行する。

運用上の注意