Merge branch 'static-dataset-builder-methods' into 'master'

Improvements to data set builds

Some improvements to data set builders to make them easier to use. The main changes are making most of the methods static so that the class does not have to be instantiated and to accept DynamicArrayHandle for fields.

See merge request !325
This commit is contained in:
Kenneth Moreland 2016-01-21 17:21:59 -05:00
commit 51ef8f470c
10 changed files with 232 additions and 305 deletions

@ -35,6 +35,8 @@ namespace cont {
class DataSetBuilderExplicit class DataSetBuilderExplicit
{ {
template<typename T> template<typename T>
VTKM_CONT_EXPORT
static
void CopyInto(const std::vector<T>& input, void CopyInto(const std::vector<T>& input,
vtkm::cont::ArrayHandle<T>& output ) vtkm::cont::ArrayHandle<T>& output )
{ {
@ -52,6 +54,7 @@ public:
//Zoo explicit cell //Zoo explicit cell
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<T> &xVals, Create(const std::vector<T> &xVals,
const std::vector<T> &yVals, const std::vector<T> &yVals,
@ -63,13 +66,14 @@ public:
const std::string &cellNm="cells") const std::string &cellNm="cells")
{ {
std::vector<T> zVals(xVals.size(),0); std::vector<T> zVals(xVals.size(),0);
return Create(xVals,yVals,zVals, return DataSetBuilderExplicit::Create(xVals,yVals,zVals,
shapes,numIndices,connectivity, shapes,numIndices,connectivity,
dimensionality, coordsNm,cellNm); dimensionality, coordsNm,cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<T> &xVals, Create(const std::vector<T> &xVals,
const std::vector<T> &yVals, const std::vector<T> &yVals,
@ -83,6 +87,7 @@ public:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::cont::ArrayHandle<T> &xVals, Create(const vtkm::cont::ArrayHandle<T> &xVals,
const vtkm::cont::ArrayHandle<T> &yVals, const vtkm::cont::ArrayHandle<T> &yVals,
@ -94,14 +99,16 @@ public:
const std::string &coordsNm="coords", const std::string &coordsNm="coords",
const std::string &cellNm="cells") const std::string &cellNm="cells")
{ {
return BuildDataSet(xVals,yVals,zVals, return DataSetBuilderExplicit::BuildDataSet(
shapes,numIndices,connectivity, xVals,yVals,zVals,
dimensionality, coordsNm,cellNm); shapes,numIndices,connectivity,
dimensionality, coordsNm,cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<vtkm::Vec<T,3> > &coords, Create(const std::vector<vtkm::Vec<T,3> > &coords,
const std::vector<vtkm::UInt8> &shapes, const std::vector<vtkm::UInt8> &shapes,
@ -113,6 +120,7 @@ public:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords, Create(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords,
const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes, const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes,
@ -122,12 +130,18 @@ public:
const std::string &coordsNm="coords", const std::string &coordsNm="coords",
const std::string &cellNm="cells") const std::string &cellNm="cells")
{ {
return BuildDataSet(coords, shapes, numIndices, connectivity, return DataSetBuilderExplicit::BuildDataSet(coords,
dimensionality, coordsNm, cellNm); shapes,
numIndices,
connectivity,
dimensionality,
coordsNm,
cellNm);
} }
template<typename T, typename CellShapeTag> template<typename T, typename CellShapeTag>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<vtkm::Vec<T,3> > &coords, Create(const std::vector<vtkm::Vec<T,3> > &coords,
CellShapeTag tag, CellShapeTag tag,
@ -137,6 +151,7 @@ public:
template<typename T, typename CellShapeTag> template<typename T, typename CellShapeTag>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords, Create(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords,
CellShapeTag tag, CellShapeTag tag,
@ -144,11 +159,16 @@ public:
const std::string &coordsNm="coords", const std::string &coordsNm="coords",
const std::string &cellNm="cells") const std::string &cellNm="cells")
{ {
return BuildDataSet(coords, tag, connectivity, coordsNm, cellNm); return DataSetBuilderExplicit::BuildDataSet(coords,
tag,
connectivity,
coordsNm,
cellNm);
} }
private: private:
template<typename T> template<typename T>
static
vtkm::cont::DataSet vtkm::cont::DataSet
BuildDataSet(const vtkm::cont::ArrayHandle<T> &X, BuildDataSet(const vtkm::cont::ArrayHandle<T> &X,
const vtkm::cont::ArrayHandle<T> &Y, const vtkm::cont::ArrayHandle<T> &Y,
@ -162,6 +182,7 @@ private:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
BuildDataSet(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords, BuildDataSet(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords,
const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes, const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes,
@ -173,6 +194,7 @@ private:
template<typename T, typename CellShapeTag> template<typename T, typename CellShapeTag>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
BuildDataSet(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords, BuildDataSet(const vtkm::cont::ArrayHandle<vtkm::Vec<T,3> > &coords,
CellShapeTag tag, CellShapeTag tag,
@ -198,31 +220,33 @@ DataSetBuilderExplicit::Create(const std::vector<T> &xVals,
xVals.size() > 0); xVals.size() > 0);
vtkm::cont::ArrayHandle<T> Xc, Yc, Zc; vtkm::cont::ArrayHandle<T> Xc, Yc, Zc;
this->CopyInto(xVals, Xc); DataSetBuilderExplicit::CopyInto(xVals, Xc);
this->CopyInto(yVals, Yc); DataSetBuilderExplicit::CopyInto(yVals, Yc);
this->CopyInto(zVals, Zc); DataSetBuilderExplicit::CopyInto(zVals, Zc);
vtkm::cont::ArrayHandle<vtkm::UInt8> Sc; vtkm::cont::ArrayHandle<vtkm::UInt8> Sc;
vtkm::cont::ArrayHandle<vtkm::IdComponent> Nc; vtkm::cont::ArrayHandle<vtkm::IdComponent> Nc;
vtkm::cont::ArrayHandle<vtkm::Id> Cc; vtkm::cont::ArrayHandle<vtkm::Id> Cc;
this->CopyInto(shapes, Sc); DataSetBuilderExplicit::CopyInto(shapes, Sc);
this->CopyInto(numIndices, Nc); DataSetBuilderExplicit::CopyInto(numIndices, Nc);
this->CopyInto(connectivity, Cc); DataSetBuilderExplicit::CopyInto(connectivity, Cc);
return BuildDataSet(Xc,Yc,Zc, Sc,Nc,Cc, dimensionality, coordsNm, cellNm); return DataSetBuilderExplicit::BuildDataSet(
Xc,Yc,Zc, Sc,Nc,Cc, dimensionality, coordsNm, cellNm);
} }
template<typename T> template<typename T>
vtkm::cont::DataSet vtkm::cont::DataSet
DataSetBuilderExplicit::BuildDataSet(const vtkm::cont::ArrayHandle<T> &X, DataSetBuilderExplicit::BuildDataSet(
const vtkm::cont::ArrayHandle<T> &Y, const vtkm::cont::ArrayHandle<T> &X,
const vtkm::cont::ArrayHandle<T> &Z, const vtkm::cont::ArrayHandle<T> &Y,
const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes, const vtkm::cont::ArrayHandle<T> &Z,
const vtkm::cont::ArrayHandle<vtkm::IdComponent> &numIndices, const vtkm::cont::ArrayHandle<vtkm::UInt8> &shapes,
const vtkm::cont::ArrayHandle<vtkm::Id> &connectivity, const vtkm::cont::ArrayHandle<vtkm::IdComponent> &numIndices,
int dimensionality, const vtkm::cont::ArrayHandle<vtkm::Id> &connectivity,
const std::string &coordsNm, int dimensionality,
const std::string &cellNm) const std::string &coordsNm,
const std::string &cellNm)
{ {
VTKM_ASSERT_CONT(X.GetNumberOfValues() == Y.GetNumberOfValues() && VTKM_ASSERT_CONT(X.GetNumberOfValues() == Y.GetNumberOfValues() &&
Y.GetNumberOfValues() == Z.GetNumberOfValues() && Y.GetNumberOfValues() == Z.GetNumberOfValues() &&
@ -253,16 +277,17 @@ DataSetBuilderExplicit::Create(const std::vector<vtkm::Vec<T,3> > &coords,
const std::string &cellNm) const std::string &cellNm)
{ {
vtkm::cont::ArrayHandle<Vec<T,3> > coordsArray; vtkm::cont::ArrayHandle<Vec<T,3> > coordsArray;
CopyInto(coords, coordsArray); DataSetBuilderExplicit::CopyInto(coords, coordsArray);
vtkm::cont::ArrayHandle<vtkm::UInt8> Sc; vtkm::cont::ArrayHandle<vtkm::UInt8> Sc;
vtkm::cont::ArrayHandle<vtkm::IdComponent> Nc; vtkm::cont::ArrayHandle<vtkm::IdComponent> Nc;
vtkm::cont::ArrayHandle<vtkm::Id> Cc; vtkm::cont::ArrayHandle<vtkm::Id> Cc;
this->CopyInto(shapes, Sc); DataSetBuilderExplicit::CopyInto(shapes, Sc);
this->CopyInto(numIndices, Nc); DataSetBuilderExplicit::CopyInto(numIndices, Nc);
this->CopyInto(connectivity, Cc); DataSetBuilderExplicit::CopyInto(connectivity, Cc);
return Create(coordsArray, Sc, Nc, Cc, dimensionality, coordsNm, cellNm); return DataSetBuilderExplicit::Create(
coordsArray, Sc, Nc, Cc, dimensionality, coordsNm, cellNm);
} }
template<typename T> template<typename T>
@ -298,12 +323,12 @@ DataSetBuilderExplicit::Create(const std::vector<vtkm::Vec<T,3> > &coords,
const std::string &cellNm) const std::string &cellNm)
{ {
vtkm::cont::ArrayHandle<Vec<T,3> > coordsArray; vtkm::cont::ArrayHandle<Vec<T,3> > coordsArray;
this->CopyInto(coords, coordsArray); DataSetBuilderExplicit::CopyInto(coords, coordsArray);
vtkm::cont::ArrayHandle<vtkm::Id> Cc; vtkm::cont::ArrayHandle<vtkm::Id> Cc;
this->CopyInto(connectivity, Cc); DataSetBuilderExplicit::CopyInto(connectivity, Cc);
return Create(coordsArray, tag, Cc, coordsNm, cellNm); return DataSetBuilderExplicit::Create(coordsArray, tag, Cc, coordsNm, cellNm);
} }
template<typename T, typename CellShapeTag> template<typename T, typename CellShapeTag>

@ -32,6 +32,8 @@ namespace cont {
class DataSetBuilderRectilinear class DataSetBuilderRectilinear
{ {
template<typename T, typename U> template<typename T, typename U>
VTKM_CONT_EXPORT
static
void CopyInto(const std::vector<T>& input, void CopyInto(const std::vector<T>& input,
vtkm::cont::ArrayHandle<U>& output ) vtkm::cont::ArrayHandle<U>& output )
{ {
@ -41,6 +43,8 @@ class DataSetBuilderRectilinear
} }
template<typename T, typename U> template<typename T, typename U>
VTKM_CONT_EXPORT
static
void CopyInto(const vtkm::cont::ArrayHandle<T>& input, void CopyInto(const vtkm::cont::ArrayHandle<T>& input,
vtkm::cont::ArrayHandle<U>& output ) vtkm::cont::ArrayHandle<U>& output )
{ {
@ -51,6 +55,8 @@ class DataSetBuilderRectilinear
} }
template<typename T, typename U> template<typename T, typename U>
VTKM_CONT_EXPORT
static
void CopyInto(const T* input, vtkm::Id len, void CopyInto(const T* input, vtkm::Id len,
vtkm::cont::ArrayHandle<U>& output ) vtkm::cont::ArrayHandle<U>& output )
{ {
@ -65,45 +71,52 @@ public:
//2D grids. //2D grids.
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(vtkm::Id nx, vtkm::Id ny, Create(vtkm::Id nx, vtkm::Id ny,
T *xvals, T *yvals, T *xvals, T *yvals,
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
T zvals = 0; T zvals = 0;
return Create(2, nx,ny, 1, xvals, yvals, &zvals, coordNm, cellNm); return DataSetBuilderRectilinear::Create(
2, nx,ny, 1, xvals, yvals, &zvals, coordNm, cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(int dim, vtkm::Id nx, vtkm::Id ny, vtkm::Id nz, Create(int dim, vtkm::Id nx, vtkm::Id ny, vtkm::Id nz,
T *xvals, T *yvals, T *zvals, T *xvals, T *yvals, T *zvals,
std::string coordNm, std::string cellNm) std::string coordNm, std::string cellNm)
{ {
VTKM_ASSERT_CONT(nx>1 && ny>1 && VTKM_ASSERT_CONT(nx>1 && ny>1 &&
((dim==2 && nz==1)||(dim==3 && nz>=1))); ((dim==2 && nz==1)||(dim==3 && nz>=1)));
vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc; vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc;
CopyInto(xvals,nx,Xc); DataSetBuilderRectilinear::CopyInto(xvals,nx,Xc);
CopyInto(yvals,ny,Yc); DataSetBuilderRectilinear::CopyInto(yvals,ny,Yc);
CopyInto(zvals,nz,Zc); DataSetBuilderRectilinear::CopyInto(zvals,nz,Zc);
return BuildDataSet(dim, Xc,Yc,Zc, coordNm, cellNm); return DataSetBuilderRectilinear::BuildDataSet(
dim, Xc,Yc,Zc, coordNm, cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<T> &xvals, const std::vector<T> &yvals, Create(const std::vector<T> &xvals, const std::vector<T> &yvals,
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
std::vector<T> zvals(1,0); std::vector<T> zvals(1,0);
return BuildDataSet(2, xvals,yvals,zvals, coordNm,cellNm); return DataSetBuilderRectilinear::BuildDataSet(
2, xvals,yvals,zvals, coordNm,cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::cont::ArrayHandle<T> &xvals, Create(const vtkm::cont::ArrayHandle<T> &xvals,
const vtkm::cont::ArrayHandle<T> &yvals, const vtkm::cont::ArrayHandle<T> &yvals,
@ -114,33 +127,39 @@ public:
vtkm::cont::ArrayHandle<T> zvals; vtkm::cont::ArrayHandle<T> zvals;
zvals.Allocate(1); zvals.Allocate(1);
zvals.GetPortalControl().Set(0,0.0); zvals.GetPortalControl().Set(0,0.0);
return BuildDataSet(2, xvals,yvals,zvals, coordNm, cellNm); return DataSetBuilderRectilinear::BuildDataSet(
2, xvals,yvals,zvals, coordNm, cellNm);
} }
//3D grids. //3D grids.
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(vtkm::Id nx, vtkm::Id ny, vtkm::Id nz, Create(vtkm::Id nx, vtkm::Id ny, vtkm::Id nz,
T *xvals, T *yvals, T *zvals, T *xvals, T *yvals, T *zvals,
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
return Create(3, nx,ny,nz, xvals, yvals, zvals, coordNm, cellNm); return DataSetBuilderRectilinear::Create(
3, nx,ny,nz, xvals, yvals, zvals, coordNm, cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const std::vector<T> &xvals, Create(const std::vector<T> &xvals,
const std::vector<T> &yvals, const std::vector<T> &yvals,
const std::vector<T> &zvals, const std::vector<T> &zvals,
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
return BuildDataSet(3, xvals, yvals, zvals, coordNm, cellNm); return DataSetBuilderRectilinear::BuildDataSet(
3, xvals, yvals, zvals, coordNm, cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::cont::ArrayHandle<T> &xvals, Create(const vtkm::cont::ArrayHandle<T> &xvals,
const vtkm::cont::ArrayHandle<T> &yvals, const vtkm::cont::ArrayHandle<T> &yvals,
@ -150,12 +169,14 @@ public:
VTKM_ASSERT_CONT(xvals.GetNumberOfValues()>1 && VTKM_ASSERT_CONT(xvals.GetNumberOfValues()>1 &&
yvals.GetNumberOfValues()>1 && yvals.GetNumberOfValues()>1 &&
zvals.GetNumberOfValues()>1); zvals.GetNumberOfValues()>1);
return BuildDataSet(3, xvals,yvals,zvals, coordNm, cellNm); return DataSetBuilderRectilinear::BuildDataSet(
3, xvals,yvals,zvals, coordNm, cellNm);
} }
private: private:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
BuildDataSet(int dim, BuildDataSet(int dim,
const std::vector<T> &xvals, const std::vector<T> &xvals,
@ -164,18 +185,20 @@ private:
std::string coordNm, std::string cellNm) std::string coordNm, std::string cellNm)
{ {
VTKM_ASSERT_CONT(xvals.size()>1 && yvals.size()>1 && VTKM_ASSERT_CONT(xvals.size()>1 && yvals.size()>1 &&
((dim==2 && zvals.size()==1)||(dim==3 && zvals.size()>=1))); ((dim==2 && zvals.size()==1)||(dim==3 && zvals.size()>=1)));
vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc; vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc;
this->CopyInto(xvals, Xc); DataSetBuilderRectilinear::CopyInto(xvals, Xc);
this->CopyInto(yvals, Yc); DataSetBuilderRectilinear::CopyInto(yvals, Yc);
this->CopyInto(zvals, Zc); DataSetBuilderRectilinear::CopyInto(zvals, Zc);
return BuildDataSet(dim, Xc,Yc,Zc, coordNm, cellNm); return DataSetBuilderRectilinear::BuildDataSet(
dim, Xc,Yc,Zc, coordNm, cellNm);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
BuildDataSet(int dim, BuildDataSet(int dim,
const vtkm::cont::ArrayHandle<T> &X, const vtkm::cont::ArrayHandle<T> &X,
@ -192,9 +215,9 @@ private:
vtkm::cont::ArrayHandle<vtkm::FloatDefault> > coords; vtkm::cont::ArrayHandle<vtkm::FloatDefault> > coords;
vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc; vtkm::cont::ArrayHandle<vtkm::FloatDefault> Xc, Yc, Zc;
this->CopyInto(X, Xc); DataSetBuilderRectilinear::CopyInto(X, Xc);
this->CopyInto(Y, Yc); DataSetBuilderRectilinear::CopyInto(Y, Yc);
this->CopyInto(Z, Zc); DataSetBuilderRectilinear::CopyInto(Z, Zc);
coords = vtkm::cont::make_ArrayHandleCartesianProduct(Xc,Yc,Zc); coords = vtkm::cont::make_ArrayHandleCartesianProduct(Xc,Yc,Zc);
vtkm::cont::CoordinateSystem cs(coordNm, 1, coords); vtkm::cont::CoordinateSystem cs(coordNm, 1, coords);

@ -35,36 +35,41 @@ public:
//2D uniform grids. //2D uniform grids.
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::Id2 &dimensions, Create(const vtkm::Id2 &dimensions,
const vtkm::Vec<vtkm::FloatDefault,2> &origin = vtkm::Vec<vtkm::FloatDefault,2>(0.0f), const vtkm::Vec<vtkm::FloatDefault,2> &origin = vtkm::Vec<vtkm::FloatDefault,2>(0.0f),
const vtkm::Vec<vtkm::FloatDefault,2> &spacing = vtkm::Vec<vtkm::FloatDefault,2>(1.0f), const vtkm::Vec<vtkm::FloatDefault,2> &spacing = vtkm::Vec<vtkm::FloatDefault,2>(1.0f),
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
return CreateDS(2, return DataSetBuilderUniform::CreateDS(2,
dimensions[0],dimensions[1],1, origin[0],origin[1],0.0f, dimensions[0],dimensions[1],1,
spacing[0],spacing[1],1.0f, origin[0],origin[1],0.0f,
coordNm, cellNm); spacing[0],spacing[1],1.0f,
coordNm, cellNm);
} }
//3D uniform grids. //3D uniform grids.
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
Create(const vtkm::Id3 &dimensions, Create(const vtkm::Id3 &dimensions,
const vtkm::Vec<vtkm::FloatDefault,3> &origin = vtkm::Vec<vtkm::FloatDefault,3>(0.0f), const vtkm::Vec<vtkm::FloatDefault,3> &origin = vtkm::Vec<vtkm::FloatDefault,3>(0.0f),
const vtkm::Vec<vtkm::FloatDefault,3> &spacing = vtkm::Vec<vtkm::FloatDefault,3>(1.0f), const vtkm::Vec<vtkm::FloatDefault,3> &spacing = vtkm::Vec<vtkm::FloatDefault,3>(1.0f),
std::string coordNm="coords", std::string cellNm="cells") std::string coordNm="coords", std::string cellNm="cells")
{ {
return CreateDS(3, return DataSetBuilderUniform::CreateDS(
dimensions[0],dimensions[1],dimensions[2], 3,
origin[0],origin[1],origin[2], dimensions[0],dimensions[1],dimensions[2],
spacing[0],spacing[1],spacing[2], origin[0],origin[1],origin[2],
coordNm, cellNm); spacing[0],spacing[1],spacing[2],
coordNm, cellNm);
} }
private: private:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
vtkm::cont::DataSet vtkm::cont::DataSet
CreateDS(int dim, vtkm::Id nx, vtkm::Id ny, vtkm::Id nz, CreateDS(int dim, vtkm::Id nx, vtkm::Id ny, vtkm::Id nz,
T originX, T originY, T originZ, T originX, T originY, T originZ,

@ -34,11 +34,22 @@ public:
DataSetFieldAdd() {} DataSetFieldAdd() {}
//Point centered fields. //Point centered fields.
template <typename T, typename Storage>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddPointField(vtkm::cont::DataSet &dataSet, void AddPointField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
vtkm::cont::ArrayHandle<T, Storage> &field) const vtkm::cont::DynamicArrayHandle &field)
{
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_POINTS,
field));
}
template <typename T, typename Storage>
VTKM_CONT_EXPORT
static
void AddPointField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName,
const vtkm::cont::ArrayHandle<T, Storage> &field)
{ {
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_POINTS, dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_POINTS,
field)); field));
@ -46,6 +57,7 @@ public:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddPointField(vtkm::cont::DataSet &dataSet, void AddPointField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const std::vector<T> &field) const std::vector<T> &field)
@ -53,9 +65,10 @@ public:
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_POINTS, dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_POINTS,
field)); field));
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddPointField(vtkm::cont::DataSet &dataSet, void AddPointField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const T *field, const vtkm::Id &n) const T *field, const vtkm::Id &n)
@ -65,11 +78,23 @@ public:
} }
//Cell centered field //Cell centered field
template <typename T, typename Storage>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
vtkm::cont::ArrayHandle<T, Storage> &field, const vtkm::cont::DynamicArrayHandle &field,
const std::string &cellSetName)
{
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_CELL_SET,
cellSetName, field));
}
template <typename T, typename Storage>
VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName,
const vtkm::cont::ArrayHandle<T, Storage> &field,
const std::string &cellSetName) const std::string &cellSetName)
{ {
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_CELL_SET, dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_CELL_SET,
@ -78,6 +103,7 @@ public:
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const std::vector<T> &field, const std::vector<T> &field,
@ -86,9 +112,10 @@ public:
dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_CELL_SET, dataSet.AddField(Field(fieldName, 1, vtkm::cont::Field::ASSOC_CELL_SET,
cellSetName, field)); cellSetName, field));
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const T *field, const vtkm::Id &n, const T *field, const vtkm::Id &n,
@ -98,19 +125,32 @@ public:
cellSetName, field, n)); cellSetName, field, n));
} }
template <typename T, typename Storage>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
vtkm::cont::ArrayHandle<T, Storage> &field, const vtkm::cont::DynamicArrayHandle &field,
vtkm::Id cellSetIndex = 0) vtkm::Id cellSetIndex = 0)
{ {
std::string cellSetName = std::string cellSetName =
dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName(); dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName();
this->AddCellField(dataSet, fieldName, field, cellSetName); DataSetFieldAdd::AddCellField(dataSet, fieldName, field, cellSetName);
}
template <typename T, typename Storage>
VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName,
const vtkm::cont::ArrayHandle<T, Storage> &field,
vtkm::Id cellSetIndex = 0)
{
std::string cellSetName =
dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName();
DataSetFieldAdd::AddCellField(dataSet, fieldName, field, cellSetName);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const std::vector<T> &field, const std::vector<T> &field,
@ -118,11 +158,12 @@ public:
{ {
std::string cellSetName = std::string cellSetName =
dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName(); dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName();
this->AddCellField(dataSet, fieldName, field, cellSetName); DataSetFieldAdd::AddCellField(dataSet, fieldName, field, cellSetName);
} }
template<typename T> template<typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
static
void AddCellField(vtkm::cont::DataSet &dataSet, void AddCellField(vtkm::cont::DataSet &dataSet,
const std::string &fieldName, const std::string &fieldName,
const T *field, const vtkm::Id &n, const T *field, const vtkm::Id &n,
@ -130,7 +171,7 @@ public:
{ {
std::string cellSetName = std::string cellSetName =
dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName(); dataSet.GetCellSet(cellSetIndex).GetCellSet().GetName();
this->AddCellField(dataSet, fieldName, field, n, cellSetName); DataSetFieldAdd::AddCellField(dataSet, fieldName, field, n, cellSetName);
} }

@ -158,10 +158,10 @@ private:
// Special implementation for regular point coordinates, which are easy // Special implementation for regular point coordinates, which are easy
// to determine. // to determine.
void operator()(vtkm::cont::ArrayHandle< void operator()(const vtkm::cont::ArrayHandle<
vtkm::Vec<vtkm::FloatDefault,3>, vtkm::Vec<vtkm::FloatDefault,3>,
vtkm::cont::ArrayHandleUniformPointCoordinates::StorageTag> vtkm::cont::ArrayHandleUniformPointCoordinates::StorageTag>
array) &array)
{ {
vtkm::internal::ArrayPortalUniformPointCoordinates portal = vtkm::internal::ArrayPortalUniformPointCoordinates portal =
array.GetPortalConstControl(); array.GetPortalConstControl();
@ -327,32 +327,13 @@ public:
this->CopyData(data, nvals); this->CopyData(data, nvals);
} }
template<typename T>
VTKM_CONT_EXPORT
Field(std::string name,
vtkm::IdComponent order,
AssociationEnum association,
T)
: Name(name),
Order(order),
Association(association),
AssocCellSetName(),
AssocLogicalDim(-1),
Data(vtkm::cont::ArrayHandle<T>()),
Bounds(),
ModifiedFlag(true)
{
VTKM_ASSERT_CONT((this->Association == ASSOC_WHOLE_MESH) ||
(this->Association == ASSOC_POINTS));
}
/// constructors for cell set associations /// constructors for cell set associations
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
Field(std::string name, Field(std::string name,
vtkm::IdComponent order, vtkm::IdComponent order,
AssociationEnum association, AssociationEnum association,
const std::string& cellSetName, const std::string& cellSetName,
vtkm::cont::DynamicArrayHandle &data) const vtkm::cont::DynamicArrayHandle &data)
: Name(name), : Name(name),
Order(order), Order(order),
Association(association), Association(association),
@ -371,7 +352,7 @@ public:
vtkm::IdComponent order, vtkm::IdComponent order,
AssociationEnum association, AssociationEnum association,
const std::string& cellSetName, const std::string& cellSetName,
vtkm::cont::ArrayHandle<T, Storage> &data) const vtkm::cont::ArrayHandle<T, Storage> &data)
: Name(name), : Name(name),
Order(order), Order(order),
Association(association), Association(association),
@ -423,32 +404,13 @@ public:
this->CopyData(data, nvals); this->CopyData(data, nvals);
} }
template<typename T>
VTKM_CONT_EXPORT
Field(std::string name,
vtkm::IdComponent order,
AssociationEnum association,
const std::string& cellSetName,
T)
: Name(name),
Order(order),
Association(association),
AssocCellSetName(cellSetName),
AssocLogicalDim(-1),
Data(vtkm::cont::ArrayHandle<T>()),
Bounds(),
ModifiedFlag(true)
{
VTKM_ASSERT_CONT(this->Association == ASSOC_CELL_SET);
}
/// constructors for logical dimension associations /// constructors for logical dimension associations
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
Field(std::string name, Field(std::string name,
vtkm::IdComponent order, vtkm::IdComponent order,
AssociationEnum association, AssociationEnum association,
vtkm::IdComponent logicalDim, vtkm::IdComponent logicalDim,
vtkm::cont::DynamicArrayHandle &data) const vtkm::cont::DynamicArrayHandle &data)
: Name(name), : Name(name),
Order(order), Order(order),
Association(association), Association(association),
@ -467,7 +429,7 @@ public:
vtkm::IdComponent order, vtkm::IdComponent order,
AssociationEnum association, AssociationEnum association,
vtkm::IdComponent logicalDim, vtkm::IdComponent logicalDim,
vtkm::cont::ArrayHandle<T, Storage> &data) const vtkm::cont::ArrayHandle<T, Storage> &data)
: Name(name), : Name(name),
Order(order), Order(order),
Association(association), Association(association),
@ -515,25 +477,6 @@ public:
CopyData(data, nvals); CopyData(data, nvals);
} }
template<typename T>
VTKM_CONT_EXPORT
Field(std::string name,
vtkm::IdComponent order,
AssociationEnum association,
vtkm::IdComponent logicalDim,
T)
: Name(name),
Order(order),
Association(association),
AssocCellSetName(),
AssocLogicalDim(logicalDim),
Data(vtkm::cont::ArrayHandle<T>()),
Bounds(),
ModifiedFlag(true)
{
VTKM_ASSERT_CONT(this->Association == ASSOC_LOGICAL_DIM);
}
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
Field() Field()
: Name(), : Name(),
@ -659,7 +602,14 @@ public:
template <typename T> template <typename T>
VTKM_CONT_EXPORT VTKM_CONT_EXPORT
void SetData(vtkm::cont::ArrayHandle<T> &newdata) void SetData(const vtkm::cont::ArrayHandle<T> &newdata)
{
this->Data = newdata;
this->ModifiedFlag = true;
}
VTKM_CONT_EXPORT
void SetData(const vtkm::cont::DynamicArrayHandle &newdata)
{ {
this->Data = newdata; this->Data = newdata;
this->ModifiedFlag = true; this->ModifiedFlag = true;

@ -84,8 +84,7 @@ inline vtkm::cont::DataSet make_SingleTypeDataSet()
const int nVerts = 5; const int nVerts = 5;
vtkm::Float32 vars[nVerts] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f}; vtkm::Float32 vars[nVerts] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f};
vtkm::cont::DataSetFieldAdd fieldAdder; vtkm::cont::DataSetFieldAdd::AddPointField(ds, "pointvar", vars, nVerts);
fieldAdder.AddPointField(ds, "pointvar", vars, nVerts);
return ds; return ds;
} }

@ -37,26 +37,20 @@ void TestCellAverageUniform3D()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0();
vtkm::cont::Field result("avgvals", vtkm::cont::ArrayHandle<vtkm::Float32> result;
1,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher; vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher;
dispatcher.Invoke(dataSet.GetField("pointvar").GetData(), dispatcher.Invoke(dataSet.GetField("pointvar").GetData(),
dataSet.GetCellSet(), dataSet.GetCellSet(),
result.GetData()); result);
vtkm::cont::ArrayHandle<vtkm::Float32> resultArrayHandle;
result.GetData().CopyTo(resultArrayHandle);
vtkm::Float32 expected[4] = { 60.1875f, 70.2125f, 120.3375f, 130.3625f }; vtkm::Float32 expected[4] = { 60.1875f, 70.2125f, 120.3375f, 130.3625f };
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
{ {
VTKM_TEST_ASSERT(test_equal(resultArrayHandle.GetPortalConstControl().Get(i), VTKM_TEST_ASSERT(
expected[i]), "Wrong result for CellAverage worklet on 3D uniform data"); test_equal(result.GetPortalConstControl().Get(i), expected[i]),
} "Wrong result for CellAverage worklet on 3D uniform data");
}
} }
void TestCellAverageUniform2D() void TestCellAverageUniform2D()
@ -66,26 +60,20 @@ void TestCellAverageUniform2D()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0();
vtkm::cont::Field result("avgvals", vtkm::cont::ArrayHandle<vtkm::Float32> result;
1,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher; vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher;
dispatcher.Invoke(dataSet.GetField("pointvar").GetData(), dispatcher.Invoke(dataSet.GetField("pointvar").GetData(),
dataSet.GetCellSet(), dataSet.GetCellSet(),
result.GetData()); result);
vtkm::cont::ArrayHandle<vtkm::Float32> resultArrayHandle;
result.GetData().CopyTo(resultArrayHandle);
vtkm::Float32 expected[2] = { 30.1f, 40.1f }; vtkm::Float32 expected[2] = { 30.1f, 40.1f };
for (int i = 0; i < 2; ++i) for (int i = 0; i < 2; ++i)
{ {
VTKM_TEST_ASSERT(test_equal(resultArrayHandle.GetPortalConstControl().Get(i), VTKM_TEST_ASSERT(
expected[i]), "Wrong result for CellAverage worklet on 2D uniform data"); test_equal(result.GetPortalConstControl().Get(i), expected[i]),
} "Wrong result for CellAverage worklet on 2D uniform data");
}
} }
void TestCellAverageExplicit() void TestCellAverageExplicit()
@ -95,26 +83,20 @@ void TestCellAverageExplicit()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0();
vtkm::cont::Field result("avgvals", vtkm::cont::ArrayHandle<vtkm::Float32> result;
1,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher; vtkm::worklet::DispatcherMapTopology<vtkm::worklet::CellAverage> dispatcher;
dispatcher.Invoke(dataSet.GetField("pointvar").GetData(), dispatcher.Invoke(dataSet.GetField("pointvar").GetData(),
dataSet.GetCellSet(), dataSet.GetCellSet(),
result.GetData()); result);
vtkm::cont::ArrayHandle<vtkm::Float32> resultArrayHandle;
result.GetData().CopyTo(resultArrayHandle);
vtkm::Float32 expected[2] = { 20.1333f, 35.2f }; vtkm::Float32 expected[2] = { 20.1333f, 35.2f };
for (int i = 0; i < 2; ++i) for (int i = 0; i < 2; ++i)
{ {
VTKM_TEST_ASSERT(test_equal(resultArrayHandle.GetPortalConstControl().Get(i), VTKM_TEST_ASSERT(
expected[i]), "Wrong result for CellAverage worklet on 3D explicit data"); test_equal(result.GetPortalConstControl().Get(i), expected[i]),
} "Wrong result for CellAverage worklet on 3D explicit data");
}
} }

