Attached Files | quadratic_cell_types.zip [^] (2,236 bytes) 2013-03-21 17:33
0001-ENH-Added-support-for-quadratic-element-types.patch [^] (6,290 bytes) 2013-03-21 17:34 [Show Content] [Hide Content]From 3988eb908d7ab6cac067b87485f056767a1206fc Mon Sep 17 00:00:00 2001
From: Simon Triebenbacher <simon.triebenbacher@tuwien.ac.at>
Date: Wed, 20 Mar 2013 12:11:56 +0100
Subject: [PATCH] ENH: Added support for quadratic element types
Namely support for the following GMV element types:
3line (VTK_QUADRATIC_EDGE),
6tri (VTK_QUADRATIC_TRIANGLE),
8quad (VTK_QUADRATIC_QUAD),
ptet10 (VTK_QUADRATIC_TETRA),
phex20 (VTK_QUADRATIC_HEXAHEDRON),
phex27 (VTK_TRIQUADRATIC_HEXAHEDRON),
ppyrmd13 (VTK_QUADRATIC_PYRAMID),
pprism15 (VTK_QUADRATIC_WEDGE),
Feature request #13957
---
Plugins/GMVReader/vtkGMVReader.cxx | 53 ++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/Plugins/GMVReader/vtkGMVReader.cxx b/Plugins/GMVReader/vtkGMVReader.cxx
index 3d1a385..7ee18b3 100644
--- a/Plugins/GMVReader/vtkGMVReader.cxx
+++ b/Plugins/GMVReader/vtkGMVReader.cxx
@@ -545,6 +545,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_LINE, numNodes, list);
}
+ else if (numNodes == 3 && numFaces == 2)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_EDGE, numNodes, list);
+ }
// Triangle
else if (numNodes == 3 && numFaces == 1)
{
@@ -552,6 +558,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_TRIANGLE, numNodes, list);
}
+ else if (numNodes == 6 && numFaces == 1)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_TRIANGLE, numNodes, list);
+ }
// Quad
else if (numNodes == 4 && numFaces == 1)
{
@@ -559,6 +571,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_QUAD, numNodes, list);
}
+ else if (numNodes == 8 && numFaces == 1)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_QUAD, numNodes, list);
+ }
// Tetraeder
else if (numNodes == 4 && numFaces == 4)
{
@@ -566,6 +584,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_TETRA, numNodes, list);
}
+ else if (numNodes == 10 && numFaces == 4)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_TETRA, numNodes, list);
+ }
// Hexaeder
else if (numNodes == 8 && numFaces == 6)
{
@@ -573,6 +597,23 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_HEXAHEDRON, numNodes, list);
}
+ else if (numNodes == 20 && numFaces == 6)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_HEXAHEDRON, numNodes, list);
+ }
+ else if (numNodes == 27 && numFaces == 48)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+
+ list[20] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + 23] + incr;
+ list[22] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + 20] + incr;
+ list[23] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + 22] + incr;
+
+ ugrid->InsertNextCell(VTK_TRIQUADRATIC_HEXAHEDRON, numNodes, list);
+ }
// Pyramid
else if (numNodes == 5 && numFaces == 5)
{
@@ -605,6 +646,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
}
ugrid->InsertNextCell(VTK_PYRAMID, numNodes, list);
}
+ else if (numNodes == 13 && numFaces == 5)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_PYRAMID, numNodes, list);
+ }
// Prism
else if (numNodes == 6 && numFaces == 5)
{
@@ -612,6 +659,12 @@ int vtkGMVReader::RequestData(vtkInformation *vtkNotUsed(request),
list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
ugrid->InsertNextCell(VTK_WEDGE, numNodes, list);
}
+ else if (numNodes == 15 && numFaces == 5)
+ {
+ for (k = 0; k < numNodes; ++k)
+ list[k] = GMVRead::gmv_meshdata.cellnodes[numNodesSoFar + k] + incr;
+ ugrid->InsertNextCell(VTK_QUADRATIC_WEDGE, numNodes, list);
+ }
// General (generic cell type, the only case where
// GMVRead::gmv_meshdata.cellnnode[i] keeps its default value of 0)
else if (numNodes == 0 && numFaces > 0)
--
1.8.2
|