File: CTestXdmfExodusIO.c

package info (click to toggle)
xdmf 3.0%2Bgit20160803-3
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 35,388 kB
  • ctags: 36,627
  • sloc: ansic: 265,382; cpp: 162,889; python: 10,976; f90: 1,378; yacc: 687; fortran: 464; xml: 200; java: 187; lex: 125; makefile: 82; sh: 28
file content (126 lines) | stat: -rw-r--r-- 6,481 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "XdmfDomain.hpp"
#include "XdmfExodusReader.hpp"
#include "XdmfExodusWriter.hpp"
#include "XdmfHDF5Writer.hpp"
#include "XdmfWriter.hpp"

#include "string.h"

int main()
{
  int status = 0;

  XDMFEXODUSWRITER * exodusWriter = XdmfExodusWriterNew();
  XDMFUNSTRUCTUREDGRID * hexahedron = XdmfUnstructuredGridNew();
  XdmfUnstructuredGridSetName(hexahedron, "Hexahedron");

  // Set Geometry
  double points[36] = {0.1, 0.1, 1.1, 1.1, 0.1, 1.1, 3.1, 0.1, 2.1, 0.1, 1.1,
                     1.1, 1.1, 1.1, 1.1, 3.1, 2.1, 2.1, 0.1, 0.1, -1.1, 1.1,
                     0.1, -1.1, 3.1, 0.1, -2.1, 0.1, 1.1, -1.1, 1.1, 1.1,
                     -1.1, 3.1, 2.1, -2.1};
  XDMFGEOMTERY * hexGeometry = XdmfUnstructuredGridGetGeometry(hexahedron);
  XdmfGeometrySetType(hexGeometry, XDMF_GEOMETRY_TYPE_XYZ);
  XdmfGeometryInsertDataFromPointer(hexGeometry, &points[0], XDMF_ARRAY_TYPE_FLOAT64, 0, 36, 1, 1 &status);

  // Set Topology
  int connectivity[16] = {0, 1, 7, 6, 3, 4, 10, 9, 1, 2, 8, 7, 4, 5, 11, 10};
  XDMFTOPOLOGY * hexTopology =  XdmfUnstructuredGridGetTopology(hexahedron);
  XdmfTopologySetType(hexTopology, XDMF_TOPOLOGY_TYPE_HEXAHEDRON);
  XdmfTopologyInsertDataFromPointer(hexTopology, &connectivity[0], XDMF_ARRAY_TYPE_INT32, 0, 16, 1, 1 &status);

  // Add Node Attribute
  XDMFATTRIBUTE * nodalAttribute = XdmfAttributeNew();
  int nodeValues[12] = {100, 200, 300, 300, 400, 500, 300, 400, 500, 500, 600,
                      700};
  XdmfAttributeSetName(nodalAttribute, "Nodal Attribute");
  XdmfAttributeSetType(nodalAttribute, XDMF_ATTRIBUTE_TYPE_SCALAR);
  XdmfAttributeSetCenter(nodalAttribute, XDMF_ATTRIBUTE_CENTER_NODE);
  XdmfAttributeInsertDataFromPointer(nodalAttribute, &nodeValues[0], XDMF_ARRAY_TYPE_INT32, 0, 12, 1, 1 &status);

  // Add Cell Attribute
  XDMFATTRIBUTE * cellAttribute = XdmfAttributeNew();
  int cellValues[2] = {100, 200};
  XdmfAttributeSetName(cellAttribute, "Cell Attribute");
  XdmfAttributeSetType(cellAttribute, XDMF_ATTRIBUTE_TYPE_SCALAR);
  XdmfAttributeSetCenter(cellAttribute, XDMF_ATTRIBUTE_CENTER_CELL);
  XdmfAttributeInsertDataFromPointer(cellAttribute, &cellValues[0], XDMF_ARRAY_TYPE_INT32, 0, 2, 1, 1 &status);

  // Add Grid Attribute
  XDMFATTRIBUTE * gridAttribute = XdmfAttributeNew();
  int gridValues[2] = {1, 2};
  XdmfAttributeSetName(gridAttribute, "Grid Attribute");
  XdmfAttributeSetType(gridAttribute, XDMF_ATTRIBUTE_TYPE_VECTOR);
  XdmfAttributeSetCenter(gridAttribute, XDMF_ATTRIBUTE_CENTER_GRID);
  XdmfAttributeInsertDataFromPointer(gridAttribute, &gridValues[0], XDMF_ARRAY_TYPE_INT32, 0, 2, 1, 1 &status);

  // Add Node Set
  XDMFSET * nodeSet = XdmfSetNew();
  int nodeIds[3] = {0, 1, 2};
  XdmfSetSetName(nodeSet, "Node Set");
  XdmfSetSetType(nodeSet, XDMF_SET_TYPE_NODE);
  XdmfSetInsertDataFromPointer(nodeSet, &nodeIds[0], XDMF_ARRAY_TYPE_INT32, 0, 3, 1, 1, &status);

  // Add Node Set Attribute
  double nodeSetAttributeValues[3] = {10, 11, 12};
  XDMFATTRIBUTE * nodeSetAttribute = XdmfAttributeNew();
  XdmfAttributeSetName(nodeSetAttribute, "Node Set Attribute");
  XdmfAttributeSetType(nodeSetAttribute, XDMF_ATTRIBUTE_TYPE_SCALAR);
  XdmfAttributeSetCenter(nodeSetAttribute, XDMF_ATTRIBUTE_CENTER_NODE);
  XdmfAttributeInsertDataFromPointer(nodeSetAttribute, &nodeSetAttributeValues[0], XDMF_ARRAY_TYPE_FLOAT64, 0, 3, 1, 1 &status);
  XdmfSetInsertAttribute(nodeSet, nodeSetAttribute);

  // Add Time
  XDMFTIME * time = XdmfTimeNew(100);
  XdmfUnstructuredGridSetTime(hexahedron, time);

  XdmfUnstructuredGridInsertAttribute(hexahedron, nodalAttribute);
  XdmfUnstructuredGridInsertAttribute(hexahedron, cellAttribute);
  XdmfUnstructuredGridInsertAttribute(hexahedron, gridAttribute);
  XdmfUnstructuredGridInsertAttribute(hexahedron, nodeSet);

  XdmfExodusWriterWrite(exodusWriter, "TestXdmfExodusIO.exo", hexahedron);

  XDMFEXODUSREADER * reader = XdmfExodusReaderNew();
  XDMFUNSTRUCTUREDGRID * grid =
    (XDMFUNSTRUCTUREDGRID *)XdmfExodusReaderRead(reader, "TestXdmfExodusIO.exo");
  XDMFGEOMETRY * readGeometry = XdmfUnstructuredGridGetGeometry(grid);
  XDMFTOPOLOGY * readTopology = XdmfUnstructuredGridGetTopology(grid);
  assert(strcmp(XdmfUnstructuredGridGetName(grid) == XdmfUnstructuredGridGetName(hexahedron)));
  assert(XdmfGeometryGetType(XdmfUnstructuredGridGetGeometry(grid)) ==
         XdmfGeometryGetType(hexGeometry));
  assert(XdmfGeometryGetNumberPoints(XdmfUnstructuredGridGetGeometry(grid)) ==
         XdmfGeometryGetNumberPoints(hexGeometry));
  unsigned int i = 0;
  unsigned int j = 0;
  unsigned int geoSize = XdmfGeometryGetSize(hexGeometry);
  for(i = 0; i < geoSize; ++i) {//TODO
    assert(((double *)XdmfArrayGetValue(hexGeometry, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0] ==
           ((double *)XdmfArrayGetValue(readGeometry, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0]);
  }
  assert(XdmfTopologyGetType(XdmfUnstructuredGridGetTopology(grid)) ==
         XdmfTopologyGetType(hexTopology));
  assert(XdmfTopologyGetNumberElements(XdmfUnstructuredGridGetTopology(grid)) ==
         XdmfTopologyGetNumberElements(hexTopology));
  unsigned int toposize = XdmfTopologyGetSize(hexTopology);
  for(i = 0; i < toposize; ++i) {//TODO
    assert(((double *)XdmfArrayGetValue(hexTopology, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0] ==
           ((double *)XdmfArrayGetValue(readTopology, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0]);
  }
  assert(XdmfUnstructuredGridGetNumberAttributes(hexahedron) + 2 == XdmfUnstructuredGridGetNumberAttributes(grid));
  unsigned int numAttr = XdmfUnstructuredGridGetNumberAttributes(hexahedron);
  for(i = 0; i < numAttr; ++i) {//TODO
    XDMFATTRIBUTE * attribute1 = XdmfUnstructuredGridGetAttribute(hexahedron, i);
    if(attribute1->getCenter() != XdmfAttributeCenter::Grid()) {
      XDMFATTRIBUTE * attribute2 = XdmfUnstructuredGridGetAttributeByName(grid, XdmfAttributeGetName(attribute1));
      assert(XdmfAttributeGetCenter(attribute1, &status) == XdmfAttributeGetCenter(attribute2, &status));
      assert(XdmfAttributeGetType(attribute1, &status) == XdmfAttributeGetType(attribute2, &status));
      assert(XdmfAttributeGetSize(attribute1) == XdmfAttributeGetSize(attribute2));
      unsigned int attrSize = XdmfAttributeGetSize(attribute1);
      for (j = 0; j < attrSize; ++j) {
        assert(((double *)XdmfArrayGetValue(attribute1, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0] ==
               ((double *)XdmfArrayGetValue(attribute2, i, XDMF_ARRAY_TYPE_FLOAT64, &status))[0]);
      }
    }
  }
}