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