Rectilinear with subset and sample and tests

This commit is contained in:
Patricia Kroll Fasel - 090207 2017-04-14 14:06:28 -06:00
parent 49f8662572
commit 78148b0295
2 changed files with 75 additions and 62 deletions

@ -246,14 +246,6 @@ std::cout << "Data Points " << count << std::endl;
cellBounds.Y.Max -= 1;
if (cellBounds.Z.Max > 1)
cellBounds.Z.Max -= 1;
/*
if ((cellBounds.X.Max % sample[0]) == 0)
cellBounds.X.Max -= 1;
if ((cellBounds.Y.Max % sample[1]) == 0)
cellBounds.Y.Max -= 1;
if ((cellBounds.Z.Max % sample[2]) == 0)
cellBounds.Z.Max -= 1;
*/
std::cout << "CELL DIMENSION " << cellDimension << std::endl;
std::cout << "CELL BOUNDS " << cellBounds << std::endl;
@ -287,20 +279,13 @@ std::cout << "Data Cells " << count << std::endl;
typedef vtkm::cont::ArrayHandleUniformPointCoordinates UniformArrayHandle;
typedef typename UniformArrayHandle::ExecutionTypes<DeviceAdapter>::PortalConst UniformConstPortal;
// Data in the Field attached to CoordinateSystem is dynamic
vtkm::cont::DynamicArrayHandleCoordinateSystem coordinateData = coordinates.GetData();
// Cast dynamic coordinate data to Uniform type
UniformArrayHandle vertices;
vertices = coordinateData.Cast<UniformArrayHandle>();
/*
std::cout << "Uniform vertices:" << std::endl;
printSummary_ArrayHandle(vertices, std::cout);
*/
vtkm::cont::DynamicArrayHandleCoordinateSystem coordinateData = coordinates.GetData();
UniformArrayHandle inCoordinates;
inCoordinates = coordinateData.Cast<UniformArrayHandle>();
// Portal to access data in the input coordinate system
UniformConstPortal Coordinates = vertices.PrepareForInput(DeviceAdapter());
UniformConstPortal Coordinates = inCoordinates.PrepareForInput(DeviceAdapter());
// Sizes and values of input Uniform Structured
vtkm::Id3 inDimension = Coordinates.GetDimensions();
@ -336,11 +321,7 @@ std::cout << "Data Cells " << count << std::endl;
vtkm::cont::CoordinateSystem outCoordinates(coordinates.GetName(), outCoordinateData);
output.AddCoordinateSystem(outCoordinates);
/*
std::cout << "CoordinateSystem for output:" << std::endl;
outCoordinates.PrintSummary(std::cout);
*/
// Set the output cellset
if (outDim == 3)
{
vtkm::cont::CellSetStructured<3> outCellSet(cellSet.GetName());
@ -425,24 +406,17 @@ std::cout << "Geometry Cells " << output.GetCellSet(0).GetNumberOfCells() << std
typedef typename DefaultHandle::ExecutionTypes<DeviceAdapter>::PortalConst DefaultConstHandle;
typedef typename CartesianArrayHandle::ExecutionTypes<DeviceAdapter>::PortalConst CartesianConstPortal;
// Data in the Field attached to CoordinateSystem is dynamic
vtkm::cont::DynamicArrayHandleCoordinateSystem coordinateData = coordinates.GetData();
// Cast dynamic coordinate data to Rectilinear type
CartesianArrayHandle vertices;
vertices = coordinateData.Cast<CartesianArrayHandle>();
std::cout << "Recilinear vertices:" << std::endl;
printSummary_ArrayHandle(vertices, std::cout);
CartesianConstPortal Coordinates = vertices.PrepareForInput(DeviceAdapter());
vtkm::cont::DynamicArrayHandleCoordinateSystem coordinateData = coordinates.GetData();
CartesianArrayHandle inCoordinates;
inCoordinates = coordinateData.Cast<CartesianArrayHandle>();
CartesianConstPortal Coordinates = inCoordinates.PrepareForInput(DeviceAdapter());
vtkm::Id NumberOfValues = Coordinates.GetNumberOfValues();
std::cout << "RECTILINEAR NumberOfValues " << NumberOfValues << std::endl;
DefaultConstHandle X = Coordinates.GetFirstPortal();
DefaultConstHandle Y = Coordinates.GetSecondPortal();
DefaultConstHandle Z = Coordinates.GetThirdPortal();
std::cout << "RECTILINEAR NumberOfValues " << NumberOfValues << std::endl;
vtkm::Id3 inDimension(X.GetNumberOfValues(),
Y.GetNumberOfValues(),
@ -464,6 +438,13 @@ std::cout << "Geometry Cells " << output.GetCellSet(0).GetNumberOfCells() << std
vtkm::Id3 outDimension = vtkm::make_Vec(outBounds.X.Max - outBounds.X.Min + 1,
outBounds.Y.Max - outBounds.Y.Min + 1,
outBounds.Z.Max - outBounds.Z.Min + 1);
for (vtkm::IdComponent dim = 0; dim < outDim; dim++)
{
if (sample[dim] > 1)
{
outDimension[dim] = outDimension[dim] / sample[dim] + 1;
}
}
std::cout << "RECTILINEAR OUT DIMENSIONS " << outDimension << std::endl;
// Set output coordinate system
@ -472,22 +453,32 @@ std::cout << "Geometry Cells " << output.GetCellSet(0).GetNumberOfCells() << std
Yc.Allocate(outDimension[1]);
Zc.Allocate(outDimension[2]);
/*
vtkm::Id indx = 0;
vtkm::Id3 minBound = vtkm::make_Vec(outBounds.X.Min, outBounds.Y.Min, outBounds.Z.Min);
vtkm::Id3 maxBound = vtkm::make_Vec(outBounds.X.Max, outBounds.Y.Max, outBounds.Z.Max);
for (vtkm::Id x = minBound[0]; x <= maxBound[0]; x++)
{
if ((x % sample[0]) == 0)
{
Xc.GetPortalControl().Set(indx++, X.Get(x));
}
}
indx = 0;
for (vtkm::Id y = minBound[1]; y <= maxBound[1]; y++)
{
if ((y % sample[1]) == 0)
{
Yc.GetPortalControl().Set(indx++, Y.Get(y));
}
}
indx = 0;
for (vtkm::Id z = minBound[2]; z <= maxBound[2]; z++)
{
if ((z % sample[2]) == 0)
{
Zc.GetPortalControl().Set(indx++, Z.Get(z));
}
}
for (vtkm::Id x = 0; x < outDimension[0]; x++)
std::cout << "Xc " << x << " = " << Xc.GetPortalControl().Get(x) << std::endl;
@ -495,32 +486,13 @@ std::cout << "Geometry Cells " << output.GetCellSet(0).GetNumberOfCells() << std
std::cout << "Yc " << y << " = " << Yc.GetPortalControl().Get(y) << std::endl;
for (vtkm::Id z = 0; z < outDimension[2]; z++)
std::cout << "Zc " << z << " = " << Zc.GetPortalControl().Get(z) << std::endl;
*/
// PKF TO DO
// Fix coordinate system for subsampling
CartesianArrayHandle outCoordinateData(Xc, Yc, Zc);
vtkm::cont::CoordinateSystem outCoordinates(coordinates.GetName(), outCoordinateData);
output.AddCoordinateSystem(outCoordinates);
std::cout << "CoordinateSystem for output:" << std::endl;
outCoordinates.PrintSummary(std::cout);
// Set the size of the cell set for Rectilinear
if (outDim == 1) {
vtkm::cont::CellSetStructured<1> outCellSet(cellSet.GetName());
outCellSet.SetPointDimensions(outDimension[0]);
output.AddCellSet(outCellSet);
}
else if (outDim == 2)
{
vtkm::cont::CellSetStructured<2> outCellSet(cellSet.GetName());
outCellSet.SetPointDimensions(vtkm::make_Vec(outDimension[0],
outDimension[1]));
output.AddCellSet(outCellSet);
}
else if (outDim == 3)
// Set the output cellset
if (outDim == 3)
{
vtkm::cont::CellSetStructured<3> outCellSet(cellSet.GetName());
outCellSet.SetPointDimensions(vtkm::make_Vec(outDimension[0],
@ -529,6 +501,49 @@ std::cout << "Geometry Cells " << output.GetCellSet(0).GetNumberOfCells() << std
output.AddCellSet(outCellSet);
}
else if (outDim == 2)
{
vtkm::cont::CellSetStructured<2> outCellSet(cellSet.GetName());
if (outDimension[2] == 1) // XY plane
{
outCellSet.SetPointDimensions(vtkm::make_Vec(outDimension[0],
outDimension[1]));
output.AddCellSet(outCellSet);
}
else if (outDimension[1] == 1) // XZ plane
{
outCellSet.SetPointDimensions(vtkm::make_Vec(outDimension[0],
outDimension[2]));
output.AddCellSet(outCellSet);
}
else if (outDimension[0] == 1) // YZ plane
{
outCellSet.SetPointDimensions(vtkm::make_Vec(outDimension[1],
outDimension[2]));
output.AddCellSet(outCellSet);
}
}
else if (outDim == 1)
{
vtkm::cont::CellSetStructured<1> outCellSet(cellSet.GetName());
if (outDimension[1] == 1 && outDimension[2] == 1)
{
outCellSet.SetPointDimensions(outDimension[0]);
output.AddCellSet(outCellSet);
}
else if (outDimension[0] == 1 && outDimension[2] == 1)
{
outCellSet.SetPointDimensions(outDimension[1]);
output.AddCellSet(outCellSet);
}
else if (outDimension[0] == 1 && outDimension[1] == 1)
{
outCellSet.SetPointDimensions(outDimension[2]);
output.AddCellSet(outCellSet);
}
}
std::cout << "Number of Cells " << output.GetCellSet(0).GetNumberOfCells() << std::endl;
std::cout << "Number of Points " << output.GetCellSet(0).GetNumberOfPoints() << std::endl;

@ -262,10 +262,8 @@ public:
TestUniform2D();
TestUniform3D();
TestUniform3D1();
/*
TestRectilinear2D();
TestRectilinear3D();
*/
}
};