@ -81,8 +81,7 @@ void TestPointElevation()
vtkm::cont::DataSet dataSet = MakePointElevationTestDataSet(); vtkm::cont::DataSet dataSet = MakePointElevationTestDataSet();
dataSet.AddField(vtkm::cont::Field("elevation", 1, vtkm::cont::Field::ASSOC_POINTS, vtkm::cont::ArrayHandle<vtkm::Float32> result;
vtkm::Float32()));
vtkm::worklet::PointElevation pointElevationWorklet; vtkm::worklet::PointElevation pointElevationWorklet;
pointElevationWorklet.SetLowPoint(vtkm::make_Vec<vtkm::Float64>(0.0, 0.0, 0.0)); pointElevationWorklet.SetLowPoint(vtkm::make_Vec<vtkm::Float64>(0.0, 0.0, 0.0));
@ -92,18 +91,17 @@ void TestPointElevation()
vtkm::worklet::DispatcherMapField<vtkm::worklet::PointElevation> vtkm::worklet::DispatcherMapField<vtkm::worklet::PointElevation>
dispatcher(pointElevationWorklet); dispatcher(pointElevationWorklet);
dispatcher.Invoke(dataSet.GetCoordinateSystem().GetData(), dispatcher.Invoke(dataSet.GetCoordinateSystem().GetData(),
dataSet.GetField("elevation").GetData()); result);
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float32,3> > coordinates; vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float32,3> > coordinates;
dataSet.GetCoordinateSystem().GetData().CopyTo(coordinates); dataSet.GetCoordinateSystem().GetData().CopyTo(coordinates);
vtkm::cont::ArrayHandle<vtkm::Float32> result;
dataSet.GetField("elevation").GetData().CopyTo(result);
for (vtkm::Id i = 0; i < result.GetNumberOfValues(); ++i) for (vtkm::Id i = 0; i < result.GetNumberOfValues(); ++i)
{ {
VTKM_TEST_ASSERT(test_equal(coordinates.GetPortalConstControl().Get(i)[1] * 2.0, VTKM_TEST_ASSERT(
result.GetPortalConstControl().Get(i)), test_equal(coordinates.GetPortalConstControl().Get(i)[1] * 2.0,
"Wrong result for PointElevation worklet"); result.GetPortalConstControl().Get(i)),
"Wrong result for PointElevation worklet");
} }
} }

