moving explicit data set creation to make test data set file.

This commit is contained in:
Jeremy Meredith 2015-05-19 13:10:56 -04:00
parent 4dd186eda6
commit 4e67adca8c
2 changed files with 94 additions and 73 deletions

@ -35,12 +35,15 @@ public:
// 3D regular datasets.
vtkm::cont::DataSet * Make3DRegularDataSet0();
// 3D explicit datasets.
vtkm::cont::DataSet * Make3DExplicitDataSet0();
};
//Make a simple 2D, 2 cell regular dataset.
vtkm::cont::DataSet *
inline vtkm::cont::DataSet *
MakeTestDataSet::Make2DRegularDataSet0()
{
vtkm::cont::DataSet *ds = new vtkm::cont::DataSet;
@ -69,7 +72,7 @@ MakeTestDataSet::Make2DRegularDataSet0()
return ds;
}
vtkm::cont::DataSet *
inline vtkm::cont::DataSet *
MakeTestDataSet::Make3DRegularDataSet0()
{
vtkm::cont::DataSet *ds = new vtkm::cont::DataSet;
@ -111,6 +114,80 @@ MakeTestDataSet::Make3DRegularDataSet0()
return ds;
}
inline vtkm::cont::DataSet *
MakeTestDataSet::Make3DExplicitDataSet0()
{
vtkm::cont::DataSet *ds = new vtkm::cont::DataSet;
ds->x_idx = 0;
ds->y_idx = 1;
ds->z_idx = 2;
const int nVerts = 5;
vtkm::Float32 xVals[nVerts] = {0, 1, 1, 2, 2};
vtkm::Float32 yVals[nVerts] = {0, 0, 1, 1, 2};
vtkm::Float32 zVals[nVerts] = {0, 0, 0, 0, 0};
vtkm::Float32 vars[nVerts] = {10.1, 20.1, 30.2, 40.2, 50.3};
ds->AddFieldViaCopy(xVals, nVerts);
ds->AddFieldViaCopy(yVals, nVerts);
ds->AddFieldViaCopy(zVals, nVerts);
//Set node scalar
ds->AddFieldViaCopy(vars, nVerts);
//Set cell scalar
vtkm::Float32 cellvar[2] = {100.1, 100.2};
ds->AddFieldViaCopy(cellvar, 2);
//Add connectivity
vtkm::cont::ArrayHandle<vtkm::Id> tmp2;
std::vector<vtkm::Id> shapes;
shapes.push_back(vtkm::VTKM_TRIANGLE);
shapes.push_back(vtkm::VTKM_QUAD);
std::vector<vtkm::Id> numindices;
numindices.push_back(3);
numindices.push_back(4);
std::vector<vtkm::Id> conn;
// First Cell: Triangle
conn.push_back(0);
conn.push_back(1);
conn.push_back(2);
// Second Cell: Quad
conn.push_back(2);
conn.push_back(1);
conn.push_back(3);
conn.push_back(4);
std::vector<vtkm::Id> map_cell_to_index;
map_cell_to_index.push_back(0);
map_cell_to_index.push_back(3);
vtkm::cont::CellSetExplicit *cs = new vtkm::cont::CellSetExplicit("cells",2);
vtkm::cont::ExplicitConnectivity &ec = cs->nodesOfCellsConnectivity;
vtkm::cont::ArrayHandle<vtkm::Id> tmpShapes = vtkm::cont::make_ArrayHandle(shapes);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmpShapes, ec.Shapes);
vtkm::cont::ArrayHandle<vtkm::Id> tmpNumIndices = vtkm::cont::make_ArrayHandle(numindices);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmpNumIndices, ec.NumIndices);
vtkm::cont::ArrayHandle<vtkm::Id> tmpConnectivity = vtkm::cont::make_ArrayHandle(conn);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmpConnectivity, ec.Connectivity);
vtkm::cont::ArrayHandle<vtkm::Id> tmpMapCellToConnectivityIndex = vtkm::cont::make_ArrayHandle(map_cell_to_index);
vtkm::cont::DeviceAdapterAlgorithm<VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(tmpMapCellToConnectivityIndex, ec.MapCellToConnectivityIndex);
//todo this need to be a reference/shared_ptr style class
ds->AddCellSet(cs);
//Run a worklet to populate a cell centered field.
//Here, we're filling it with test values.
vtkm::Float32 outcellVals[2] = {-1.4, -1.7};
ds->AddFieldViaCopy(outcellVals, 2);
return ds;
}
}
}
} // namespace vtkm::cont::testing

