Read Xdmf: Difference between revisions

From XdmfWeb
Jump to navigationJump to search
mNo edit summary
No edit summary
Line 62: Line 62:
The XML is stored in the file "MyGrid.xmf". The following Python program demonstrated parsing the XML and
The XML is stored in the file "MyGrid.xmf". The following Python program demonstrated parsing the XML and
retrieving the data values.
retrieving the data values.
<pre style="color: red">Note this code snippet is from version 2 or 1 and needs updating for xdmf3.</pre>


  from Xdmf import *
  from Xdmf import *
  dom = XdmfDOM()
  reader = XdmfReader.New()
  dom.Parse('MyGrid.xmf')
  dom = XdmfReader.read('MyGrid.xmf')
  # We now have a tree. Find the one and only Grid element
  # We now have a tree. Find the one and only Grid element
ge = dom.FindElementByPath('/Xdmf/Domain/Grid')
  grid = dom.getUnstruturedGrid(0)
  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()
  top = grid.GetTopology()
  conn = top.GetConnectivity()
  print 'Values = ', top.getValuesString()
  print 'Values = ', conn.GetValues()
  # Release values from data when done
top.release()
   
   
  geo = grid.GetGeometry()
  geo = grid.GetGeometry()
points = geo.GetPoints()
  print 'Geo Type = ', geo.getType().getName(), ' # Points = ', geo.getNumberPoints()
  print 'Geo Type = ', geo.GetGeometryTypeAsString(), ' # Points = ', geo.GetNumberOfPoints()
  print 'Points = ', geo.getValuesString()
  print 'Points = ', points.GetValues()
geo.release()
  # for each Attribute, print Light Data and Values
  # for each Attribute, print Light Data and Values
  for i in range(grid.GetNumberOfAttributes()) :
  for i in range(grid.getNumberAttributes()) :
     attr = grid.GetAttribute(i)
     attr = grid.getAttribute(i)
     print 'Attribute ', i, ' Name = ', attr.Get('Name')
     print 'Attribute ', i, ' Name = ', attr.getName()
     # Attribute HeavyData is not Updated by default
     # Attribute HeavyData is not Updated by default
     # there could potentially be many causing huge IO
     # there could potentially be many causing huge IO
     attr.Update()
     attr.read()
     vals = attr.GetValues()
     print 'Values ', attr.getValuesString()
     print 'Values ', vals.GetValues()
     attr.release()

Revision as of 12:43, 10 November 2014

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 *
reader = XdmfReader.New()
dom = XdmfReader.read('MyGrid.xmf')
# We now have a tree. Find the one and only Grid element
grid = dom.getUnstruturedGrid(0)

top = grid.GetTopology()
print 'Values = ', top.getValuesString()
# Release values from data when done
top.release()

geo = grid.GetGeometry()
print 'Geo Type = ', geo.getType().getName(), ' # Points = ', geo.getNumberPoints()
print 'Points = ', geo.getValuesString()
geo.release()
# for each Attribute, print Light Data and Values
for i in range(grid.getNumberAttributes()) :
   attr = grid.getAttribute(i)
   print 'Attribute ', i, ' Name = ', attr.getName()
   # Attribute HeavyData is not Updated by default
   # there could potentially be many causing huge IO
   attr.read()
   print 'Values ', attr.getValuesString()
   attr.release()