Update clip and external faces code to new cell shapes

The names of the cell shapes and header files changed superficially. The
check in missed the clip and external faces. Update that code.

There are also some less superficial changes that allow you to manage
cell shapes with tags. It might be worthwhile to update this code to use
that new infrastructure.
This commit is contained in:
Kenneth Moreland 2015-08-28 12:48:00 -06:00
parent 688eafe5f8
commit 89c72c9975
5 changed files with 68 additions and 77 deletions

@ -253,11 +253,13 @@ public:
{
}
template<typename ScalarsVecType>
template<typename ScalarsVecType, typename CellShapeTag>
VTKM_EXEC_EXPORT
void operator()(const ScalarsVecType &scalars,
vtkm::Id shape, vtkm::Id count,
vtkm::Id& clipTableIdx, ClipStats& stats) const
CellShapeTag shape,
vtkm::Id count,
vtkm::Id& clipTableIdx,
ClipStats& stats) const
{
const vtkm::Id mask[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
@ -268,7 +270,7 @@ public:
mask[i] : 0;
}
vtkm::Id idx = this->ClipTables.GetCaseIndex(shape, caseId);
vtkm::Id idx = this->ClipTables.GetCaseIndex(shape.Id, caseId);
clipTableIdx = idx;
vtkm::Id numberOfCells = this->ClipTables.ValueAt(idx++);
@ -315,10 +317,13 @@ public:
{
}
template<typename ScalarsVecType, typename IndicesVecType, typename Storage>
template<typename CellShapeTag,
typename ScalarsVecType,
typename IndicesVecType,
typename Storage>
VTKM_EXEC_EXPORT
void operator()(
vtkm::Id shape,
CellShapeTag shape,
const ScalarsVecType &scalars,
const IndicesVecType &indices,
vtkm::Id clipTableIdx,
@ -358,7 +363,7 @@ public:
else // edge, new point to be generated by cutting the egde
{
vtkm::Vec<vtkm::IdComponent, 2> edge =
this->ClipTables.GetEdge(shape, entry);
this->ClipTables.GetEdge(shape.Id, entry);
EdgeInterpolation ei;
ei.Vertex1 = indices[edge[0]];

@ -20,8 +20,8 @@
#ifndef vtk_m_worklet_ExternalFaces_h
#define vtk_m_worklet_ExternalFaces_h
#include <vtkm/CellShape.h>
#include <vtkm/Math.h>
#include <vtkm/CellType.h>
#include <vtkm/cont/ArrayHandle.h>
#include <vtkm/cont/ArrayHandleConstant.h>
@ -155,10 +155,10 @@ struct ExternalFaces
VTKM_EXEC_EXPORT
T operator()(const T &cellType) const
{
if (cellType == vtkm::VTKM_TETRA) return 4;
else if (cellType == vtkm::VTKM_PYRAMID) return 5;
else if (cellType == vtkm::VTKM_WEDGE) return 5;
else if (cellType == vtkm::VTKM_HEXAHEDRON) return 6;
if (cellType == vtkm::CELL_SHAPE_TETRA) return 4;
else if (cellType == vtkm::CELL_SHAPE_PYRAMID) return 5;
else if (cellType == vtkm::CELL_SHAPE_WEDGE) return 5;
else if (cellType == vtkm::CELL_SHAPE_HEXAHEDRON) return 6;
else return -1;
}
};
@ -176,16 +176,19 @@ struct ExternalFaces
typedef _2 InputDomain;
VTKM_CONT_EXPORT
GetFace() { };
GetFace() { }
template<typename T, typename FaceValueVecType, typename CellNodeVecType>
template<typename T,
typename FaceValueVecType,
typename CellShapeTag,
typename CellNodeVecType>
VTKM_EXEC_EXPORT
void operator()(const T &cellFaceId,
FaceValueVecType &faceVertices,
const vtkm::Id &cellType,
CellShapeTag shape,
const CellNodeVecType &cellNodeIds) const
{
if (cellType == vtkm::VTKM_TETRA)
if (shape.Id == vtkm::CELL_SHAPE_TETRA)
{
vtkm::IdComponent faceIdTable[12] = {0,1,2,0,1,3,0,2,3,1,2,3};
@ -400,7 +403,7 @@ public:
output_conn.Allocate(3 * output_numExtFaces);
for(int face = 0; face < output_numExtFaces; face++)
{
output_shapes.GetPortalControl().Set(face, vtkm::VTKM_TRIANGLE);
output_shapes.GetPortalControl().Set(face, vtkm::CELL_SHAPE_TRIANGLE);
output_numIndices.GetPortalControl().Set(face, static_cast<vtkm::Id>(3));
output_conn.GetPortalControl().Set(3*face, extFacePortal.Get(face)[0]);
output_conn.GetPortalControl().Set(3*face + 1, extFacePortal.Get(face)[1]);

@ -20,7 +20,7 @@
#ifndef vtk_m_ClipTables_h
#define vtk_m_ClipTables_h
#include <vtkm/CellType.h>
#include <vtkm/CellShape.h>
#include <vtkm/Types.h>
#include <vtkm/cont/ArrayHandle.h>
@ -34,15 +34,15 @@ namespace internal {
// values < 100 represent edges where the corresponding vertex lies
// values >= 100 reresent existing vertices of the input cell (vertex = value - 100)
static vtkm::Id ClipTablesData[] = {
// VTKM_VERTEX
// vtkm::CELL_SHAPE_VERTEX
0, -1, -1, -1, // 0
1, 1, 1, 100, // 1
// VTKM_LINE
// vtkm::CELL_SHAPE_LINE
0, -1, -1, -1, -1, // 0
1, 3, 2, 100, 1, // 1
1, 3, 2, 0, 101, // 2
1, 3, 2, 100, 101, // 3
// VTKM_TRIANGLE
// vtkm::CELL_SHAPE_TRIANGLE
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 0, 2, 100, 0, -1, -1, -1, -1, // 1
1, 5, 3, 1, 0, 101, 0, -1, -1, -1, -1, // 2
@ -51,24 +51,7 @@ static vtkm::Id ClipTablesData[] = {
2, 5, 3, 0, 1, 102, 5, 3, 102, 100, 0, // 5
2, 5, 3, 0, 101, 2, 5, 3, 2, 101, 102, // 6
1, 5, 3, 100, 101, 102, 0, -1, -1, -1, -1, // 7
// VTKM_PIXEL
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 100, 0, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 1
1, 5, 3, 101, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 2
1, 8, 4, 100, 101, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 3
1, 5, 3, 102, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 4
1, 8, 4, 100, 0, 2, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 5
3, 5, 3, 101, 1, 0, 5, 3, 102, 3, 2, 8, 4, 0, 1, 2, 3, // 6
3, 5, 3, 100, 101, 1, 5, 3, 100, 1, 2, 5, 3, 100, 2, 102, -1, // 7
1, 5, 3, 103, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 8
3, 5, 3, 100, 0, 3, 5, 3, 103, 2, 1, 8, 4, 0, 1, 2, 3, // 9
1, 8, 4, 101, 103, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10
3, 5, 3, 100, 101, 3, 5, 3, 101, 2, 3, 5, 3, 101, 103, 2, -1, // 11
1, 8, 4, 103, 102, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 12
3, 5, 3, 100, 0, 102, 5, 3, 0, 1, 102, 5, 3, 1, 103, 102, -1, // 13
3, 5, 3, 0, 101, 103, 5, 3, 0, 103, 3, 5, 3, 103, 102, 3, -1, // 14
1, 8, 4, 100, 101, 103, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 15
// VTKM_QUAD
// vtkm::CELL_SHAPE_QUAD
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 100, 0, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 1
1, 5, 3, 101, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 2
@ -85,7 +68,7 @@ static vtkm::Id ClipTablesData[] = {
3, 5, 3, 100, 0, 103, 5, 3, 0, 1, 103, 5, 3, 1, 102, 103, -1, // 13
3, 5, 3, 0, 101, 102, 5, 3, 0, 102, 3, 5, 3, 102, 103, 3, -1, // 14
1, 9, 4, 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 15
// VTKM_TETRA
// vtkm::CELL_SHAPE_TETRA
0, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 10, 4, 0, 3, 2, 100, -1, -1, // 1
1, 10, 4, 0, 1, 4, 101, -1, -1, // 2
@ -113,7 +96,7 @@ static vtkm::IdComponent CellEdges[] = {
0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 3, 2, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 2, 3, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 2, 2, 0, 0, 3, 1, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -127,40 +110,40 @@ enum {
EDGE_TABLES_SIZE = sizeof(CellEdges)/sizeof(vtkm::IdComponent)
};
static vtkm::Id ShapeToTableWidthMap[VTKM_NUMBER_OF_CELL_TYPES] = {
-1, // VTKM_EMPTY_CELL
4, // VTKM_VERTEX
-1, // VTKM_POLY_VERTEX
5, // VTKM_LINE
-1, // VTKM_POLY_LINE
11, // VTKM_TRIANGLE
-1, // VTKM_TRIANGLE_STRIP
-1, // VTKM_POLYGON
17, // VTKM_PIXEL
17, // VTKM_QUAD
9, // VTKM_TETRA
-1, // VTKM_VOXEL
-1, // VTKM_HEXAHEDRON
-1, // VTKM_WEDGE
-1 // VTKM_PYRAMID
static vtkm::Id ShapeToTableWidthMap[vtkm::NUMBER_OF_CELL_SHAPES] = {
-1, // vtkm::CELL_SHAPE_EMPTY_CELL
4, // vtkm::CELL_SHAPE_VERTEX
-1, // vtkm::CELL_SHAPE_POLY_VERTEX
5, // vtkm::CELL_SHAPE_LINE
-1, // vtkm::CELL_SHAPE_POLY_LINE
11, // vtkm::CELL_SHAPE_TRIANGLE
-1, // vtkm::CELL_SHAPE_TRIANGLE_STRIP
-1, // vtkm::CELL_SHAPE_POLYGON
-1, // vtkm::CELL_SHAPE_PIXEL
17, // vtkm::CELL_SHAPE_QUAD
9, // vtkm::CELL_SHAPE_TETRA
-1, // vtkm::CELL_SHAPE_VOXEL
-1, // vtkm::CELL_SHAPE_HEXAHEDRON
-1, // vtkm::CELL_SHAPE_WEDGE
-1 // vtkm::CELL_SHAPE_PYRAMID
};
static vtkm::Id ShapeToTableIndexMap[VTKM_NUMBER_OF_CELL_TYPES] = {
-1, // VTKM_EMPTY_CELL
0, // VTKM_VERTEX
-1, // VTKM_POLY_VERTEX
8, // VTKM_LINE
-1, // VTKM_POLY_LINE
28, // VTKM_TRIANGLE
-1, // VTKM_TRIANGLE_STRIP
-1, // VTKM_POLYGON
116, // VTKM_PIXEL
388, // VTKM_QUAD
660, // VTKM_TETRA
-1, // VTKM_VOXEL
-1, // VTKM_HEXAHEDRON
-1, // VTKM_WEDGE
-1 // VTKM_PYRAMID
static vtkm::Id ShapeToTableIndexMap[vtkm::NUMBER_OF_CELL_SHAPES] = {
-1, // vtkm::CELL_SHAPE_EMPTY_CELL
0, // vtkm::CELL_SHAPE_VERTEX
-1, // vtkm::CELL_SHAPE_POLY_VERTEX
8, // vtkm::CELL_SHAPE_LINE
-1, // vtkm::CELL_SHAPE_POLY_LINE
28, // vtkm::CELL_SHAPE_TRIANGLE
-1, // vtkm::CELL_SHAPE_TRIANGLE_STRIP
-1, // vtkm::CELL_SHAPE_POLYGON
-1, // vtkm::CELL_SHAPE_PIXEL
116, // vtkm::CELL_SHAPE_QUAD
388, // vtkm::CELL_SHAPE_TETRA
-1, // vtkm::CELL_SHAPE_VOXEL
-1, // vtkm::CELL_SHAPE_HEXAHEDRON
-1, // vtkm::CELL_SHAPE_WEDGE
-1 // vtkm::CELL_SHAPE_PYRAMID
};
@ -213,9 +196,9 @@ public:
ClipTables()
: ClipTablesArray(vtkm::cont::make_ArrayHandle(ClipTablesData, CLIP_TABLES_SIZE)),
ShapeToTableWidthMapArray(vtkm::cont::make_ArrayHandle(
ShapeToTableWidthMap, VTKM_NUMBER_OF_CELL_TYPES)),
ShapeToTableWidthMap, vtkm::NUMBER_OF_CELL_SHAPES)),
ShapeToTableIndexMapArray(vtkm::cont::make_ArrayHandle(
ShapeToTableIndexMap, VTKM_NUMBER_OF_CELL_TYPES)),
ShapeToTableIndexMap, vtkm::NUMBER_OF_CELL_SHAPES)),
EdgeTablesArray(vtkm::cont::make_ArrayHandle(CellEdges, EDGE_TABLES_SIZE))
{
}

@ -67,7 +67,7 @@ vtkm::cont::DataSet MakeTestDatasetExplicit()
Coord3D(0.0f, 1.0f, 0.0f),
};
static vtkm::Float32 values[] = { 1.0, 2.0, 1.0, 0.0 };
static vtkm::Id shapes[] = { vtkm::VTKM_TRIANGLE, vtkm::VTKM_TRIANGLE };
static vtkm::Id shapes[] = { vtkm::CELL_SHAPE_TRIANGLE, vtkm::CELL_SHAPE_TRIANGLE };
static vtkm::Id numInds[] = { 3, 3 };
static vtkm::Id connectivity[] = { 0, 1, 3, 3, 1, 2 };

@ -102,7 +102,7 @@ void TestExternalFaces()
int index = 0;
for(int j = 0; j < nCells; j++)
{
shapes.GetPortalControl().Set(j, static_cast<vtkm::Id>(vtkm::VTKM_TETRA));
shapes.GetPortalControl().Set(j, static_cast<vtkm::Id>(vtkm::CELL_SHAPE_TETRA));
numIndices.GetPortalControl().Set(j, 4);
for(int k = 0; k < 4; k++)
conn.GetPortalControl().Set(index++, static_cast<vtkm::Id>(cellVerts[j][k]));