[Paraview] XDFM to load staggered vector data

Jens Kleimann jk at tp4.rub.de
Tue Jan 11 10:05:11 EST 2011


Hi all,

I have a 3-D curvilinear HDF5 dataset which contains both scalar and vector data, and I would like to load it into Paraview. The scalar data is cell-centered, while the vector components are centered on the cells' faces, e.g. for vector (Bx,By,Bz),

Bx is at r_(i-1/2, j, k) with {i,j,k} in [0, Nx] x [0, Ny-1] x [0, Nz-1]
By is at r_(i, j-1/2, k) with {i,j,k} in [0, Nx-1] x [0, Ny] x [0, Nz-1]
Bz is at r_(i, j, k-1/2) with {i,j,k} in [0, Nx-1] x [0, Ny-1] x [0, Nz] ,

where r_(i,j,k) is the center of the cell. From the *.h5 file, all three components look like scalars, except that their dimensionality in the respective directions is increased by one.
For scalar data, I am using this XDMF sample file, which works like a charm:

----------------------------------------------------------------
<?xml version="1.0" ?>
<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []>
<Xdmf Version="2.0">
 <Domain>
   <Grid Name="CronosMesh" GridType="Uniform">
     <Topology TopologyType="3DSMesh" NumberOfElements="12 11 10"/>
     <Geometry GeometryType="X_Y_Z">
       <DataItem Dimensions="12 11 10" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_grid.h5:/X
       </DataItem>
       <DataItem Dimensions="12 11 10" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_grid.h5:/Y
       </DataItem>
       <DataItem Dimensions="12 11 10" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_grid.h5:/Z
       </DataItem>
     </Geometry>
     <Attribute Name="Density" AttributeType="Scalar" Center="Cell">
       <DataItem Dimensions="11 10 9" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_float/gtest_flt_step0.h5:/Data/rho
       </DataItem>
     </Attribute>
   </Grid>
 </Domain>
</Xdmf>
----------------------------------------------------------------

Now my question is: How exactly do I set up the corresponding Attribute tag group for the B vector? I have seen solutions which use the JOIN function, but I understand this needs arrays of the same size. So I was thinking of something like
----------------------------------------------------------------
     <Attribute Name="B_field" AttributeType="Vector" Center="Face">
       <DataItem Dimensions="12 10 9" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_float/gtest_flt_step0.h5:/Data/Bx
       </DataItem>
       <DataItem Dimensions="11 11 9" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_float/gtest_flt_step0.h5:/Data/By
       </DataItem>
       <DataItem Dimensions="11 10 10" NumberType="Float" Precision="4" Format="HDF">
        ../gtest_float/gtest_flt_step0.h5:/Data/Bz
       </DataItem>
     </Attribute>
----------------------------------------------------------------
but then B_field won't even show up in Paraview's object inspector. I also noticed that the same tends to occur for scalar data as soon as Center is set to either "Edge" or "Face". Since the wiki at xdmf.org doesn't say anything about these two options beyond that they exist, I was wondering how exactly these should be used.

Any help would be much appreciated.
Best wishes, Jens.

PS: Is there a dedicated XDMF mailing list which would be prefered for this topic?


More information about the ParaView mailing list