@ -150,35 +150,19 @@ TestMaxPointOrCell()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0();
//Run a worklet to populate a cell centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outcellvar",
0,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(dataSet.GetNumberOfCellSets() == 1,
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(dataSet.GetNumberOfFields() == 3,
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_explicit::MaxPointOrCellValue > vtkm::worklet::DispatcherMapTopology< ::test_explicit::MaxPointOrCellValue >
dispatcher; dispatcher;
dispatcher.Invoke(dataSet.GetField("cellvar").GetData(), dispatcher.Invoke(dataSet.GetField("cellvar").GetData(),
dataSet.GetField("pointvar").GetData(), dataSet.GetField("pointvar").GetData(),
dataSet.GetCellSet(0), dataSet.GetCellSet(0),
dataSet.GetField("outcellvar").GetData()); result);
//Make sure we got the right answer. //Make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res; VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 100.1f),
dataSet.GetField("outcellvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 100.1f),
"Wrong result for PointToCellMax worklet"); "Wrong result for PointToCellMax worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 100.2f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 100.2f),
"Wrong result for PointToCellMax worklet"); "Wrong result for PointToCellMax worklet");
} }
@ -190,34 +174,17 @@ TestAvgPointToCell()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet0();
//Run a worklet to populate a cell centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outcellvar",
0,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(dataSet.GetNumberOfCellSets() == 1,
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(dataSet.GetNumberOfFields() == 3,
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_explicit::AveragePointToCellValue > dispatcher; vtkm::worklet::DispatcherMapTopology< ::test_explicit::AveragePointToCellValue > dispatcher;
dispatcher.Invoke(dataSet.GetField("pointvar").GetData(), dispatcher.Invoke(dataSet.GetField("pointvar").GetData(),
dataSet.GetCellSet(), dataSet.GetCellSet(),
dataSet.GetField("outcellvar").GetData()); result);
//make sure we got the right answer. //make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res; VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 20.1333f),
dataSet.GetField("outcellvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 20.1333f),
"Wrong result for PointToCellAverage worklet"); "Wrong result for PointToCellAverage worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 35.2f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 35.2f),
"Wrong result for PointToCellAverage worklet"); "Wrong result for PointToCellAverage worklet");
} }
@ -229,34 +196,18 @@ TestAvgCellToPoint()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet1(); vtkm::cont::DataSet dataSet = testDataSet.Make3DExplicitDataSet1();
//Run a worklet to populate a point centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outpointvar",
1,
vtkm::cont::Field::ASSOC_POINTS,
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(dataSet.GetNumberOfCellSets() == 1,
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(dataSet.GetNumberOfFields() == 3,
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_explicit::AverageCellToPointValue > dispatcher; vtkm::worklet::DispatcherMapTopology< ::test_explicit::AverageCellToPointValue > dispatcher;
dispatcher.Invoke(dataSet.GetField("cellvar").GetData(), dispatcher.Invoke(dataSet.GetField("cellvar").GetData(),
dataSet.GetCellSet(), dataSet.GetCellSet(),
dataSet.GetField("outpointvar").GetData()); result);
//make sure we got the right answer. //make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res; VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 100.1f),
dataSet.GetField("outpointvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 100.1f),
"Wrong result for CellToPointAverage worklet"); "Wrong result for CellToPointAverage worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 100.15f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 100.15f),
"Wrong result for CellToPointAverage worklet"); "Wrong result for CellToPointAverage worklet");
} }

