forcing connectivity to triangle-only (Id3) to get simple WorkletMapCell.

This commit is contained in:
Jeremy Meredith 2015-02-04 11:47:15 -05:00
parent 5a0a658d7d
commit 455ef255da
3 changed files with 27 additions and 20 deletions

@ -13,7 +13,7 @@ public:
ExplicitConnectivity() : Shapes(), Connectivity() {}
vtkm::cont::ArrayHandle<vtkm::Id, vtkm::cont::StorageTagBasic> Shapes;
vtkm::cont::ArrayHandle<vtkm::Id, vtkm::cont::StorageTagBasic> Connectivity;
vtkm::cont::ArrayHandle<vtkm::Id3, vtkm::cont::StorageTagBasic> Connectivity;
};
class DataSet

@ -27,17 +27,18 @@
class CellType : public vtkm::worklet::WorkletMapCell
{
public:
typedef void ControlSignature(FieldIn<IdType> inCells, FieldOut<Scalar> outCells);
typedef _2 ExecutionSignature(_1); // FieldOut<Scalar> ExecutionSignature(FieldIn<Scalar>);
typedef void ControlSignature(FieldIn<IdType> inCells, ConnectivityIn<Id3Type> nodeIds, FieldOut<Scalar> outCells);
typedef _3 ExecutionSignature(_1, _2); // FieldOut<Scalar> ExecutionSignature(FieldIn<Scalar>);
typedef _1 InputDomain;
VTKM_CONT_EXPORT
CellType() { };
VTKM_EXEC_EXPORT
vtkm::Float32 operator()(const vtkm::Id &cell) const
vtkm::Float32 operator()(const vtkm::Id &cell, vtkm::Id3 &nodeIds) const
{
std::cout<<"CellType worklet: "<<cell<<std::endl;
std::cout<<"CellType worklet: "<<nodeIds[0]<<","<<nodeIds[1]<<","<<nodeIds[2]<<","<<std::endl;
return (vtkm::Float32)cell;
}
@ -76,35 +77,29 @@ void TestDataSet()
//Add connectivity
vtkm::cont::ArrayHandle<vtkm::Id> tmp2;
vtkm::cont::ArrayHandle<vtkm::Id3> tmp3;
std::vector<vtkm::Id> shapes;
shapes.push_back(1); //Triangle
shapes.push_back(1); //Triangle
shapes.push_back(39); //A Special Triangle
std::vector<vtkm::Id> conn;
//Triangle 1
conn.push_back(0);
conn.push_back(1);
conn.push_back(2);
//Triangle 2
conn.push_back(1);
conn.push_back(2);
conn.push_back(3);
std::vector<vtkm::Id3> conn;
conn.push_back(vtkm::Id3(0,1,2));
conn.push_back(vtkm::Id3(1,2,3));
tmp2 = vtkm::cont::make_ArrayHandle(shapes);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmp2, ds.conn.Shapes);
tmp2 = vtkm::cont::make_ArrayHandle(conn);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmp2, ds.conn.Connectivity);
tmp3 = vtkm::cont::make_ArrayHandle(conn);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmp3, ds.conn.Connectivity);
//Run a worklet to populate a cell centered field.
vtkm::Float32 cellVals[1] = {-1.0};
tmp = vtkm::cont::make_ArrayHandle(cellVals, 1);
vtkm::Float32 cellVals[2] = {-1.0, -1.0};
tmp = vtkm::cont::make_ArrayHandle(cellVals, 2);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmp, ds.Fields[4]);
vtkm::worklet::DispatcherMapCell<CellType> dispatcher;
dispatcher.Invoke(ds.conn.Shapes, ds.Fields[4]);
dispatcher.Invoke(ds.conn.Shapes, ds.conn.Connectivity, ds.Fields[4]);
#if 0
//Add some verts.

@ -54,6 +54,18 @@ public:
typedef vtkm::exec::arg::FetchTagArrayDirectIn FetchTag;
};
/// \brief A control signature tag for input connectivity.
///
/// This tag takes a template argument that is a type list tag that limits
/// the possible value types in the array.
///
template<typename TypeList = AllTypes>
struct ConnectivityIn : vtkm::cont::arg::ControlSignatureTagBase {
typedef vtkm::cont::arg::TypeCheckTagArray<TypeList> TypeCheckTag;
typedef vtkm::cont::arg::TransportTagArrayIn TransportTag;
typedef vtkm::exec::arg::FetchTagArrayDirectIn FetchTag;
};
/// \brief A control signature tag for output fields.
///
/// This tag takes a template argument that is a type list tag that limits