@ -28,6 +28,7 @@
#include <vtkm/exec/arg/TopologyElementType.h>
#include <vtkm/cont/testing/Testing.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
namespace test {
@ -72,88 +73,31 @@ void TestWorkletMapTopologyExplicit()
std::cout << "Testing Topology Worklet ( Explicit ) on device adapter: "
<< DeviceAdapterTraits::GetId() << std::endl;
vtkm::cont::DataSet ds;
vtkm::cont::testing::MakeTestDataSet tds;
vtkm::cont::DataSet *ds = tds.Make3DExplicitDataSet0();
ds.x_idx = 0;
ds.y_idx = 1;
ds.z_idx = 2;
const int nVerts = 5;
vtkm::Float32 xVals[nVerts] = {0, 1, 1, 2, 2};
vtkm::Float32 yVals[nVerts] = {0, 0, 1, 1, 2};
vtkm::Float32 zVals[nVerts] = {0, 0, 0, 0, 0};
vtkm::Float32 vars[nVerts] = {10.1, 20.1, 30.2, 40.2, 50.3};
ds.AddFieldViaCopy(xVals, nVerts);
ds.AddFieldViaCopy(yVals, nVerts);
ds.AddFieldViaCopy(zVals, nVerts);
//Set node scalar
ds.AddFieldViaCopy(vars, nVerts);
//Set cell scalar
vtkm::Float32 cellvar[2] = {100.1, 100.2};
ds.AddFieldViaCopy(cellvar, 2);
//Add connectivity
vtkm::cont::ArrayHandle<vtkm::Id> tmp2;
std::vector<vtkm::Id> shapes;
shapes.push_back(vtkm::VTKM_TRIANGLE);
shapes.push_back(vtkm::VTKM_QUAD);
std::vector<vtkm::Id> numindices;
numindices.push_back(3);
numindices.push_back(4);
std::vector<vtkm::Id> conn;
// First Cell: Triangle
conn.push_back(0);
conn.push_back(1);
conn.push_back(2);
// Second Cell: Quad
conn.push_back(2);
conn.push_back(1);
conn.push_back(3);
conn.push_back(4);
std::vector<vtkm::Id> map_cell_to_index;
map_cell_to_index.push_back(0);
map_cell_to_index.push_back(3);
vtkm::cont::ExplicitConnectivity ec;
ec.Shapes = vtkm::cont::make_ArrayHandle(shapes);
ec.NumIndices = vtkm::cont::make_ArrayHandle(numindices);
ec.Connectivity = vtkm::cont::make_ArrayHandle(conn);
ec.MapCellToConnectivityIndex = vtkm::cont::make_ArrayHandle(map_cell_to_index);
//todo this need to be a reference/shared_ptr style class
vtkm::cont::CellSetExplicit *cs = new vtkm::cont::CellSetExplicit("cells",2);
cs->nodesOfCellsConnectivity = ec;
ds.AddCellSet(cs);
//Run a worklet to populate a cell centered field.
//Here, we're filling it with test values.
vtkm::Float32 outcellVals[2] = {-1.4, -1.7};
ds.AddFieldViaCopy(outcellVals, 2);
VTKM_TEST_ASSERT(test_equal(ds.GetNumberOfCellSets(), 1),
VTKM_TEST_ASSERT(ds->GetNumberOfCellSets() == 1,
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(test_equal(ds.GetNumberOfFields(), 6),
VTKM_TEST_ASSERT(ds->GetNumberOfFields() == 6,
"Incorrect number of fields");
vtkm::cont::CellSet *cs = ds->GetCellSet(0);
vtkm::cont::CellSetExplicit *cse =
dynamic_cast<vtkm::cont::CellSetExplicit*>(cs);
VTKM_TEST_ASSERT(cse, "Expected an explicit cell set");
//Todo:
//the scheduling should just be passed a CellSet, and not the
//derived implementation. The vtkm::cont::CellSet should have
//a method that return the nodesOfCellsConnectivity / structure
//for that derived type. ( talk to robert for how dax did this )
vtkm::worklet::DispatcherMapTopology< ::test::CellValue > dispatcher;
dispatcher.Invoke(ds.GetField(4).GetData(),
ds.GetField(3).GetData(),
cs->GetNodeToCellConnectivity(),
ds.GetField(5).GetData());
dispatcher.Invoke(ds->GetField(4).GetData(),
ds->GetField(3).GetData(),
cse->GetNodeToCellConnectivity(),
ds->GetField(5).GetData());
//cleanup memory