Read Xdmf

From XdmfWeb
Revision as of 10:35, 4 May 2007 by Jerry (talk | contribs) (New page: == Reading XDMF Data == Image:TwoHex.jpg The following Xdmf XML file is a simple example of a Uniform Grid that contains two Hexahedron that share a face. There are values centered a...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Reading XDMF Data

TwoHex.jpg

The following Xdmf XML file is a simple example of a Uniform Grid that contains two Hexahedron that share a face. There are values centered at the nodes and at the cell centers. The values for geometry, connectivity, and scalars are all stored directly in the XML file.

<?xml version="1.0" ?>
<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []>


<Xdmf>
   <Domain>
       <Grid Name="TestGrid">
           <Topology Type="Hexahedron" NumberOfElements="2" >
               <DataItem Format="XML" DataType="Float"
                   Dimensions="2 8">
                   0 1 7 6   3 4 10 9
                   1 2 8 7   4 5 11 10
               </DataItem>
           </Topology>
           <Geometry Type="XYZ">
                   <DataItem Format="XML" DataType="Float" Precision="8"
                           Dimensions="4 3 3">
                     0.0   0.0   1.0
                     1.0   0.0   1.0
                     3.0   0.0   2.0

                     0.0   1.0   1.0
                     1.0   1.0   1.0
                     3.0   2.0   2.0

                     0.0   0.0   -1.0
                     1.0   0.0   -1.0
                     3.0   0.0   -2.0

                     0.0   1.0   -1.0
                     1.0   1.0   -1.0
                     3.0   2.0   -2.0
                   </DataItem>
           </Geometry>
           <Attribute Name="NodeValues" Center="Node">
               <DataItem Format="XML" DataType="Float" Precision="8"
                       Dimensions="4 3" >
                       100 200 300
                       300 400 500
                       300 400 500
                       500 600 700
               </DataItem>
           </Attribute>
           <Attribute Name="CellValues" Center="Cell">
               <DataItem Format="XML" DataType="Float" Precision="8"
                       Dimensions="2" >
                       100 200
               </DataItem>
           </Attribute>
       </Grid>
   </Domain>
</Xdmf>

The XML is stored in the file "MyGrid.xmf". The following Python program demonstrated parsing the XML and retrieving the data values.

from Xdmf import *
dom = XdmfDOM()
dom.Parse('MyGrid.xmf')
# We now have a tree. Find the one and only Grid element
ge = dom.FindElementByPath('/Xdmf/Domain/Grid')
grid = XdmfGrid()
grid.SetDOM(dom) 
grid.SetElement(ge)
# Read Light Data
grid.UpdateInformation()
# Read Heavy Data which includes Topology and Geometry
grid.Update()

top = grid.GetTopology()
conn = top.GetConnectivity()
print 'Values = ', conn.GetValues()

geo = grid.GetGeometry()
points = geo.GetPoints()
print 'Geo Type = ', geo.GetGeometryTypeAsString(), ' # Points = ', geo.GetNumberOfPoints()
print 'Points = ', points.GetValues()
# for each Attribute, print Light Data and Values
for i in range(grid.GetNumberOfAttributes()) :
   attr = grid.GetAttribute(i)
   print 'Attribute ', i, ' Name = ', attr.Get('Name')
   # Attribute HeavyData is not Updated by default
   # there could potentially be many causing huge IO
   attr.Update()
   vals = attr.GetValues()
   print 'Values ', vals.GetValues()