1 //============================================================================
2 //  Copyright (c) Kitware, Inc.
3 //  All rights reserved.
4 //  See LICENSE.txt for details.
5 //  This software is distributed WITHOUT ANY WARRANTY; without even
6 //  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
7 //  PURPOSE.  See the above copyright notice for more information.
8 //
9 //  Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
10 //  Copyright 2014 UT-Battelle, LLC.
11 //  Copyright 2014 Los Alamos National Security.
12 //
13 //  Under the terms of Contract DE-NA0003525 with NTESS,
14 //  the U.S. Government retains certain rights in this software.
15 //
16 //  Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
17 //  Laboratory (LANL), the U.S. Government retains certain rights in
18 //  this software.
19 //============================================================================
20 
21 #ifndef vtk_m_cont_testing_MakeTestDataSet_h
22 #define vtk_m_cont_testing_MakeTestDataSet_h
23 
24 #include <vtkm/cont/ArrayHandleUniformPointCoordinates.h>
25 #include <vtkm/cont/DataSet.h>
26 #include <vtkm/cont/DataSetBuilderExplicit.h>
27 #include <vtkm/cont/DataSetBuilderRectilinear.h>
28 #include <vtkm/cont/DataSetBuilderUniform.h>
29 #include <vtkm/cont/DataSetFieldAdd.h>
30 
31 #include <numeric>
32 
33 namespace vtkm
34 {
35 namespace cont
36 {
37 namespace testing
38 {
39 
40 class MakeTestDataSet
41 {
42 public:
43   // 1D uniform datasets.
44   vtkm::cont::DataSet Make1DUniformDataSet0();
45   vtkm::cont::DataSet Make1DUniformDataSet1();
46   // 1D explicit datasets.
47   vtkm::cont::DataSet Make1DExplicitDataSet0();
48 
49   // 2D uniform datasets.
50   vtkm::cont::DataSet Make2DUniformDataSet0();
51   vtkm::cont::DataSet Make2DUniformDataSet1();
52 
53   // 3D uniform datasets.
54   vtkm::cont::DataSet Make3DUniformDataSet0();
55   vtkm::cont::DataSet Make3DUniformDataSet1();
56   vtkm::cont::DataSet Make3DUniformDataSet2();
57   vtkm::cont::DataSet Make3DRegularDataSet0();
58   vtkm::cont::DataSet Make3DRegularDataSet1();
59 
60   //2D rectilinear
61   vtkm::cont::DataSet Make2DRectilinearDataSet0();
62 
63   //3D rectilinear
64   vtkm::cont::DataSet Make3DRectilinearDataSet0();
65 
66   // 2D explicit datasets.
67   vtkm::cont::DataSet Make2DExplicitDataSet0();
68 
69   // 3D explicit datasets.
70   vtkm::cont::DataSet Make3DExplicitDataSet0();
71   vtkm::cont::DataSet Make3DExplicitDataSet1();
72   vtkm::cont::DataSet Make3DExplicitDataSet2();
73   vtkm::cont::DataSet Make3DExplicitDataSet3();
74   vtkm::cont::DataSet Make3DExplicitDataSet4();
75   vtkm::cont::DataSet Make3DExplicitDataSet5();
76   vtkm::cont::DataSet Make3DExplicitDataSet6();
77   vtkm::cont::DataSet Make3DExplicitDataSet7();
78   vtkm::cont::DataSet Make3DExplicitDataSet8();
79   vtkm::cont::DataSet Make3DExplicitDataSetZoo();
80   vtkm::cont::DataSet Make3DExplicitDataSetPolygonal();
81   vtkm::cont::DataSet Make3DExplicitDataSetCowNose();
82 };
83 
84 //Make a simple 1D dataset.
Make1DUniformDataSet0()85 inline vtkm::cont::DataSet MakeTestDataSet::Make1DUniformDataSet0()
86 {
87   vtkm::cont::DataSetBuilderUniform dsb;
88   const vtkm::Id nVerts = 6;
89   vtkm::cont::DataSet dataSet = dsb.Create(nVerts);
90 
91   vtkm::cont::DataSetFieldAdd dsf;
92   vtkm::Float32 var[nVerts] = { -1.0f, .5f, -.2f, 1.7f, -.1f, .8f };
93   vtkm::Float32 var2[nVerts] = { -1.1f, .7f, -.2f, 0.2f, -.1f, .4f };
94   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
95   dsf.AddPointField(dataSet, "pointvar2", var2, nVerts);
96 
97   return dataSet;
98 }
99 
100 //Make another simple 1D dataset.
Make1DUniformDataSet1()101 inline vtkm::cont::DataSet MakeTestDataSet::Make1DUniformDataSet1()
102 {
103   vtkm::cont::DataSetBuilderUniform dsb;
104   const vtkm::Id nVerts = 6;
105   vtkm::cont::DataSet dataSet = dsb.Create(nVerts);
106 
107   vtkm::cont::DataSetFieldAdd dsf;
108   vtkm::Float32 var[nVerts] = { 1.0e3f, 5.e5f, 2.e8f, 1.e10f, 2e12f, 3e15f };
109   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
110 
111   return dataSet;
112 }
113 
Make1DExplicitDataSet0()114 inline vtkm::cont::DataSet MakeTestDataSet::Make1DExplicitDataSet0()
115 {
116   const int nVerts = 5;
117   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
118   std::vector<CoordType> coords(nVerts);
119   coords[0] = CoordType(0.0f, 0.f, 0.f);
120   coords[1] = CoordType(1.0f, 0.f, 0.f);
121   coords[2] = CoordType(1.1f, 0.f, 0.f);
122   coords[3] = CoordType(1.2f, 0.f, 0.f);
123   coords[4] = CoordType(4.0f, 0.f, 0.f);
124 
125   // Each line connects two consecutive vertices
126   std::vector<vtkm::Id> conn;
127   for (int i = 0; i < nVerts - 1; i++)
128   {
129     conn.push_back(i);
130     conn.push_back(i + 1);
131   }
132 
133   vtkm::cont::DataSet dataSet;
134   vtkm::cont::DataSetBuilderExplicit dsb;
135 
136   dataSet = dsb.Create(coords, vtkm::CellShapeTagLine(), 2, conn, "coordinates", "cells");
137 
138   vtkm::cont::DataSetFieldAdd dsf;
139   vtkm::Float32 var[nVerts] = { -1.0f, .5f, -.2f, 1.7f, .8f };
140   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
141 
142   return dataSet;
143 }
144 
145 //Make a simple 2D, 2 cell uniform dataset.
Make2DUniformDataSet0()146 inline vtkm::cont::DataSet MakeTestDataSet::Make2DUniformDataSet0()
147 {
148   vtkm::cont::DataSetBuilderUniform dsb;
149   vtkm::Id2 dimensions(3, 2);
150   vtkm::cont::DataSet dataSet = dsb.Create(dimensions);
151 
152   vtkm::cont::DataSetFieldAdd dsf;
153   const vtkm::Id nVerts = 6;
154   vtkm::Float32 var[nVerts] = { 10.1f, 20.1f, 30.1f, 40.1f, 50.1f, 60.1f };
155 
156   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
157 
158   vtkm::Float32 cellvar[2] = { 100.1f, 200.1f };
159   dsf.AddCellField(dataSet, "cellvar", cellvar, 2, "cells");
160 
161   return dataSet;
162 }
163 
164 //Make a simple 2D, 16 cell uniform dataset.
Make2DUniformDataSet1()165 inline vtkm::cont::DataSet MakeTestDataSet::Make2DUniformDataSet1()
166 {
167   vtkm::cont::DataSetBuilderUniform dsb;
168   vtkm::Id2 dimensions(5, 5);
169   vtkm::cont::DataSet dataSet = dsb.Create(dimensions);
170 
171   vtkm::cont::DataSetFieldAdd dsf;
172   const vtkm::Id nVerts = 25;
173   const vtkm::Id nCells = 16;
174   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 1.0f,  94.0f, 71.0f, 47.0f, 33.0f,
175                                      6.0f,   52.0f, 44.0f, 50.0f, 45.0f, 48.0f, 8.0f,  12.0f, 46.0f,
176                                      91.0f,  43.0f, 0.0f,  5.0f,  51.0f, 76.0f, 83.0f };
177   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f,  3.0f,  4.0f,  5.0f,  6.0f,  7.0f,
178                                     8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f };
179 
180   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
181   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
182 
183   return dataSet;
184 }
185 
186 //Make a simple 3D, 4 cell uniform dataset.
Make3DUniformDataSet0()187 inline vtkm::cont::DataSet MakeTestDataSet::Make3DUniformDataSet0()
188 {
189   vtkm::cont::DataSetBuilderUniform dsb;
190   vtkm::Id3 dimensions(3, 2, 3);
191   vtkm::cont::DataSet dataSet = dsb.Create(dimensions);
192 
193   vtkm::cont::DataSetFieldAdd dsf;
194   const int nVerts = 18;
195   vtkm::Float32 vars[nVerts] = { 10.1f,  20.1f,  30.1f,  40.1f,  50.2f,  60.2f,
196                                  70.2f,  80.2f,  90.3f,  100.3f, 110.3f, 120.3f,
197                                  130.4f, 140.4f, 150.4f, 160.4f, 170.5f, 180.5f };
198 
199   //Set point and cell scalar
200   dsf.AddPointField(dataSet, "pointvar", vars, nVerts);
201 
202   vtkm::Float32 cellvar[4] = { 100.1f, 100.2f, 100.3f, 100.4f };
203   dsf.AddCellField(dataSet, "cellvar", cellvar, 4, "cells");
204 
205   return dataSet;
206 }
207 
208 //Make a simple 3D, 64 cell uniform dataset.
Make3DUniformDataSet1()209 inline vtkm::cont::DataSet MakeTestDataSet::Make3DUniformDataSet1()
210 {
211   vtkm::cont::DataSetBuilderUniform dsb;
212   vtkm::Id3 dimensions(5, 5, 5);
213   vtkm::cont::DataSet dataSet = dsb.Create(dimensions);
214 
215   vtkm::cont::DataSetFieldAdd dsf;
216   const vtkm::Id nVerts = 125;
217   const vtkm::Id nCells = 64;
218   vtkm::Float32 pointvar[nVerts] = {
219     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,  0.0f,
220     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,
221 
222     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  99.0f, 90.0f, 85.0f, 0.0f, 0.0f, 95.0f, 80.0f,
223     95.0f, 0.0f, 0.0f, 85.0f, 90.0f, 99.0f, 0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,
224 
225     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  75.0f, 50.0f, 65.0f, 0.0f, 0.0f, 55.0f, 15.0f,
226     45.0f, 0.0f, 0.0f, 60.0f, 40.0f, 70.0f, 0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,
227 
228     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  97.0f, 87.0f, 82.0f, 0.0f, 0.0f, 92.0f, 77.0f,
229     92.0f, 0.0f, 0.0f, 82.0f, 87.0f, 97.0f, 0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,
230 
231     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f,  0.0f,
232     0.0f,  0.0f, 0.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f, 0.0f, 0.0f
233   };
234   vtkm::Float32 cellvar[nCells] = { 0.0f,  1.0f,  2.0f,  3.0f,  4.0f,  5.0f,  6.0f,  7.0f,
235                                     8.0f,  9.0f,  10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
236 
237                                     16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f,
238                                     24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f,
239 
240                                     32.0f, 33.0f, 34.0f, 35.0f, 36.0f, 37.0f, 38.0f, 39.0f,
241                                     40.0f, 41.0f, 42.0f, 43.0f, 44.0f, 45.0f, 46.0f, 47.0f,
242 
243                                     48.0f, 49.0f, 50.0f, 51.0f, 52.0f, 53.0f, 54.0f, 55.0f,
244                                     56.0f, 57.0f, 58.0f, 59.0f, 60.0f, 61.0f, 62.0f, 63.0f };
245 
246   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
247   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
248 
249   return dataSet;
250 }
251 
Make3DUniformDataSet2()252 inline vtkm::cont::DataSet MakeTestDataSet::Make3DUniformDataSet2()
253 {
254   const vtkm::Id base_size = 256;
255   vtkm::cont::DataSetBuilderUniform dsb;
256   vtkm::Id3 dimensions(base_size, base_size, base_size);
257   vtkm::cont::DataSet dataSet = dsb.Create(dimensions);
258 
259   vtkm::cont::DataSetFieldAdd dsf;
260   const vtkm::Id nVerts = base_size * base_size * base_size;
261   vtkm::Float32* pointvar = new vtkm::Float32[nVerts];
262 
263   for (vtkm::Id z = 0; z < base_size; ++z)
264     for (vtkm::Id y = 0; y < base_size; ++y)
265       for (vtkm::Id x = 0; x < base_size; ++x)
266       {
267         std::size_t index = static_cast<std::size_t>(z * base_size * base_size + y * base_size + x);
268         pointvar[index] = vtkm::Sqrt(vtkm::Float32(x * x + y * y + z * z));
269       }
270 
271   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
272 
273   delete[] pointvar;
274 
275   return dataSet;
276 }
277 
Make2DRectilinearDataSet0()278 inline vtkm::cont::DataSet MakeTestDataSet::Make2DRectilinearDataSet0()
279 {
280   vtkm::cont::DataSetBuilderRectilinear dsb;
281   std::vector<vtkm::Float32> X(3), Y(2);
282 
283   X[0] = 0.0f;
284   X[1] = 1.0f;
285   X[2] = 2.0f;
286   Y[0] = 0.0f;
287   Y[1] = 1.0f;
288 
289   vtkm::cont::DataSet dataSet = dsb.Create(X, Y);
290 
291   vtkm::cont::DataSetFieldAdd dsf;
292   const vtkm::Id nVerts = 6;
293   vtkm::Float32 var[nVerts];
294   for (int i = 0; i < nVerts; i++)
295     var[i] = (vtkm::Float32)i;
296   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
297 
298   const vtkm::Id nCells = 2;
299   vtkm::Float32 cellvar[nCells];
300   for (int i = 0; i < nCells; i++)
301     cellvar[i] = (vtkm::Float32)i;
302   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
303 
304   return dataSet;
305 }
306 
Make3DRegularDataSet0()307 inline vtkm::cont::DataSet MakeTestDataSet::Make3DRegularDataSet0()
308 {
309   vtkm::cont::DataSet dataSet;
310 
311   const int nVerts = 18;
312   vtkm::cont::ArrayHandleUniformPointCoordinates coordinates(vtkm::Id3(3, 2, 3));
313   vtkm::Float32 vars[nVerts] = { 10.1f,  20.1f,  30.1f,  40.1f,  50.2f,  60.2f,
314                                  70.2f,  80.2f,  90.3f,  100.3f, 110.3f, 120.3f,
315                                  130.4f, 140.4f, 150.4f, 160.4f, 170.5f, 180.5f };
316 
317   dataSet.AddCoordinateSystem(vtkm::cont::CoordinateSystem("coordinates", coordinates));
318 
319   //Set point scalar
320   dataSet.AddField(make_Field(
321     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
322 
323   //Set cell scalar
324   vtkm::Float32 cellvar[4] = { 100.1f, 100.2f, 100.3f, 100.4f };
325   dataSet.AddField(make_Field(
326     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 4, vtkm::CopyFlag::On));
327 
328   static constexpr vtkm::IdComponent dim = 3;
329   vtkm::cont::CellSetStructured<dim> cellSet("cells");
330   cellSet.SetPointDimensions(vtkm::make_Vec(3, 2, 3));
331   dataSet.AddCellSet(cellSet);
332 
333   return dataSet;
334 }
335 
Make3DRegularDataSet1()336 inline vtkm::cont::DataSet MakeTestDataSet::Make3DRegularDataSet1()
337 {
338   vtkm::cont::DataSet dataSet;
339 
340   const int nVerts = 8;
341   vtkm::cont::ArrayHandleUniformPointCoordinates coordinates(vtkm::Id3(2, 2, 2));
342   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.1f, 40.1f, 50.2f, 60.2f, 70.2f, 80.2f };
343 
344   dataSet.AddCoordinateSystem(vtkm::cont::CoordinateSystem("coordinates", coordinates));
345 
346   //Set point scalar
347   dataSet.AddField(make_Field(
348     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
349 
350   //Set cell scalar
351   vtkm::Float32 cellvar[1] = { 100.1f };
352   dataSet.AddField(make_Field(
353     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 1, vtkm::CopyFlag::On));
354 
355   static constexpr vtkm::IdComponent dim = 3;
356   vtkm::cont::CellSetStructured<dim> cellSet("cells");
357   cellSet.SetPointDimensions(vtkm::make_Vec(2, 2, 2));
358   dataSet.AddCellSet(cellSet);
359 
360   return dataSet;
361 }
362 
Make3DRectilinearDataSet0()363 inline vtkm::cont::DataSet MakeTestDataSet::Make3DRectilinearDataSet0()
364 {
365   vtkm::cont::DataSetBuilderRectilinear dsb;
366   std::vector<vtkm::Float32> X(3), Y(2), Z(3);
367 
368   X[0] = 0.0f;
369   X[1] = 1.0f;
370   X[2] = 2.0f;
371   Y[0] = 0.0f;
372   Y[1] = 1.0f;
373   Z[0] = 0.0f;
374   Z[1] = 1.0f;
375   Z[2] = 2.0f;
376 
377   vtkm::cont::DataSet dataSet = dsb.Create(X, Y, Z);
378 
379   vtkm::cont::DataSetFieldAdd dsf;
380   const vtkm::Id nVerts = 18;
381   vtkm::Float32 var[nVerts];
382   for (int i = 0; i < nVerts; i++)
383     var[i] = (vtkm::Float32)i;
384   dsf.AddPointField(dataSet, "pointvar", var, nVerts);
385 
386   const vtkm::Id nCells = 4;
387   vtkm::Float32 cellvar[nCells];
388   for (int i = 0; i < nCells; i++)
389     cellvar[i] = (vtkm::Float32)i;
390   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
391 
392   return dataSet;
393 }
394 
395 // Make a 2D explicit dataset
Make2DExplicitDataSet0()396 inline vtkm::cont::DataSet MakeTestDataSet::Make2DExplicitDataSet0()
397 {
398   vtkm::cont::DataSet dataSet;
399   vtkm::cont::DataSetBuilderExplicit dsb;
400   vtkm::cont::DataSetFieldAdd dsf;
401 
402   // Coordinates
403   const int nVerts = 16;
404   const int nCells = 7;
405   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
406   std::vector<CoordType> coords(nVerts);
407 
408   coords[0] = CoordType(0, 0, 0);
409   coords[1] = CoordType(1, 0, 0);
410   coords[2] = CoordType(2, 0, 0);
411   coords[3] = CoordType(3, 0, 0);
412   coords[4] = CoordType(0, 1, 0);
413   coords[5] = CoordType(1, 1, 0);
414   coords[6] = CoordType(2, 1, 0);
415   coords[7] = CoordType(3, 1, 0);
416   coords[8] = CoordType(0, 2, 0);
417   coords[9] = CoordType(1, 2, 0);
418   coords[10] = CoordType(2, 2, 0);
419   coords[11] = CoordType(3, 2, 0);
420   coords[12] = CoordType(0, 3, 0);
421   coords[13] = CoordType(3, 3, 0);
422   coords[14] = CoordType(1, 4, 0);
423   coords[15] = CoordType(2, 4, 0);
424 
425   // Connectivity
426   std::vector<vtkm::UInt8> shapes;
427   std::vector<vtkm::IdComponent> numindices;
428   std::vector<vtkm::Id> conn;
429 
430   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
431   numindices.push_back(3);
432   conn.push_back(0);
433   conn.push_back(1);
434   conn.push_back(5);
435 
436   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
437   numindices.push_back(4);
438   conn.push_back(1);
439   conn.push_back(2);
440   conn.push_back(6);
441   conn.push_back(5);
442 
443   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
444   numindices.push_back(4);
445   conn.push_back(5);
446   conn.push_back(6);
447   conn.push_back(10);
448   conn.push_back(9);
449 
450   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
451   numindices.push_back(4);
452   conn.push_back(4);
453   conn.push_back(5);
454   conn.push_back(9);
455   conn.push_back(8);
456 
457   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
458   numindices.push_back(3);
459   conn.push_back(2);
460   conn.push_back(3);
461   conn.push_back(7);
462 
463   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
464   numindices.push_back(4);
465   conn.push_back(6);
466   conn.push_back(7);
467   conn.push_back(11);
468   conn.push_back(10);
469 
470   shapes.push_back(vtkm::CELL_SHAPE_POLYGON);
471   numindices.push_back(6);
472   conn.push_back(9);
473   conn.push_back(10);
474   conn.push_back(13);
475   conn.push_back(15);
476   conn.push_back(14);
477   conn.push_back(12);
478   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
479 
480   // Field data
481   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 94.0f, 71.0f, 47.0f, 33.0f,
482                                      52.0f,  44.0f, 50.0f, 45.0f, 8.0f,  12.0f, 46.0f, 91.0f };
483   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
484 
485   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
486   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
487 
488   return dataSet;
489 }
490 
Make3DExplicitDataSet0()491 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet0()
492 {
493   vtkm::cont::DataSet dataSet;
494   vtkm::cont::DataSetBuilderExplicit dsb;
495 
496   const int nVerts = 5;
497   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
498   std::vector<CoordType> coords(nVerts);
499   coords[0] = CoordType(0, 0, 0);
500   coords[1] = CoordType(1, 0, 0);
501   coords[2] = CoordType(1, 1, 0);
502   coords[3] = CoordType(2, 1, 0);
503   coords[4] = CoordType(2, 2, 0);
504 
505   //Connectivity
506   std::vector<vtkm::UInt8> shapes;
507   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
508   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
509 
510   std::vector<vtkm::IdComponent> numindices;
511   numindices.push_back(3);
512   numindices.push_back(4);
513 
514   std::vector<vtkm::Id> conn;
515   // First Cell: Triangle
516   conn.push_back(0);
517   conn.push_back(1);
518   conn.push_back(2);
519   // Second Cell: Quad
520   conn.push_back(2);
521   conn.push_back(1);
522   conn.push_back(3);
523   conn.push_back(4);
524 
525   //Create the dataset.
526   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
527 
528   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.2f, 40.2f, 50.3f };
529   vtkm::Float32 cellvar[2] = { 100.1f, 100.2f };
530 
531   vtkm::cont::DataSetFieldAdd dsf;
532   dsf.AddPointField(dataSet, "pointvar", vars, nVerts);
533   dsf.AddCellField(dataSet, "cellvar", cellvar, 2, "cells");
534 
535   return dataSet;
536 }
537 
538 /*
539 inline vtkm::cont::DataSet
540 MakeTestDataSet::Make3DExplicitDataSet1()
541 {
542   vtkm::cont::DataSet dataSet;
543   vtkm::cont::DataSetIterativeBuilderExplicit dsb;
544   vtkm::Id id0, id1, id2, id3, id4;
545 
546   dsb.Begin("coords", "cells");
547 
548   id0 = dsb.AddPoint(0,0,0);
549   id1 = dsb.AddPoint(1,0,0);
550   id2 = dsb.AddPoint(1,1,0);
551   id3 = dsb.AddPoint(2,1,0);
552   id4 = dsb.AddPoint(2,2,0);
553 
554   vtkm::Id ids0[3] = {id0, id1, id2};
555   dsb.AddCell(vtkm::CELL_SHAPE_TRIANGLE, ids0, 3);
556 
557   vtkm::Id ids1[4] = {id2, id1, id3, id4};
558   dsb.AddCell(vtkm::CELL_SHAPE_QUAD, ids1, 4);
559   dataSet = dsb.Create();
560 
561   vtkm::Float32 vars[5] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f};
562   vtkm::Float32 cellvar[2] = {100.1f, 100.2f};
563 
564   vtkm::cont::DataSetFieldAdd dsf;
565   dsf.AddPointField(dataSet, "pointvar", vars, 5);
566   dsf.AddCellField(dataSet, "cellvar", cellvar, 2, "cells");
567 
568   return dataSet;
569 }
570     */
571 
Make3DExplicitDataSet1()572 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet1()
573 {
574   vtkm::cont::DataSet dataSet;
575   vtkm::cont::DataSetBuilderExplicit dsb;
576 
577   const int nVerts = 5;
578   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
579   std::vector<CoordType> coords(nVerts);
580 
581   coords[0] = CoordType(0, 0, 0);
582   coords[1] = CoordType(1, 0, 0);
583   coords[2] = CoordType(1, 1, 0);
584   coords[3] = CoordType(2, 1, 0);
585   coords[4] = CoordType(2, 2, 0);
586   CoordType coordinates[nVerts] = { CoordType(0, 0, 0),
587                                     CoordType(1, 0, 0),
588                                     CoordType(1, 1, 0),
589                                     CoordType(2, 1, 0),
590                                     CoordType(2, 2, 0) };
591   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.2f, 40.2f, 50.3f };
592 
593   dataSet.AddCoordinateSystem(
594     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
595   vtkm::cont::CellSetExplicit<> cellSet("cells");
596   cellSet.PrepareToAddCells(2, 7);
597   cellSet.AddCell(vtkm::CELL_SHAPE_TRIANGLE, 3, make_Vec<vtkm::Id>(0, 1, 2));
598   cellSet.AddCell(vtkm::CELL_SHAPE_QUAD, 4, make_Vec<vtkm::Id>(2, 1, 3, 4));
599   cellSet.CompleteAddingCells(nVerts);
600   dataSet.AddCellSet(cellSet);
601 
602   //Set point scalar
603   dataSet.AddField(make_Field(
604     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
605 
606   //Set cell scalar
607   vtkm::Float32 cellvar[2] = { 100.1f, 100.2f };
608   dataSet.AddField(make_Field(
609     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 2, vtkm::CopyFlag::On));
610 
611   return dataSet;
612 }
613 
Make3DExplicitDataSet2()614 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet2()
615 {
616   vtkm::cont::DataSet dataSet;
617 
618   const int nVerts = 8;
619   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
620   CoordType coordinates[nVerts] = {
621     CoordType(0, 0, 0), // 0
622     CoordType(1, 0, 0), // 1
623     CoordType(1, 0, 1), // 2
624     CoordType(0, 0, 1), // 3
625     CoordType(0, 1, 0), // 4
626     CoordType(1, 1, 0), // 5
627     CoordType(1, 1, 1), // 6
628     CoordType(0, 1, 1)  // 7
629   };
630   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.2f, 40.2f, 50.3f, 60.2f, 70.2f, 80.3f };
631 
632   dataSet.AddCoordinateSystem(
633     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
634 
635   //Set point scalar
636   dataSet.AddField(make_Field(
637     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
638 
639   //Set cell scalar
640   vtkm::Float32 cellvar[2] = { 100.1f };
641   dataSet.AddField(make_Field(
642     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 1, vtkm::CopyFlag::On));
643 
644   vtkm::cont::CellSetExplicit<> cellSet("cells");
645   vtkm::Vec<vtkm::Id, 8> ids;
646   ids[0] = 0;
647   ids[1] = 1;
648   ids[2] = 2;
649   ids[3] = 3;
650   ids[4] = 4;
651   ids[5] = 5;
652   ids[6] = 6;
653   ids[7] = 7;
654 
655   cellSet.PrepareToAddCells(1, 8);
656   cellSet.AddCell(vtkm::CELL_SHAPE_HEXAHEDRON, 8, ids);
657   cellSet.CompleteAddingCells(nVerts);
658 
659   //todo this need to be a reference/shared_ptr style class
660   dataSet.AddCellSet(cellSet);
661 
662   return dataSet;
663 }
664 
Make3DExplicitDataSet4()665 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet4()
666 {
667   vtkm::cont::DataSet dataSet;
668 
669   const int nVerts = 12;
670   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
671   CoordType coordinates[nVerts] = {
672     CoordType(0, 0, 0), //0
673     CoordType(1, 0, 0), //1
674     CoordType(1, 0, 1), //2
675     CoordType(0, 0, 1), //3
676     CoordType(0, 1, 0), //4
677     CoordType(1, 1, 0), //5
678     CoordType(1, 1, 1), //6
679     CoordType(0, 1, 1), //7
680     CoordType(2, 0, 0), //8
681     CoordType(2, 0, 1), //9
682     CoordType(2, 1, 1), //10
683     CoordType(2, 1, 0)  //11
684   };
685   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.2f, 40.2f, 50.3f, 60.2f,
686                                  70.2f, 80.3f, 90.f,  10.f,  11.f,  12.f };
687 
688   dataSet.AddCoordinateSystem(
689     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
690 
691   //Set point scalar
692   dataSet.AddField(make_Field(
693     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
694 
695   //Set cell scalar
696   vtkm::Float32 cellvar[2] = { 100.1f, 110.f };
697   dataSet.AddField(make_Field(
698     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 2, vtkm::CopyFlag::On));
699 
700   vtkm::cont::CellSetExplicit<> cellSet("cells");
701   vtkm::Vec<vtkm::Id, 8> ids;
702   ids[0] = 0;
703   ids[1] = 4;
704   ids[2] = 5;
705   ids[3] = 1;
706   ids[4] = 3;
707   ids[5] = 7;
708   ids[6] = 6;
709   ids[7] = 2;
710 
711   cellSet.PrepareToAddCells(2, 16);
712   cellSet.AddCell(vtkm::CELL_SHAPE_HEXAHEDRON, 8, ids);
713   ids[0] = 1;
714   ids[1] = 5;
715   ids[2] = 11;
716   ids[3] = 8;
717   ids[4] = 2;
718   ids[5] = 6;
719   ids[6] = 10;
720   ids[7] = 9;
721   cellSet.AddCell(vtkm::CELL_SHAPE_HEXAHEDRON, 8, ids);
722   cellSet.CompleteAddingCells(nVerts);
723 
724   //todo this need to be a reference/shared_ptr style class
725   dataSet.AddCellSet(cellSet);
726 
727   return dataSet;
728 }
729 
Make3DExplicitDataSet3()730 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet3()
731 {
732   vtkm::cont::DataSet dataSet;
733 
734   const int nVerts = 4;
735   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
736   CoordType coordinates[nVerts] = {
737     CoordType(0, 0, 0), CoordType(1, 0, 0), CoordType(1, 0, 1), CoordType(0, 1, 0)
738   };
739   vtkm::Float32 vars[nVerts] = { 10.1f, 10.1f, 10.2f, 30.2f };
740 
741   dataSet.AddCoordinateSystem(
742     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
743 
744   //Set point scalar
745   dataSet.AddField(make_Field(
746     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
747 
748   //Set cell scalar
749   vtkm::Float32 cellvar[2] = { 100.1f };
750   dataSet.AddField(make_Field(
751     "cellvar", vtkm::cont::Field::Association::CELL_SET, "cells", cellvar, 1, vtkm::CopyFlag::On));
752 
753   vtkm::cont::CellSetExplicit<> cellSet("cells");
754   vtkm::Vec<vtkm::Id, 4> ids;
755   ids[0] = 0;
756   ids[1] = 1;
757   ids[2] = 2;
758   ids[3] = 3;
759 
760   cellSet.PrepareToAddCells(1, 4);
761   cellSet.AddCell(vtkm::CELL_SHAPE_TETRA, 4, ids);
762   cellSet.CompleteAddingCells(nVerts);
763 
764   //todo this need to be a reference/shared_ptr style class
765   dataSet.AddCellSet(cellSet);
766 
767   return dataSet;
768 }
769 
Make3DExplicitDataSet5()770 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet5()
771 {
772   vtkm::cont::DataSet dataSet;
773 
774   const int nVerts = 11;
775   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
776   CoordType coordinates[nVerts] = {
777     CoordType(0, 0, 0),     //0
778     CoordType(1, 0, 0),     //1
779     CoordType(1, 0, 1),     //2
780     CoordType(0, 0, 1),     //3
781     CoordType(0, 1, 0),     //4
782     CoordType(1, 1, 0),     //5
783     CoordType(1, 1, 1),     //6
784     CoordType(0, 1, 1),     //7
785     CoordType(2, 0.5, 0.5), //8
786     CoordType(0, 2, 0),     //9
787     CoordType(1, 2, 0)      //10
788   };
789   vtkm::Float32 vars[nVerts] = { 10.1f, 20.1f, 30.2f, 40.2f, 50.3f, 60.2f,
790                                  70.2f, 80.3f, 90.f,  10.f,  11.f };
791 
792   dataSet.AddCoordinateSystem(
793     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
794 
795   //Set point scalar
796   dataSet.AddField(make_Field(
797     "pointvar", vtkm::cont::Field::Association::POINTS, vars, nVerts, vtkm::CopyFlag::On));
798 
799   //Set cell scalar
800   const int nCells = 4;
801   vtkm::Float32 cellvar[nCells] = { 100.1f, 110.f, 120.2f, 130.5f };
802   dataSet.AddField(make_Field("cellvar",
803                               vtkm::cont::Field::Association::CELL_SET,
804                               "cells",
805                               cellvar,
806                               nCells,
807                               vtkm::CopyFlag::On));
808 
809   vtkm::cont::CellSetExplicit<> cellSet("cells");
810   vtkm::Vec<vtkm::Id, 8> ids;
811 
812   cellSet.PrepareToAddCells(nCells, 23);
813 
814   ids[0] = 0;
815   ids[1] = 1;
816   ids[2] = 5;
817   ids[3] = 4;
818   ids[4] = 3;
819   ids[5] = 2;
820   ids[6] = 6;
821   ids[7] = 7;
822   cellSet.AddCell(vtkm::CELL_SHAPE_HEXAHEDRON, 8, ids);
823 
824   ids[0] = 1;
825   ids[1] = 5;
826   ids[2] = 6;
827   ids[3] = 2;
828   ids[4] = 8;
829   cellSet.AddCell(vtkm::CELL_SHAPE_PYRAMID, 5, ids);
830 
831   ids[0] = 5;
832   ids[1] = 8;
833   ids[2] = 10;
834   ids[3] = 6;
835   cellSet.AddCell(vtkm::CELL_SHAPE_TETRA, 4, ids);
836 
837   ids[0] = 4;
838   ids[1] = 7;
839   ids[2] = 9;
840   ids[3] = 5;
841   ids[4] = 6;
842   ids[5] = 10;
843   cellSet.AddCell(vtkm::CELL_SHAPE_WEDGE, 6, ids);
844 
845   cellSet.CompleteAddingCells(nVerts);
846 
847   //todo this need to be a reference/shared_ptr style class
848   dataSet.AddCellSet(cellSet);
849 
850   return dataSet;
851 }
852 
Make3DExplicitDataSet6()853 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet6()
854 {
855   vtkm::cont::DataSet dataSet;
856   vtkm::cont::DataSetBuilderExplicit dsb;
857   vtkm::cont::DataSetFieldAdd dsf;
858 
859   // Coordinates
860   const int nVerts = 8;
861   const int nCells = 8;
862   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
863   std::vector<CoordType> coords = { { -0.707f, -0.354f, -0.354f }, { 0.000f, -0.854f, 0.146f },
864                                     { 0.000f, -0.146f, 0.854f },   { -0.707f, 0.354f, 0.354f },
865                                     { 10.0f, 10.0f, 10.0f },       { 5.0f, 5.0f, 5.0f },
866                                     { 0.0f, 0.0f, 2.0f },          { 0.0f, 0.0f, -2.0f } };
867 
868   // Connectivity
869   std::vector<vtkm::UInt8> shapes;
870   std::vector<vtkm::IdComponent> numindices;
871   std::vector<vtkm::Id> conn;
872 
873   shapes.push_back(vtkm::CELL_SHAPE_LINE);
874   numindices.push_back(2);
875   conn.push_back(0);
876   conn.push_back(1);
877 
878   shapes.push_back(vtkm::CELL_SHAPE_LINE);
879   numindices.push_back(2);
880   conn.push_back(2);
881   conn.push_back(3);
882 
883   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
884   numindices.push_back(1);
885   conn.push_back(4);
886 
887   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
888   numindices.push_back(1);
889   conn.push_back(5);
890 
891   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
892   numindices.push_back(3);
893   conn.push_back(2);
894   conn.push_back(3);
895   conn.push_back(5);
896 
897   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
898   numindices.push_back(4);
899   conn.push_back(0);
900   conn.push_back(1);
901   conn.push_back(2);
902   conn.push_back(3);
903 
904   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
905   numindices.push_back(4);
906   conn.push_back(0);
907   conn.push_back(2);
908   conn.push_back(3);
909   conn.push_back(6);
910 
911   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
912   numindices.push_back(4);
913   conn.push_back(3);
914   conn.push_back(2);
915   conn.push_back(0);
916   conn.push_back(7);
917 
918   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
919 
920   // Field data
921   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 94.0f, 71.0f, 47.0f, 57.0f };
922   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f };
923 
924   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
925   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
926 
927   return dataSet;
928 }
929 
Make3DExplicitDataSetZoo()930 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSetZoo()
931 {
932   vtkm::cont::DataSet dataSet;
933   vtkm::cont::DataSetBuilderExplicit dsb;
934   vtkm::cont::DataSetFieldAdd dsf;
935 
936   // Coordinates
937   const int nVerts = 30;
938   const int nCells = 27;
939   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
940 
941   std::vector<CoordType> coords =
942 
943     { { 0.00f, 0.00f, 0.00f }, { 1.00f, 0.00f, 0.00f }, { 2.00f, 0.00f, 0.00f },
944       { 0.00f, 0.00f, 1.00f }, { 1.00f, 0.00f, 1.00f }, { 2.00f, 0.00f, 1.00f },
945       { 0.00f, 1.00f, 0.00f }, { 1.00f, 1.00f, 0.00f }, { 2.00f, 1.00f, 0.00f },
946       { 0.00f, 1.00f, 1.00f }, { 1.00f, 1.00f, 1.00f }, { 2.00f, 1.00f, 1.00f },
947       { 0.00f, 2.00f, 0.00f }, { 1.00f, 2.00f, 0.00f }, { 2.00f, 2.00f, 0.00f },
948       { 0.00f, 2.00f, 1.00f }, { 1.00f, 2.00f, 1.00f }, { 2.00f, 2.00f, 1.00f },
949       { 1.00f, 3.00f, 1.00f }, { 2.75f, 0.00f, 1.00f }, { 3.00f, 0.00f, 0.75f },
950       { 3.00f, 0.25f, 1.00f }, { 3.00f, 1.00f, 1.00f }, { 3.00f, 1.00f, 0.00f },
951       { 2.57f, 2.00f, 1.00f }, { 3.00f, 1.75f, 1.00f }, { 3.00f, 1.75f, 0.75f },
952       { 3.00f, 0.00f, 0.00f }, { 2.57f, 0.42f, 0.57f }, { 2.59f, 1.43f, 0.71f } };
953 
954   // Connectivity
955   std::vector<vtkm::UInt8> shapes;
956   std::vector<vtkm::IdComponent> numindices;
957   std::vector<vtkm::Id> conn;
958 
959   shapes.push_back(vtkm::CELL_SHAPE_HEXAHEDRON);
960   numindices.push_back(8);
961   conn.push_back(0);
962   conn.push_back(3);
963   conn.push_back(4);
964   conn.push_back(1);
965   conn.push_back(6);
966   conn.push_back(9);
967   conn.push_back(10);
968   conn.push_back(7);
969 
970   shapes.push_back(vtkm::CELL_SHAPE_HEXAHEDRON);
971   numindices.push_back(8);
972   conn.push_back(1);
973   conn.push_back(4);
974   conn.push_back(5);
975   conn.push_back(2);
976   conn.push_back(7);
977   conn.push_back(10);
978   conn.push_back(11);
979   conn.push_back(8);
980 
981   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
982   numindices.push_back(4);
983   conn.push_back(23);
984   conn.push_back(26);
985   conn.push_back(24);
986   conn.push_back(29);
987 
988   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
989   numindices.push_back(4);
990   conn.push_back(24);
991   conn.push_back(26);
992   conn.push_back(25);
993   conn.push_back(29);
994 
995   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
996   numindices.push_back(4);
997   conn.push_back(8);
998   conn.push_back(17);
999   conn.push_back(11);
1000   conn.push_back(29);
1001 
1002   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
1003   numindices.push_back(4);
1004   conn.push_back(17);
1005   conn.push_back(24);
1006   conn.push_back(25);
1007   conn.push_back(29);
1008 
1009   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1010   numindices.push_back(5);
1011   conn.push_back(24);
1012   conn.push_back(17);
1013   conn.push_back(8);
1014   conn.push_back(23);
1015   conn.push_back(29);
1016 
1017   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1018   numindices.push_back(5);
1019   conn.push_back(23);
1020   conn.push_back(8);
1021   conn.push_back(11);
1022   conn.push_back(22);
1023   conn.push_back(29);
1024 
1025   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1026   numindices.push_back(5);
1027   conn.push_back(25);
1028   conn.push_back(22);
1029   conn.push_back(11);
1030   conn.push_back(17);
1031   conn.push_back(29);
1032 
1033   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1034   numindices.push_back(5);
1035   conn.push_back(26);
1036   conn.push_back(23);
1037   conn.push_back(22);
1038   conn.push_back(25);
1039   conn.push_back(29);
1040 
1041   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1042   numindices.push_back(5);
1043   conn.push_back(23);
1044   conn.push_back(8);
1045   conn.push_back(2);
1046   conn.push_back(27);
1047   conn.push_back(28);
1048 
1049   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1050   numindices.push_back(5);
1051   conn.push_back(22);
1052   conn.push_back(11);
1053   conn.push_back(8);
1054   conn.push_back(23);
1055   conn.push_back(28);
1056 
1057   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1058   numindices.push_back(5);
1059   conn.push_back(11);
1060   conn.push_back(5);
1061   conn.push_back(2);
1062   conn.push_back(8);
1063   conn.push_back(28);
1064 
1065   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1066   numindices.push_back(5);
1067   conn.push_back(21);
1068   conn.push_back(19);
1069   conn.push_back(5);
1070   conn.push_back(11);
1071   conn.push_back(28);
1072 
1073   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
1074   numindices.push_back(4);
1075   conn.push_back(11);
1076   conn.push_back(22);
1077   conn.push_back(21);
1078   conn.push_back(28);
1079 
1080   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
1081   numindices.push_back(4);
1082   conn.push_back(5);
1083   conn.push_back(19);
1084   conn.push_back(20);
1085   conn.push_back(28);
1086 
1087   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1088   numindices.push_back(5);
1089   conn.push_back(23);
1090   conn.push_back(27);
1091   conn.push_back(20);
1092   conn.push_back(21);
1093   conn.push_back(28);
1094 
1095   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1096   numindices.push_back(5);
1097   conn.push_back(20);
1098   conn.push_back(27);
1099   conn.push_back(2);
1100   conn.push_back(5);
1101   conn.push_back(28);
1102 
1103   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
1104   numindices.push_back(4);
1105   conn.push_back(19);
1106   conn.push_back(21);
1107   conn.push_back(20);
1108   conn.push_back(28);
1109 
1110   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1111   numindices.push_back(5);
1112   conn.push_back(7);
1113   conn.push_back(6);
1114   conn.push_back(12);
1115   conn.push_back(13);
1116   conn.push_back(16);
1117 
1118   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1119   numindices.push_back(5);
1120   conn.push_back(6);
1121   conn.push_back(9);
1122   conn.push_back(15);
1123   conn.push_back(12);
1124   conn.push_back(16);
1125 
1126   shapes.push_back(vtkm::CELL_SHAPE_PYRAMID);
1127   numindices.push_back(5);
1128   conn.push_back(6);
1129   conn.push_back(7);
1130   conn.push_back(10);
1131   conn.push_back(9);
1132   conn.push_back(16);
1133 
1134   shapes.push_back(vtkm::CELL_SHAPE_TETRA);
1135   numindices.push_back(4);
1136   conn.push_back(12);
1137   conn.push_back(15);
1138   conn.push_back(16);
1139   conn.push_back(18);
1140 
1141   shapes.push_back(vtkm::CELL_SHAPE_WEDGE);
1142   numindices.push_back(6);
1143   conn.push_back(8);
1144   conn.push_back(14);
1145   conn.push_back(17);
1146   conn.push_back(7);
1147   conn.push_back(13);
1148   conn.push_back(16);
1149 
1150   shapes.push_back(vtkm::CELL_SHAPE_WEDGE);
1151   numindices.push_back(6);
1152   conn.push_back(11);
1153   conn.push_back(8);
1154   conn.push_back(17);
1155   conn.push_back(10);
1156   conn.push_back(7);
1157   conn.push_back(16);
1158 
1159   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
1160 
1161   // Field data
1162   vtkm::Float32 pointvar[nVerts] =
1163 
1164     { 4.0,  5.0f, 9.5f, 5.5f, 6.0f, 9.5f, 5.0f, 5.5f, 5.7f, 6.5f, 6.4f, 6.9f, 6.6f, 6.1f, 7.1f,
1165       7.2f, 7.3f, 7.4f, 9.1f, 9.2f, 9.3f, 5.4f, 9.5f, 9.6f, 6.7f, 9.8f, 6.0f, 4.3f, 4.9f, 4.1f };
1166 
1167   vtkm::Float32 cellvar[nCells] =
1168 
1169     { 4.0f, 5.0f, 9.5f, 5.5f, 6.0f, 9.5f, 5.0f, 5.5f, 5.7f, 6.5f, 6.4f, 6.9f, 6.6f, 6.1f,
1170       7.1f, 7.2f, 7.3f, 7.4f, 9.1f, 9.2f, 9.3f, 5.4f, 9.5f, 9.6f, 6.7f, 9.8f, 6.0f };
1171 
1172   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
1173   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
1174 
1175   return dataSet;
1176 }
1177 
Make3DExplicitDataSet7()1178 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet7()
1179 {
1180   vtkm::cont::DataSet dataSet;
1181   vtkm::cont::DataSetBuilderExplicit dsb;
1182   vtkm::cont::DataSetFieldAdd dsf;
1183 
1184   // Coordinates
1185   const int nVerts = 8;
1186   const int nCells = 8;
1187 
1188   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
1189   std::vector<CoordType> coords = { { -0.707f, -0.354f, -0.354f }, { 0.000f, -0.854f, 0.146f },
1190                                     { 0.000f, -0.146f, 0.854f },   { -0.707f, 0.354f, 0.354f },
1191                                     { 10.0f, 10.0f, 10.0f },       { 5.0f, 5.0f, 5.0f },
1192                                     { 0.0f, 0.0f, 2.0f },          { 0.0f, 0.0f, -2.0f } };
1193 
1194   // Connectivity
1195   std::vector<vtkm::UInt8> shapes;
1196   std::vector<vtkm::IdComponent> numindices;
1197   std::vector<vtkm::Id> conn;
1198 
1199 
1200   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1201   numindices.push_back(1);
1202   conn.push_back(0);
1203 
1204   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1205   numindices.push_back(1);
1206   conn.push_back(1);
1207 
1208   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1209   numindices.push_back(1);
1210   conn.push_back(2);
1211 
1212   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1213   numindices.push_back(1);
1214   conn.push_back(3);
1215 
1216   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1217   numindices.push_back(1);
1218   conn.push_back(4);
1219 
1220   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1221   numindices.push_back(1);
1222   conn.push_back(5);
1223 
1224   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1225   numindices.push_back(1);
1226   conn.push_back(6);
1227 
1228   shapes.push_back(vtkm::CELL_SHAPE_VERTEX);
1229   numindices.push_back(1);
1230   conn.push_back(7);
1231 
1232 
1233   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
1234 
1235   // Field data
1236   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 10.f, 20.f, 33.f, 52.f };
1237   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f };
1238 
1239   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
1240   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
1241 
1242   return dataSet;
1243 }
1244 
Make3DExplicitDataSet8()1245 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet8()
1246 {
1247   vtkm::cont::DataSet dataSet;
1248   vtkm::cont::DataSetBuilderExplicit dsb;
1249   vtkm::cont::DataSetFieldAdd dsf;
1250 
1251   // Coordinates
1252   const int nVerts = 8;
1253   const int nCells = 10;
1254   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
1255   std::vector<CoordType> coords = { { -0.707f, -0.354f, -0.354f }, { 0.000f, -0.854f, 0.146f },
1256                                     { 0.000f, -0.146f, 0.854f },   { -0.707f, 0.354f, 0.354f },
1257                                     { 10.0f, 10.0f, 10.0f },       { 5.0f, 5.0f, 5.0f },
1258                                     { 0.0f, 0.0f, 2.0f },          { 0.0f, 0.0f, -2.0f } };
1259 
1260   // Connectivity
1261   std::vector<vtkm::UInt8> shapes;
1262   std::vector<vtkm::IdComponent> numindices;
1263   std::vector<vtkm::Id> conn;
1264 
1265   //I need two triangles because the leaf needs four nodes otherwise segfault?
1266   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1267   numindices.push_back(2);
1268   conn.push_back(0);
1269   conn.push_back(1);
1270 
1271   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1272   numindices.push_back(2);
1273   conn.push_back(1);
1274   conn.push_back(2);
1275 
1276   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1277   numindices.push_back(2);
1278   conn.push_back(2);
1279   conn.push_back(3);
1280 
1281   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1282   numindices.push_back(2);
1283   conn.push_back(3);
1284   conn.push_back(4);
1285 
1286   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1287   numindices.push_back(2);
1288   conn.push_back(4);
1289   conn.push_back(5);
1290 
1291   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1292   numindices.push_back(2);
1293   conn.push_back(5);
1294   conn.push_back(6);
1295 
1296   shapes.push_back(vtkm::CELL_SHAPE_LINE);
1297   numindices.push_back(2);
1298   conn.push_back(6);
1299   conn.push_back(7);
1300 
1301   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1302   numindices.push_back(3);
1303   conn.push_back(2);
1304   conn.push_back(5);
1305   conn.push_back(4);
1306 
1307   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1308   numindices.push_back(3);
1309   conn.push_back(4);
1310   conn.push_back(5);
1311   conn.push_back(6);
1312 
1313   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
1314 
1315   // Field data
1316   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 94.0f, 71.0f, 47.0f, 57.0f };
1317   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f };
1318 
1319   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
1320   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
1321   return dataSet;
1322 }
1323 
Make3DExplicitDataSetPolygonal()1324 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSetPolygonal()
1325 {
1326   vtkm::cont::DataSet dataSet;
1327   vtkm::cont::DataSetBuilderExplicit dsb;
1328   vtkm::cont::DataSetFieldAdd dsf;
1329 
1330   // Coordinates
1331   const int nVerts = 8;
1332   const int nCells = 8;
1333   using CoordType = vtkm::Vec<vtkm::Float32, 3>;
1334   std::vector<CoordType> coords = { { -0.707f, -0.354f, -0.354f }, { 0.000f, -0.854f, 0.146f },
1335                                     { 0.000f, -0.146f, 0.854f },   { -0.707f, 0.354f, 0.354f },
1336                                     { 0.000f, 0.146f, -0.854f },   { 0.000f, 0.854f, -0.146f },
1337                                     { 0.707f, 0.354f, 0.354f },    { 0.707f, -0.354f, -0.354f } };
1338 
1339   // Connectivity
1340   std::vector<vtkm::UInt8> shapes;
1341   std::vector<vtkm::IdComponent> numindices;
1342   std::vector<vtkm::Id> conn;
1343 
1344   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1345   numindices.push_back(3);
1346   conn.push_back(0);
1347   conn.push_back(1);
1348   conn.push_back(3);
1349 
1350   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1351   numindices.push_back(3);
1352   conn.push_back(1);
1353   conn.push_back(2);
1354   conn.push_back(3);
1355 
1356   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
1357   numindices.push_back(4);
1358   conn.push_back(4);
1359   conn.push_back(5);
1360   conn.push_back(6);
1361   conn.push_back(7);
1362 
1363   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1364   numindices.push_back(3);
1365   conn.push_back(0);
1366   conn.push_back(4);
1367   conn.push_back(1);
1368 
1369   shapes.push_back(vtkm::CELL_SHAPE_TRIANGLE);
1370   numindices.push_back(3);
1371   conn.push_back(4);
1372   conn.push_back(7);
1373   conn.push_back(1);
1374 
1375   shapes.push_back(vtkm::CELL_SHAPE_POLYGON);
1376   numindices.push_back(4);
1377   conn.push_back(3);
1378   conn.push_back(2);
1379   conn.push_back(6);
1380   conn.push_back(5);
1381 
1382   shapes.push_back(vtkm::CELL_SHAPE_QUAD);
1383   numindices.push_back(4);
1384   conn.push_back(0);
1385   conn.push_back(3);
1386   conn.push_back(5);
1387   conn.push_back(4);
1388 
1389   shapes.push_back(vtkm::CELL_SHAPE_POLYGON);
1390   numindices.push_back(4);
1391   conn.push_back(1);
1392   conn.push_back(7);
1393   conn.push_back(6);
1394   conn.push_back(2);
1395 
1396   dataSet = dsb.Create(coords, shapes, numindices, conn, "coordinates", "cells");
1397 
1398   // Field data
1399   vtkm::Float32 pointvar[nVerts] = { 100.0f, 78.0f, 49.0f, 17.0f, 94.0f, 71.0f, 47.0f, 33.0f };
1400   vtkm::Float32 cellvar[nCells] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f };
1401 
1402   dsf.AddPointField(dataSet, "pointvar", pointvar, nVerts);
1403   dsf.AddCellField(dataSet, "cellvar", cellvar, nCells, "cells");
1404 
1405   return dataSet;
1406 }
1407 
Make3DExplicitDataSetCowNose()1408 inline vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSetCowNose()
1409 {
1410   // prepare data array
1411   const int nVerts = 17;
1412   using CoordType = vtkm::Vec<vtkm::Float64, 3>;
1413   CoordType coordinates[nVerts] = {
1414     CoordType(0.0480879, 0.151874, 0.107334),     CoordType(0.0293568, 0.245532, 0.125337),
1415     CoordType(0.0224398, 0.246495, 0.1351),       CoordType(0.0180085, 0.20436, 0.145316),
1416     CoordType(0.0307091, 0.152142, 0.0539249),    CoordType(0.0270341, 0.242992, 0.107567),
1417     CoordType(0.000684071, 0.00272505, 0.175648), CoordType(0.00946217, 0.077227, 0.187097),
1418     CoordType(-0.000168991, 0.0692243, 0.200755), CoordType(-0.000129414, 0.00247137, 0.176561),
1419     CoordType(0.0174172, 0.137124, 0.124553),     CoordType(0.00325994, 0.0797155, 0.184912),
1420     CoordType(0.00191765, 0.00589327, 0.16608),   CoordType(0.0174716, 0.0501928, 0.0930275),
1421     CoordType(0.0242103, 0.250062, 0.126256),     CoordType(0.0108188, 0.152774, 0.167914),
1422     CoordType(5.41687e-05, 0.00137834, 0.175119)
1423   };
1424   const int connectivitySize = 57;
1425   vtkm::Id pointId[connectivitySize] = { 0, 1, 3,  2, 3,  1, 4,  5,  0,  1, 0,  5,  7,  8,  6,
1426                                          9, 6, 8,  0, 10, 7, 11, 7,  10, 0, 6,  13, 12, 13, 6,
1427                                          1, 5, 14, 1, 14, 2, 0,  3,  15, 0, 13, 4,  6,  16, 12,
1428                                          6, 9, 16, 7, 11, 8, 0,  15, 10, 7, 6,  0 };
1429 
1430   // create DataSet
1431   vtkm::cont::DataSet dataSet;
1432   dataSet.AddCoordinateSystem(
1433     vtkm::cont::make_CoordinateSystem("coordinates", coordinates, nVerts, vtkm::CopyFlag::On));
1434 
1435   vtkm::cont::ArrayHandle<vtkm::Id> connectivity;
1436   connectivity.Allocate(connectivitySize);
1437 
1438   for (vtkm::Id i = 0; i < connectivitySize; ++i)
1439   {
1440     connectivity.GetPortalControl().Set(i, pointId[i]);
1441   }
1442   vtkm::cont::CellSetSingleType<> cellSet("cells");
1443   cellSet.Fill(nVerts, vtkm::CELL_SHAPE_TRIANGLE, 3, connectivity);
1444   dataSet.AddCellSet(cellSet);
1445 
1446   std::vector<vtkm::Float32> pointvar(nVerts);
1447   std::iota(pointvar.begin(), pointvar.end(), 15.f);
1448   std::vector<vtkm::Float32> cellvar(connectivitySize / 3);
1449   std::iota(cellvar.begin(), cellvar.end(), 132.f);
1450 
1451   vtkm::cont::DataSetFieldAdd dsf;
1452   dsf.AddPointField(dataSet, "pointvar", pointvar);
1453   dsf.AddCellField(dataSet, "cellvar", cellvar, "cells");
1454 
1455   return dataSet;
1456 }
1457 }
1458 }
1459 } // namespace vtkm::cont::testing
1460 
1461 #endif //vtk_m_cont_testing_MakeTestDataSet_h
1462