Viskores  1.0
DataSetBuilderRectilinear.h
Go to the documentation of this file.
1 //============================================================================
2 // The contents of this file are covered by the Viskores license. See
3 // LICENSE.txt for details.
4 //
5 // By contributing to this file, all contributors agree to the Developer
6 // Certificate of Origin Version 1.1 (DCO 1.1) as stated in DCO.txt.
7 //============================================================================
8 
9 //============================================================================
10 // Copyright (c) Kitware, Inc.
11 // All rights reserved.
12 // See LICENSE.txt for details.
13 //
14 // This software is distributed WITHOUT ANY WARRANTY; without even
15 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 // PURPOSE. See the above copyright notice for more information.
17 //============================================================================
18 #ifndef viskores_cont_DataSetBuilderRectilinear_h
19 #define viskores_cont_DataSetBuilderRectilinear_h
20 
25 #include <viskores/cont/DataSet.h>
27 
28 namespace viskores
29 {
30 namespace cont
31 {
32 
33 class VISKORES_CONT_EXPORT DataSetBuilderRectilinear
34 {
35  template <typename T, typename U>
36  VISKORES_CONT static void CopyInto(const std::vector<T>& input,
38  {
41  }
42 
43  template <typename T, typename U>
46  {
47  viskores::cont::ArrayCopy(input, output);
48  }
49 
50  template <typename T, typename U>
51  VISKORES_CONT static void CopyInto(const T* input,
52  viskores::Id len,
54  {
57  }
58 
59 public:
62 
72  template <typename T>
73  VISKORES_CONT static viskores::cont::DataSet Create(const std::vector<T>& xvals,
74  const std::string& coordNm = "coords")
75  {
76  std::vector<T> yvals(1, 0), zvals(1, 0);
77  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
78  }
79 
90  template <typename T>
92  T* xvals,
93  const std::string& coordNm = "coords")
94  {
95  T yvals = 0, zvals = 0;
96  return DataSetBuilderRectilinear::BuildDataSet(nx, 1, 1, xvals, &yvals, &zvals, coordNm);
97  }
98 
109  template <typename T>
111  const std::string& coordNm = "coords")
112  {
113  viskores::cont::ArrayHandle<T> yvals, zvals;
114  yvals.Allocate(1);
115  yvals.WritePortal().Set(0, 0.0);
116  zvals.Allocate(1);
117  zvals.WritePortal().Set(0, 0.0);
118  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
119  }
120 
131  template <typename T>
132  VISKORES_CONT static viskores::cont::DataSet Create(const std::vector<T>& xvals,
133  const std::vector<T>& yvals,
134  const std::string& coordNm = "coords")
135  {
136  std::vector<T> zvals(1, 0);
137  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
138  }
139 
152  template <typename T>
154  viskores::Id ny,
155  T* xvals,
156  T* yvals,
157  const std::string& coordNm = "coords")
158  {
159  T zvals = 0;
160  return DataSetBuilderRectilinear::BuildDataSet(nx, ny, 1, xvals, yvals, &zvals, coordNm);
161  }
162 
174  template <typename T>
176  const viskores::cont::ArrayHandle<T>& yvals,
177  const std::string& coordNm = "coords")
178  {
180  zvals.Allocate(1);
181  zvals.WritePortal().Set(0, 0.0);
182  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
183  }
184 
199  template <typename T>
201  viskores::Id ny,
202  viskores::Id nz,
203  T* xvals,
204  T* yvals,
205  T* zvals,
206  const std::string& coordNm = "coords")
207  {
208  return DataSetBuilderRectilinear::BuildDataSet(nx, ny, nz, xvals, yvals, zvals, coordNm);
209  }
210 
222  template <typename T>
223  VISKORES_CONT static viskores::cont::DataSet Create(const std::vector<T>& xvals,
224  const std::vector<T>& yvals,
225  const std::vector<T>& zvals,
226  const std::string& coordNm = "coords")
227  {
228  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
229  }
230 
243  template <typename T>
245  const viskores::cont::ArrayHandle<T>& yvals,
246  const viskores::cont::ArrayHandle<T>& zvals,
247  const std::string& coordNm = "coords")
248  {
249  return DataSetBuilderRectilinear::BuildDataSet(xvals, yvals, zvals, coordNm);
250  }
251 
252 private:
253  template <typename T>
254  VISKORES_CONT static viskores::cont::DataSet BuildDataSet(const std::vector<T>& xvals,
255  const std::vector<T>& yvals,
256  const std::vector<T>& zvals,
257  const std::string& coordNm)
258  {
263 
264  return DataSetBuilderRectilinear::BuildDataSet(Xc, Yc, Zc, coordNm);
265  }
266 
267  template <typename T>
269  viskores::Id ny,
270  viskores::Id nz,
271  const T* xvals,
272  const T* yvals,
273  const T* zvals,
274  const std::string& coordNm)
275  {
280 
281  return DataSetBuilderRectilinear::BuildDataSet(Xc, Yc, Zc, coordNm);
282  }
283 
284  template <typename T>
288  const std::string& coordNm)
289  {
290  viskores::cont::DataSet dataSet;
291 
292  //Convert all coordinates to floatDefault.
296  coords;
297 
302 
304  viskores::cont::CoordinateSystem cs(coordNm, coords);
305  dataSet.AddCoordinateSystem(cs);
306 
307  // compute the dimensions of the cellset by counting the number of axes
308  // with >1 dimension
309  int ndims = 0;
310  viskores::Id dims[3];
311  if (Xc.GetNumberOfValues() > 1)
312  {
313  dims[ndims++] = Xc.GetNumberOfValues();
314  }
315  if (Yc.GetNumberOfValues() > 1)
316  {
317  dims[ndims++] = Yc.GetNumberOfValues();
318  }
319  if (Zc.GetNumberOfValues() > 1)
320  {
321  dims[ndims++] = Zc.GetNumberOfValues();
322  }
323 
324  if (ndims == 1)
325  {
327  cellSet.SetPointDimensions(dims[0]);
328  dataSet.SetCellSet(cellSet);
329  }
330  else if (ndims == 2)
331  {
333  cellSet.SetPointDimensions(viskores::make_Vec(dims[0], dims[1]));
334  dataSet.SetCellSet(cellSet);
335  }
336  else if (ndims == 3)
337  {
339  cellSet.SetPointDimensions(viskores::make_Vec(dims[0], dims[1], dims[2]));
340  dataSet.SetCellSet(cellSet);
341  }
342  else
343  {
344  throw viskores::cont::ErrorBadValue("Invalid cell set dimension");
345  }
346 
347  return dataSet;
348  }
349 };
350 
351 } // namespace cont
352 } // namespace viskores
353 
354 #endif //viskores_cont_DataSetBuilderRectilinear_h
viskores::CopyFlag::Off
@ Off
viskores::cont::DataSet
Contains and manages the geometric data structures that Viskores operates on.
Definition: DataSet.h:66
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(viskores::Id nx, viskores::Id ny, viskores::Id nz, T *xvals, T *yvals, T *zvals, const std::string &coordNm="coords")
Create a 3D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:200
ArrayPortalToIterators.h
viskores::cont::DataSetBuilderRectilinear::CopyInto
static void CopyInto(const viskores::cont::ArrayHandle< T > &input, viskores::cont::ArrayHandle< U > &output)
Definition: DataSetBuilderRectilinear.h:44
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const std::vector< T > &xvals, const std::vector< T > &yvals, const std::vector< T > &zvals, const std::string &coordNm="coords")
Create a 3D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:223
viskores::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:313
viskores::cont::CoordinateSystem
Manages a coordinate system for a DataSet.
Definition: CoordinateSystem.h:38
CoordinateSystem.h
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const std::vector< T > &xvals, const std::string &coordNm="coords")
Create a 1D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:73
ArrayCopy.h
viskores::cont::DataSet::AddCoordinateSystem
viskores::IdComponent AddCoordinateSystem(const viskores::cont::CoordinateSystem &cs)
Adds the given CoordinateSystem to the DataSet.
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(viskores::Id nx, viskores::Id ny, T *xvals, T *yvals, const std::string &coordNm="coords")
Create a 2D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:153
viskores::Id
viskores::Int64 Id
Base type to use to index arrays.
Definition: Types.h:235
VISKORES_CONT
#define VISKORES_CONT
Definition: ExportMacros.h:65
viskores
Groups connected points that have the same field value.
Definition: Atomic.h:27
viskores::cont::make_ArrayHandleCartesianProduct
viskores::cont::ArrayHandleCartesianProduct< FirstHandleType, SecondHandleType, ThirdHandleType > make_ArrayHandleCartesianProduct(const FirstHandleType &first, const SecondHandleType &second, const ThirdHandleType &third)
A convenience function for creating an ArrayHandleCartesianProduct.
Definition: ArrayHandleCartesianProduct.h:404
viskores::cont::DataSetBuilderRectilinear::BuildDataSet
static viskores::cont::DataSet BuildDataSet(const std::vector< T > &xvals, const std::vector< T > &yvals, const std::vector< T > &zvals, const std::string &coordNm)
Definition: DataSetBuilderRectilinear.h:254
viskores::cont::DataSetBuilderRectilinear::CopyInto
static void CopyInto(const std::vector< T > &input, viskores::cont::ArrayHandle< U > &output)
Definition: DataSetBuilderRectilinear.h:36
viskores::cont::ArrayHandle::Allocate
void Allocate(viskores::Id numberOfValues, viskores::CopyFlag preserve, viskores::cont::Token &token) const
Allocates an array large enough to hold the given number of values.
Definition: ArrayHandle.h:504
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const viskores::cont::ArrayHandle< T > &xvals, const viskores::cont::ArrayHandle< T > &yvals, const viskores::cont::ArrayHandle< T > &zvals, const std::string &coordNm="coords")
Create a 3D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:244
DeviceAdapterSerial.h
viskores::cont::ArrayHandle::GetNumberOfValues
viskores::Id GetNumberOfValues() const
Returns the number of entries in the array.
Definition: ArrayHandle.h:482
ArrayHandleCartesianProduct.h
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(viskores::Id nx, T *xvals, const std::string &coordNm="coords")
Create a 1D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:91
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const viskores::cont::ArrayHandle< T > &xvals, const std::string &coordNm="coords")
Create a 1D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:110
viskores::cont::ArrayHandle::WritePortal
WritePortalType WritePortal() const
Get an array portal that can be used in the control environment.
Definition: ArrayHandle.h:468
viskores::make_Vec
constexpr viskores::Vec< T, viskores::IdComponent(sizeof...(Ts)+1)> make_Vec(T value0, Ts &&... args)
Initializes and returns a Vec containing all the arguments.
Definition: Types.h:1262
viskores::cont::DataSetBuilderRectilinear::CopyInto
static void CopyInto(const T *input, viskores::Id len, viskores::cont::ArrayHandle< U > &output)
Definition: DataSetBuilderRectilinear.h:51
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const std::vector< T > &xvals, const std::vector< T > &yvals, const std::string &coordNm="coords")
Create a 2D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:132
viskores::cont::CellSetStructured
Defines a 1-, 2-, or 3-dimensional structured grid of points.
Definition: CastAndCall.h:40
viskores::cont::DataSetBuilderRectilinear::BuildDataSet
static viskores::cont::DataSet BuildDataSet(const viskores::cont::ArrayHandle< T > &X, const viskores::cont::ArrayHandle< T > &Y, const viskores::cont::ArrayHandle< T > &Z, const std::string &coordNm)
Definition: DataSetBuilderRectilinear.h:285
viskores::cont::ErrorBadValue
This class is thrown when a Viskores function or method encounters an invalid value that inhibits pro...
Definition: ErrorBadValue.h:33
viskores::cont::DataSetBuilderRectilinear::Create
static viskores::cont::DataSet Create(const viskores::cont::ArrayHandle< T > &xvals, const viskores::cont::ArrayHandle< T > &yvals, const std::string &coordNm="coords")
Create a 2D retilinear DataSet.
Definition: DataSetBuilderRectilinear.h:175
viskores::cont::ArrayHandleCartesianProduct
ArrayHandleCartesianProduct is a specialization of ArrayHandle.
Definition: ArrayHandleCartesianProduct.h:345
viskores::cont::ArrayCopy
void ArrayCopy(const SourceArrayType &source, DestArrayType &destination)
Does a deep copy from one array to another array.
Definition: ArrayCopy.h:129
viskores::cont::DataSetBuilderRectilinear
Definition: DataSetBuilderRectilinear.h:33
viskores::cont::CellSetStructured::SetPointDimensions
void SetPointDimensions(SchedulingRangeType dimensions)
Set the dimensions of the structured array of points.
Definition: CellSetStructured.h:66
viskores::cont::DataSetBuilderRectilinear::BuildDataSet
static viskores::cont::DataSet BuildDataSet(viskores::Id nx, viskores::Id ny, viskores::Id nz, const T *xvals, const T *yvals, const T *zvals, const std::string &coordNm)
Definition: DataSetBuilderRectilinear.h:268
viskores::cont::make_ArrayHandle
viskores::cont::ArrayHandleBasic< T > make_ArrayHandle(const T *array, viskores::Id numberOfValues, viskores::CopyFlag copy)
A convenience function for creating an ArrayHandle from a standard C array.
Definition: ArrayHandleBasic.h:285
DataSet.h
viskores::cont::DataSet::SetCellSet
void SetCellSet(const CellSetType &cellSet)
Definition: DataSet.h:415