用 Xdmf 描述 5 维 hdf5 矩阵
Describing 5 dimensional hdf5 matrix with Xdmf
我在 hdf5 数据文件中有一个 5 维矩阵。我想使用 paraview 绘制这些数据。我想到的解决方案是通过 Xdmf 格式描述数据。
5维矩阵结构如下:
matrix[time][type][x][y][z]
'time' 索引指定了一个时间步长。 'type' select 是不同粒子类型的矩阵。 x,y,z 描述了网格的空间坐标。矩阵的值是我想要绘制的标量。
我的问题是:如何使用 xdmf 格式 select 给定时间步长的特定 3 维矩阵并键入绘图?理想情况下,时间步可以由 Xdmf 的 <time>
功能表示。
我尝试了 xdmf 的 'hyperslab' 功能,但这似乎没有将维数降低到我需要绘制网格的程度。
我也看过 'SubSet' 功能,但我不明白如何使用它,阅读 xdmf 上的官方文档。
在 Xdmf 邮件列表的帮助下,我找到了适合我的解决方案。
我的输入矩阵在 hdf5 文件中是 5-dim (1,2,12,6,6) "ana.h5" 并且我 select 时间步长 0 并输入 1。
<?xml version="1.0" ?>
<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []>
<Xdmf xmlns:xi="http://www.w3.org/2003/XInclude" Version="2.2">
<Domain>
<Topology name="topo" TopologyType="3DCoRectMesh" Dimensions="12 6 6"></Topology>
<Geometry name="geo" Type="ORIGIN_DXDYDZ">
<!-- ORigin -->
<DataItem Format="XML" Dimensions="3">
0.0 0.0 0.0
</DataItem>
<!-- DxDyDz -->
<DataItem Format="XML" Dimensions="3">
1 1 1
</DataItem>
</Geometry>
<Grid Name="TimeStep_0" GridType="Uniform">
<Topology Reference="/Xdmf/Domain/Topology[1]"/>
<Geometry Reference="/Xdmf/Domain/Geometry[1]"/>
<Time Value="64"/>
<Attribute Type="Scalar" Center="Cell" Name="Type1">
<!-- Result will be 3 dimensions -->
<DataItem ItemType="HyperSlab" Dimensions="12 6 6 ">
<!-- The source is 5 dimensions -->
<!-- Origin=0,1,0,0,0 Stride=1,1,1,1,1 Count=1,1,12,6,6 -->
<DataItem Dimensions="3 5" Format="XML">
0 1 0 0 0
1 1 1 1 1
1 1 12 6 6
</DataItem>
<DataItem Format="HDF" NumberType="UInt" Precision="2" Dimensions="1 2 12 6 6 ">
ana.h5:/density_field
</DataItem>
</DataItem>
</Attribute>
</Grid>
</Domain>
</Xdmf>
生成的矩阵是 3 维 (12,6,6) 并且可以用 paraview 绘制。
我在 hdf5 数据文件中有一个 5 维矩阵。我想使用 paraview 绘制这些数据。我想到的解决方案是通过 Xdmf 格式描述数据。
5维矩阵结构如下:
matrix[time][type][x][y][z]
'time' 索引指定了一个时间步长。 'type' select 是不同粒子类型的矩阵。 x,y,z 描述了网格的空间坐标。矩阵的值是我想要绘制的标量。
我的问题是:如何使用 xdmf 格式 select 给定时间步长的特定 3 维矩阵并键入绘图?理想情况下,时间步可以由 Xdmf 的 <time>
功能表示。
我尝试了 xdmf 的 'hyperslab' 功能,但这似乎没有将维数降低到我需要绘制网格的程度。
我也看过 'SubSet' 功能,但我不明白如何使用它,阅读 xdmf 上的官方文档。
在 Xdmf 邮件列表的帮助下,我找到了适合我的解决方案。
我的输入矩阵在 hdf5 文件中是 5-dim (1,2,12,6,6) "ana.h5" 并且我 select 时间步长 0 并输入 1。
<?xml version="1.0" ?>
<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []>
<Xdmf xmlns:xi="http://www.w3.org/2003/XInclude" Version="2.2">
<Domain>
<Topology name="topo" TopologyType="3DCoRectMesh" Dimensions="12 6 6"></Topology>
<Geometry name="geo" Type="ORIGIN_DXDYDZ">
<!-- ORigin -->
<DataItem Format="XML" Dimensions="3">
0.0 0.0 0.0
</DataItem>
<!-- DxDyDz -->
<DataItem Format="XML" Dimensions="3">
1 1 1
</DataItem>
</Geometry>
<Grid Name="TimeStep_0" GridType="Uniform">
<Topology Reference="/Xdmf/Domain/Topology[1]"/>
<Geometry Reference="/Xdmf/Domain/Geometry[1]"/>
<Time Value="64"/>
<Attribute Type="Scalar" Center="Cell" Name="Type1">
<!-- Result will be 3 dimensions -->
<DataItem ItemType="HyperSlab" Dimensions="12 6 6 ">
<!-- The source is 5 dimensions -->
<!-- Origin=0,1,0,0,0 Stride=1,1,1,1,1 Count=1,1,12,6,6 -->
<DataItem Dimensions="3 5" Format="XML">
0 1 0 0 0
1 1 1 1 1
1 1 12 6 6
</DataItem>
<DataItem Format="HDF" NumberType="UInt" Precision="2" Dimensions="1 2 12 6 6 ">
ana.h5:/density_field
</DataItem>
</DataItem>
</Attribute>
</Grid>
</Domain>
</Xdmf>
生成的矩阵是 3 维 (12,6,6) 并且可以用 paraview 绘制。