@ -178,21 +178,8 @@ TestMaxPointOrCell()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0();
//Run a worklet to populate a cell centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outcellvar",
1,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfCellSets(), 1),
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfFields(), 3),
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_uniform::MaxPointOrCellValue > dispatcher; vtkm::worklet::DispatcherMapTopology< ::test_uniform::MaxPointOrCellValue > dispatcher;
dispatcher.Invoke(dataSet.GetField("cellvar").GetData(), dispatcher.Invoke(dataSet.GetField("cellvar").GetData(),
dataSet.GetField("pointvar").GetData(), dataSet.GetField("pointvar").GetData(),
@ -202,15 +189,13 @@ TestMaxPointOrCell()
// part more flexible. // part more flexible.
dataSet.GetCellSet(0).ResetCellSetList( dataSet.GetCellSet(0).ResetCellSetList(
vtkm::cont::CellSetListTagStructured2D()), vtkm::cont::CellSetListTagStructured2D()),
dataSet.GetField("outcellvar").GetData()); result);
//make sure we got the right answer. //make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res;
dataSet.GetField("outcellvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 100.1f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 100.1f),
"Wrong result for MaxPointOrCell worklet"); "Wrong result for MaxPointOrCell worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 200.1f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 200.1f),
"Wrong result for MaxPointOrCell worklet"); "Wrong result for MaxPointOrCell worklet");
} }
@ -221,21 +206,8 @@ TestAvgPointToCell()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0();
//Run a worklet to populate a cell centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outcellvar",
0,
vtkm::cont::Field::ASSOC_CELL_SET,
std::string("cells"),
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfCellSets(), 1),
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfFields(), 3),
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_uniform::AveragePointToCellValue > dispatcher; vtkm::worklet::DispatcherMapTopology< ::test_uniform::AveragePointToCellValue > dispatcher;
dispatcher.Invoke(dataSet.GetField("pointvar").GetData(), dispatcher.Invoke(dataSet.GetField("pointvar").GetData(),
// We know that the cell set is a structured 2D grid and // We know that the cell set is a structured 2D grid and
@ -244,15 +216,12 @@ TestAvgPointToCell()
// part more flexible. // part more flexible.
dataSet.GetCellSet(0).ResetCellSetList( dataSet.GetCellSet(0).ResetCellSetList(
vtkm::cont::CellSetListTagStructured2D()), vtkm::cont::CellSetListTagStructured2D()),
dataSet.GetField("outcellvar").GetData()); result);
//make sure we got the right answer. //make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res; VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 30.1f),
dataSet.GetField("outcellvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 30.1f),
"Wrong result for PointToCellAverage worklet"); "Wrong result for PointToCellAverage worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 40.1f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 40.1f),
"Wrong result for PointToCellAverage worklet"); "Wrong result for PointToCellAverage worklet");
} }
@ -264,20 +233,7 @@ TestAvgCellToPoint()
vtkm::cont::testing::MakeTestDataSet testDataSet; vtkm::cont::testing::MakeTestDataSet testDataSet;
vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0(); vtkm::cont::DataSet dataSet = testDataSet.Make2DUniformDataSet0();
//Run a worklet to populate a point centered field. vtkm::cont::ArrayHandle<vtkm::Float32> result;
//Here, we're filling it with test values.
vtkm::cont::Field f("outpointvar",
1,
vtkm::cont::Field::ASSOC_POINTS,
vtkm::Float32());
dataSet.AddField(f);
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfCellSets(), 1),
"Incorrect number of cell sets");
VTKM_TEST_ASSERT(test_equal(dataSet.GetNumberOfFields(), 3),
"Incorrect number of fields");
vtkm::worklet::DispatcherMapTopology< ::test_uniform::AverageCellToPointValue > dispatcher; vtkm::worklet::DispatcherMapTopology< ::test_uniform::AverageCellToPointValue > dispatcher;
dispatcher.Invoke(dataSet.GetField("cellvar").GetData(), dispatcher.Invoke(dataSet.GetField("cellvar").GetData(),
@ -287,15 +243,12 @@ TestAvgCellToPoint()
// part more flexible. // part more flexible.
dataSet.GetCellSet(0).ResetCellSetList( dataSet.GetCellSet(0).ResetCellSetList(
vtkm::cont::CellSetListTagStructured2D()), vtkm::cont::CellSetListTagStructured2D()),
dataSet.GetField("outpointvar").GetData()); result);
//make sure we got the right answer. //make sure we got the right answer.
vtkm::cont::ArrayHandle<vtkm::Float32> res; VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(0), 100.1f),
dataSet.GetField("outpointvar").GetData().CopyTo(res);
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(0), 100.1f),
"Wrong result for CellToPointAverage worklet"); "Wrong result for CellToPointAverage worklet");
VTKM_TEST_ASSERT(test_equal(res.GetPortalConstControl().Get(1), 150.1f), VTKM_TEST_ASSERT(test_equal(result.GetPortalConstControl().Get(1), 150.1f),
"Wrong result for CellToPointAverage worklet"); "Wrong result for CellToPointAverage worklet");
} }