h5

出典:h5xdmf/docs/USAGE.md

h5xdmf の使い方

インストールは README を参照してください。 h5fortran・h5c・h5cppの可視化writerが出力したsnapshot HDF5をそのまま入力できます。

入力と出力

1 stepにつき1つのsnapshot HDF5を用意します。snapshotがデータの正本であり、 metadata.h5 はh5xdmfが作る再生成可能な索引です。producerから直接更新しません。

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

globは辞書順に展開されるため、同じrunの番号付きファイルはゼロ埋め幅を統一します。 初回はsnapshotのshape・dtype・属性を読み、再実行時は未登録ファイルだけを追加します。 field本体は読み込みません。同じ名前のsnapshotを上書きした場合は --rebuild が必要です。

mesh group名ごとに <mesh_name>.xdmf が生成されます。例えば fluid と soil_particles は fluid.xdmf と soil_particles.xdmf になり、ParaViewで 個別に開くか、両方を重ねて表示できます。XDMFはsnapshot内のdatasetを相対パスで 参照するため、可視化時にもsnapshotを保持してください。

更新と検査

--check はscheme version、geometry、fieldの成分数とentity数、存在する __partition__ の境界を検査します。問題はファイルとHDF5オブジェクトパスごとに 全件表示し、1件でもあれば終了status 1を返します。旧形式の h5xdmf validate も利用できます。 書き込みが完了したsnapshotを入力してください。

時系列の制約

同じmesh名ではtopology、nodes per element、field構成・順序、dtype、Node/Cell centering、Scalar/Vector/Tensor種別を固定します。time、node数、element数・粒子数は stepごとに変えられます。meshが存在しないstepや、後から現れるmeshも扱えます。 MPI rankのデータはproducerが連結済みの一つの論理meshとして扱います。 同一mesh名の複数空間ブロックとAMRはscheme v1の対象外です。

node数またはelement数が0のstepを含むmeshは、全stepをSpatial Collectionで包みます。 非空stepはUniform Gridを1つ、空stepは子Gridを持たず、空datasetをXDMFから参照しません。 HDF5のentity数は変更しません。

独自producerの入力形式

共有契約の可視化レイアウトを参照してください。 製品のSemVerとHDF5 root属性の scheme_version は独立しています。 meshはroot直下で geometry を持つgroupです。connectivityのない点群はPolyvertexとして扱います。 fieldの attribute_type 属性を優先します。省略時は1D配列をScalar、 2D配列を第2次元の成分数(1 / 3 / 6 / 9)からScalar / Vector / Tensor6 / Tensorと判定します。 Tensor6は XX, YY, ZZ, XY, YZ, XZ の順で渡してください。 h5xdmfは成分を並べ替えません。テンソル成分の順序を参照してください。

Python API

from h5xdmf import sample
from h5xdmf.hdf5 import read_series_glob

sample.write_series("phdf5", nsteps=5)
series = read_series_glob("phdf5/seq*.h5", load_data=False)
for snap in series:
    print(snap.name, snap.time, [b.name for b in snap.mesh_blocks])

load_data=False は配列本体をロードせず、shape・dtype・HDF5パスを取得します。