Added VertexClustering test

This commit is contained in:
Chun-Ming Chen 2015-06-19 14:23:20 -04:00 committed by Jimmy
parent 4f813ca4c5
commit ebd6e43409
5 changed files with 70 additions and 2 deletions

@ -161,7 +161,7 @@ public:
for (vtkm::Id i=0; i<this->NumShapes; ++i)
{
MapCellToConnectivityIndex.GetPortalControl().Set(i, counter);
counter += this->NumIndices.GetPortalControl().Get(i);
counter += this->NumIndices.GetPortalConstControl().Get(i);
}
}
@ -211,6 +211,10 @@ public:
out<<"\n";
}
vtkm::cont::ArrayHandle<vtkm::Id, ShapeStorageTag> &GetShapesArray() { return Shapes; }
vtkm::cont::ArrayHandle<vtkm::Id, ShapeStorageTag> &GetNumIndicesArray() { return NumIndices; }
vtkm::cont::ArrayHandle<vtkm::Id, ShapeStorageTag> &GetConnectivityArray() { return Connectivity; }
vtkm::cont::ArrayHandle<vtkm::Id, ShapeStorageTag> &GetCellToConnectivityIndexArray() { return MapCellToConnectivityIndex; }
private:
vtkm::Id ConnectivityLength;

@ -39,6 +39,7 @@ public:
// 3D explicit datasets.
vtkm::cont::DataSet Make3DExplicitDataSet0();
vtkm::cont::DataSet Make3DExplicitDataSet1();
vtkm::cont::DataSet Make3DExplicitDataSetCowNose(double *pBounds = NULL);
};
@ -202,6 +203,55 @@ MakeTestDataSet::Make3DExplicitDataSet1()
return ds;
}
inline vtkm::cont::DataSet
MakeTestDataSet::Make3DExplicitDataSetCowNose(double *pBounds)
{
// prepare data array
const int nVerts = 17;
vtkm::Float64 xyzVals[nVerts][3] = {{0.0480879,0.151874,0.107334}, {0.0293568,0.245532,0.125337}, {0.0224398,0.246495,0.1351}, {0.0180085,0.20436,0.145316}, {0.0307091,0.152142,0.0539249}, {0.0270341,0.242992,0.107567}, {0.000684071,0.00272505,0.175648}, {0.00946217,0.077227,0.187097}, {-0.000168991,0.0692243,0.200755}, {-0.000129414,0.00247137,0.176561}, {0.0174172,0.137124,0.124553}, {0.00325994,0.0797155,0.184912}, {0.00191765,0.00589327,0.16608}, {0.0174716,0.0501928,0.0930275}, {0.0242103,0.250062,0.126256}, {0.0108188,0.152774,0.167914}, {5.41687e-05,0.00137834,0.175119}};
const int nPointIds = 57;
vtkm::Id pointId[nPointIds] = {0, 1, 3, 2, 3, 1, 4, 5, 0, 1, 0, 5, 7, 8, 6, 9, 6, 8, 0, 10, 7, 11, 7, 10, 0, 6, 13, 12, 13, 6, 1, 5, 14, 1, 14, 2, 0, 3, 15, 0, 13, 4, 6, 16, 12, 6, 9, 16, 7, 11, 8, 0, 15, 10, 7, 6, 0};
double _bounds[6] = {-0.000169, 0.048088, 0.001378, 0.250062, 0.053925, 0.200755};
vtkm::Float32 xVals[nVerts], yVals[nVerts], zVals[nVerts];
vtkm::Vec<vtkm::Float32, 3> points[nVerts];
int i;
for (i=0; i<nVerts; i++)
{
points[i][0] = xVals[i] = xyzVals[i][0];
points[i][1] = yVals[i] = xyzVals[i][1];
points[i][2] = zVals[i] = xyzVals[i][2];
}
// create DataSet
vtkm::cont::DataSet ds;
ds.AddField(Field("xyz", 1, vtkm::cont::Field::ASSOC_POINTS, points, nVerts));
ds.AddField(Field("x", 1, vtkm::cont::Field::ASSOC_POINTS, xVals, nVerts));
ds.AddField(Field("y", 1, vtkm::cont::Field::ASSOC_POINTS, yVals, nVerts));
ds.AddField(Field("z", 1, vtkm::cont::Field::ASSOC_POINTS, zVals, nVerts));
ds.AddCoordinateSystem(vtkm::cont::CoordinateSystem("x","y","z"));
boost::shared_ptr< vtkm::cont::CellSetExplicit<> > cs(
new vtkm::cont::CellSetExplicit<>("cells", 2));
vtkm::cont::ExplicitConnectivity<> &ec = cs->nodesOfCellsConnectivity;
ec.PrepareToAddCells(nPointIds/3, nPointIds);
for (i=0; i<nPointIds/3; i++)
{
ec.AddCell(vtkm::VTKM_TRIANGLE, 3, make_Vec<vtkm::Id>(pointId[i*3], pointId[i*3+1], pointId[i*3+2]));
}
ec.CompleteAddingCells();
//todo this need to be a reference/shared_ptr style class
ds.AddCellSet(cs);
// copy bounds
if (pBounds != NULL)
for (i=0; i<6; i++)
pBounds[i] = _bounds[i];
return ds;
}
}
}
} // namespace vtkm::cont::testing

@ -48,7 +48,8 @@ struct DivideWorklet: public vtkm::worklet::WorkletMapField{
{ vout = v * (1./count); }
};
template <class KeyType, class ValueType, class DeviceAdapter = VTKM_DEFAULT_DEVICE_ADAPTER_TAG>
template <class KeyType, class ValueType, class DeviceAdapter>
void AverageByKey( const vtkm::cont::ArrayHandle<KeyType> &keyArray,
const vtkm::cont::ArrayHandle<ValueType> &valueArray,
vtkm::cont::ArrayHandle<KeyType> &outputKeyArray,
@ -98,6 +99,15 @@ void AverageByKey( const vtkm::cont::ArrayHandle<KeyType> &keyArray,
}
template <class KeyType, class ValueType>
void AverageByKey( const vtkm::cont::ArrayHandle<KeyType> &keyArray,
const vtkm::cont::ArrayHandle<ValueType> &valueArray,
vtkm::cont::ArrayHandle<KeyType> &outputKeyArray,
vtkm::cont::ArrayHandle<ValueType> &outputValueArray)
{
AverageByKey<KeyType, ValueType, VTKM_DEFAULT_DEVICE_ADAPTER_TAG> (keyArray, valueArray, outputKeyArray, outputValueArray);
}
}} // vtkm::worklet
#endif //vtk_m_worklet_AverageByKey_h

@ -20,8 +20,11 @@
#ifndef vtk_m_worklet_VertexClustering_h
#define vtk_m_worklet_VertexClustering_h
namespace vtkm{ namespace worklet
{
}} // namespace vtkm::worklet
#endif // vtk_m_worklet_VertexClustering_h

@ -25,6 +25,7 @@ set(unit_tests
UnitTestWorkletMapFieldMultiParam.cxx
UnitTestWorkletMapTopologyExplicit.cxx
UnitTestWorkletMapTopologyRegular.cxx
UnitTestVertexClustering.cxx
)
vtkm_save_worklet_unit_tests(${unit_tests})