OpenFPM_io  0.2.0
Project that contain the implementation and interfaces for basic structure like vectors, grids, graph ... .
 All Data Structures Functions Variables Typedefs
VTKWriter_unit_tests.hpp
1 /*
2  * VTKWriter_unit_tests.hpp
3  *
4  * Created on: May 6, 2015
5  * Author: Pietro Incardona
6  */
7 
8 #ifndef VTKWRITER_UNIT_TESTS_HPP_
9 #define VTKWRITER_UNIT_TESTS_HPP_
10 
11 #include "data_type/aggregate.hpp"
12 #include <random>
13 #include "VTKWriter.hpp"
14 #include "util/SimpleRNG.hpp"
15 
16 BOOST_AUTO_TEST_SUITE( vtk_writer_test )
17 
18 /* \brief Sub-domain vertex graph node
19  *
20  */
21 
22 struct vertex
23 {
25  typedef boost::fusion::vector<float,float,float,float,size_t,double,unsigned char,long int> type;
26 
27  typedef typename memory_traits_inte<type>::type memory_int;
28  typedef typename memory_traits_lin<type>::type memory_lin;
29 
31  typedef float s_type;
32 
34  struct attributes
35  {
36  static const std::string name[];
37  };
38 
40  type data;
41  static const unsigned int x = 0;
42  static const unsigned int y = 1;
43  static const unsigned int z = 2;
44  static const unsigned int prp1 = 3;
45  static const unsigned int prp2 = 4;
46  static const unsigned int prp3 = 5;
47  static const unsigned int prp4 = 6;
48  static const unsigned int prp5 = 7;
49 
51  static const unsigned int max_prop = 8;
52 
58  {
59 
60  }
61 
67  vertex(float x, float y, float z)
68  {
69  boost::fusion::at_c<vertex::x>(data) = x;
70  boost::fusion::at_c<vertex::y>(data) = y;
71  boost::fusion::at_c<vertex::z>(data) = z;
72  }
73 };
74 
75 const std::string vertex::attributes::name[] = {"x","y","z","prp1","prp2","prp3","prp4","prp5"};
76 
77 struct vertex2
78 {
80  typedef boost::fusion::vector<float[3],size_t,double> type;
81 
82  typedef typename memory_traits_inte<type>::type memory_int;
83  typedef typename memory_traits_lin<type>::type memory_lin;
84 
86  typedef float s_type;
87 
89  struct attributes
90  {
91  static const std::string name[];
92  };
93 
96 
98  static const unsigned int x = 0;
99  static const unsigned int prp1 = 1;
100  static const unsigned int prp2 = 2;
101 
103  static const unsigned int max_prop = 3;
104 
110  {
111 
112  }
113 
119  vertex2(float x, float y, float z)
120  {
121  boost::fusion::at_c<vertex::x>(data)[0] = x;
122  boost::fusion::at_c<vertex::x>(data)[1] = y;
123  boost::fusion::at_c<vertex::x>(data)[2] = z;
124  }
125 };
126 
127 // use the vertex like the edge
128 typedef vertex edge;
129 
130 const std::string vertex2::attributes::name[] = {"x","prp1","prp2"};
131 
132 
133 
134 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D )
135 {
136  // Create some graphs and output them
137 
138  // Graph
139 
140  Graph_CSR<vertex2,edge> gr;
141 
142  // Create a cube graph
143 
144  gr.addVertex(vertex2(0.0,0.0,0.0));
145  gr.addVertex(vertex2(0.0,0.0,1.0));
146  gr.addVertex(vertex2(0.0,1.0,0.0));
147  gr.addVertex(vertex2(0.0,1.0,1.0));
148  gr.addVertex(vertex2(1.0,0.0,0.0));
149  gr.addVertex(vertex2(1.0,0.0,1.0));
150  gr.addVertex(vertex2(1.0,1.0,0.0));
151  gr.addVertex(vertex2(1.0,1.0,1.0));
152 
153  gr.addEdge(0,6);
154  gr.addEdge(6,4);
155  gr.addEdge(4,0);
156 
157  gr.addEdge(0,2);
158  gr.addEdge(2,6);
159  gr.addEdge(6,0);
160 
161  gr.addEdge(0,3);
162  gr.addEdge(3,2);
163  gr.addEdge(2,0);
164 
165  gr.addEdge(0,1);
166  gr.addEdge(1,3);
167  gr.addEdge(3,0);
168 
169  gr.addEdge(2,7);
170  gr.addEdge(7,6);
171  gr.addEdge(6,2);
172 
173  gr.addEdge(2,3);
174  gr.addEdge(3,7);
175  gr.addEdge(7,2);
176 
177  gr.addEdge(4,6);
178  gr.addEdge(6,7);
179  gr.addEdge(7,4);
180 
181  gr.addEdge(4,7);
182  gr.addEdge(7,5);
183  gr.addEdge(5,4);
184 
185  gr.addEdge(0,4);
186  gr.addEdge(4,5);
187  gr.addEdge(5,0);
188 
189  gr.addEdge(0,5);
190  gr.addEdge(5,1);
191  gr.addEdge(1,0);
192 
193  gr.addEdge(1,5);
194  gr.addEdge(5,7);
195  gr.addEdge(7,1);
196 
197  gr.addEdge(1,7);
198  gr.addEdge(7,3);
199  gr.addEdge(3,1);
200 
201  // Write the VTK file
202 
203  VTKWriter<Graph_CSR<vertex2,edge>,VTK_GRAPH> vtk(gr);
204  vtk.write("vtk_graph_v2.vtk");
205 
206  // check that match
207 
208  bool test = compare("vtk_graph_v2.vtk","vtk_graph_v2_test.vtk");
209  BOOST_REQUIRE_EQUAL(true,test);
210 }
211 
212 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D_edge )
213 {
214  // Create some graphs and output them
215 
216  // Graph
217 
218  Graph_CSR<vertex2,vertex2> gr;
219 
220  // Create a cube graph
221 
222  gr.addVertex(vertex2(0.0,0.0,0.0));
223  gr.addVertex(vertex2(0.0,0.0,1.0));
224  gr.addVertex(vertex2(0.0,1.0,0.0));
225  gr.addVertex(vertex2(0.0,1.0,1.0));
226  gr.addVertex(vertex2(1.0,0.0,0.0));
227  gr.addVertex(vertex2(1.0,0.0,1.0));
228  gr.addVertex(vertex2(1.0,1.0,0.0));
229  gr.addVertex(vertex2(1.0,1.0,1.0));
230 
231  gr.addEdge(0,6,vertex2(0.0,0.0,1.0));
232  gr.addEdge(6,4,vertex2(0.0,0.0,1.0));
233  gr.addEdge(4,0,vertex2(0.0,0.0,1.0));
234 
235  gr.addEdge(0,2,vertex2(0.0,0.0,1.0));
236  gr.addEdge(2,6,vertex2(0.0,0.0,1.0));
237  gr.addEdge(6,0,vertex2(0.0,0.0,1.0));
238 
239  gr.addEdge(0,3,vertex2(0.0,0.0,1.0));
240  gr.addEdge(3,2,vertex2(0.0,0.0,1.0));
241  gr.addEdge(2,0,vertex2(0.0,0.0,1.0));
242 
243  gr.addEdge(0,1,vertex2(0.0,0.0,1.0));
244  gr.addEdge(1,3,vertex2(0.0,0.0,1.0));
245  gr.addEdge(3,0,vertex2(0.0,0.0,1.0));
246 
247  gr.addEdge(2,7,vertex2(0.0,0.0,1.0));
248  gr.addEdge(7,6,vertex2(0.0,0.0,1.0));
249  gr.addEdge(6,2,vertex2(0.0,0.0,1.0));
250 
251  gr.addEdge(2,3,vertex2(0.0,0.0,1.0));
252  gr.addEdge(3,7,vertex2(0.0,0.0,1.0));
253  gr.addEdge(7,2,vertex2(0.0,0.0,1.0));
254 
255  gr.addEdge(4,6,vertex2(0.0,0.0,1.0));
256  gr.addEdge(6,7,vertex2(0.0,0.0,1.0));
257  gr.addEdge(7,4,vertex2(0.0,0.0,1.0));
258 
259  gr.addEdge(4,7,vertex2(0.0,0.0,1.0));
260  gr.addEdge(7,5,vertex2(0.0,0.0,1.0));
261  gr.addEdge(5,4,vertex2(0.0,0.0,1.0));
262 
263  gr.addEdge(0,4,vertex2(0.0,0.0,1.0));
264  gr.addEdge(4,5,vertex2(0.0,0.0,1.0));
265  gr.addEdge(5,0,vertex2(0.0,0.0,1.0));
266 
267  gr.addEdge(0,5,vertex2(0.0,0.0,1.0));
268  gr.addEdge(5,1,vertex2(0.0,0.0,1.0));
269  gr.addEdge(1,0,vertex2(0.0,0.0,1.0));
270 
271  gr.addEdge(1,5,vertex2(0.0,0.0,1.0));
272  gr.addEdge(5,7,vertex2(0.0,0.0,1.0));
273  gr.addEdge(7,1,vertex2(0.0,0.0,1.0));
274 
275  gr.addEdge(1,7,vertex2(0.0,0.0,1.0));
276  gr.addEdge(7,3,vertex2(0.0,0.0,1.0));
277  gr.addEdge(3,1,vertex2(0.0,0.0,1.0));
278 
279  // Write the VTK file
280 
281  VTKWriter<Graph_CSR<vertex2,vertex2>,VTK_GRAPH> vtk(gr);
282  vtk.write("vtk_graph_v4.vtk");
283 
284  // check that match
285 
286  bool test = compare("vtk_graph_v4.vtk","vtk_graph_v4_test.vtk");
287  BOOST_REQUIRE_EQUAL(true,test);
288 }
289 
290 struct vertex3
291 {
293  typedef boost::fusion::vector<float[2],size_t,double> type;
294 
295  typedef typename memory_traits_inte<type>::type memory_int;
296  typedef typename memory_traits_lin<type>::type memory_lin;
297 
299  typedef float s_type;
300 
302  struct attributes
303  {
304  static const std::string name[];
305  };
306 
309 
311  static const unsigned int x = 0;
312  static const unsigned int prp1 = 1;
313  static const unsigned int prp2 = 2;
314 
316  static const unsigned int max_prop = 3;
317 
323  {
324 
325  }
326 
332  vertex3(float x, float y)
333  {
334  boost::fusion::at_c<vertex::x>(data)[0] = x;
335  boost::fusion::at_c<vertex::x>(data)[1] = y;
336  }
337 };
338 
339 // use the vertex like the edge
340 typedef vertex edge;
341 
342 const std::string vertex3::attributes::name[] = {"x","prp1","prp2"};
343 
344 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph2D )
345 {
346  // Create some graphs and output them
347 
348  // Graph
349 
350  Graph_CSR<vertex3,edge> gr;
351 
352  // Create a cube graph
353 
354  gr.addVertex(vertex3(0.0,0.0));
355  gr.addVertex(vertex3(0.0,1.0));
356  gr.addVertex(vertex3(1.0,0.0));
357  gr.addVertex(vertex3(1.0,1.0));
358 
359  gr.addEdge(0,1);
360  gr.addEdge(1,3);
361  gr.addEdge(3,2);
362  gr.addEdge(2,0);
363 
364  // Write the VTK file
365 
366  VTKWriter<Graph_CSR<vertex3,edge>,VTK_GRAPH> vtk(gr);
367  vtk.write("vtk_graph_v3.vtk");
368 
369  // check that match
370 
371  bool test = compare("vtk_graph_v3.vtk","vtk_graph_v3_test.vtk");
372  BOOST_REQUIRE_EQUAL(true,test);
373 }
374 
375 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph)
376 {
377  // Create some graphs and output them
378 
379  std::cout << "Graph unit test start" << "\n";
380 
381  // Graph
382 
383  Graph_CSR<vertex,edge> gr;
384 
385  // Create a cube graph
386 
387  gr.addVertex(vertex(0.0,0.0,0.0));
388  gr.addVertex(vertex(0.0,0.0,1.0));
389  gr.addVertex(vertex(0.0,1.0,0.0));
390  gr.addVertex(vertex(0.0,1.0,1.0));
391  gr.addVertex(vertex(1.0,0.0,0.0));
392  gr.addVertex(vertex(1.0,0.0,1.0));
393  gr.addVertex(vertex(1.0,1.0,0.0));
394  gr.addVertex(vertex(1.0,1.0,1.0));
395 
396  gr.addEdge(0,6);
397  gr.addEdge(6,4);
398  gr.addEdge(4,0);
399 
400  gr.addEdge(0,2);
401  gr.addEdge(2,6);
402  gr.addEdge(6,0);
403 
404  gr.addEdge(0,3);
405  gr.addEdge(3,2);
406  gr.addEdge(2,0);
407 
408  gr.addEdge(0,1);
409  gr.addEdge(1,3);
410  gr.addEdge(3,0);
411 
412  gr.addEdge(2,7);
413  gr.addEdge(7,6);
414  gr.addEdge(6,2);
415 
416  gr.addEdge(2,3);
417  gr.addEdge(3,7);
418  gr.addEdge(7,2);
419 
420  gr.addEdge(4,6);
421  gr.addEdge(6,7);
422  gr.addEdge(7,4);
423 
424  gr.addEdge(4,7);
425  gr.addEdge(7,5);
426  gr.addEdge(5,4);
427 
428  gr.addEdge(0,4);
429  gr.addEdge(4,5);
430  gr.addEdge(5,0);
431 
432  gr.addEdge(0,5);
433  gr.addEdge(5,1);
434  gr.addEdge(1,0);
435 
436  gr.addEdge(1,5);
437  gr.addEdge(5,7);
438  gr.addEdge(7,1);
439 
440  gr.addEdge(1,7);
441  gr.addEdge(7,3);
442  gr.addEdge(3,1);
443 
444  // Write the VTK file
445 
446  VTKWriter<Graph_CSR<vertex,edge>,VTK_GRAPH> vtk(gr);
447  vtk.write("vtk_graph.vtk");
448 
449  // check that match
450 
451  bool test = compare("vtk_graph.vtk","vtk_graph_test.vtk");
452  BOOST_REQUIRE_EQUAL(true,test);
453 }
454 
455 BOOST_AUTO_TEST_CASE( vtk_writer_use_vector_box)
456 {
457  // Create a vector of boxes
458  openfpm::vector<Box<2,float>> vb;
459 
460  vb.add(Box<2,float>({0.2,0.2},{1.0,0.5}));
461  vb.add(Box<2,float>({0.0,0.0},{0.2,0.2}));
462  vb.add(Box<2,float>({0.2,0.0},{0.5,0.2}));
463  vb.add(Box<2,float>({0.5,0.0},{1.0,0.2}));
464  vb.add(Box<2,float>({0.0,0.2},{0.2,0.5}));
465  vb.add(Box<2,float>({0.0,0.5},{1.0,1.0}));
466 
467  // Create a writer and write
468  VTKWriter<openfpm::vector<Box<2,float>>,VECTOR_BOX> vtk_box;
469  vtk_box.add(vb);
470  vtk_box.write("vtk_box.vtk");
471 
472  // Check that match
473  bool test = compare("vtk_box.vtk","vtk_box_test.vtk");
474  BOOST_REQUIRE_EQUAL(test,true);
475 
476  // Create a vector of boxes
477  openfpm::vector<Box<3,float>> vb2;
478 
479  vb2.add(Box<3,float>({0.2,0.2,0.0},{1.0,0.5,0.5}));
480  vb2.add(Box<3,float>({0.0,0.0,0.0},{0.2,0.2,0.5}));
481  vb2.add(Box<3,float>({0.2,0.0,0.0},{0.5,0.2,0.5}));
482  vb2.add(Box<3,float>({0.5,0.0,0.0},{1.0,0.2,0.5}));
483  vb2.add(Box<3,float>({0.0,0.2,0.0},{0.2,0.5,0.5}));
484  vb2.add(Box<3,float>({0.0,0.5,0.0},{1.0,1.0,0.5}));
485 
486  // Create a writer and write
487  VTKWriter<openfpm::vector<Box<3,float>>,VECTOR_BOX> vtk_box2;
488  vtk_box2.add(vb2);
489  vtk_box2.write("vtk_box_3D.vtk");
490 
491  // Check that match
492  test = compare("vtk_box_3D.vtk","vtk_box_3D_test.vtk");
493  BOOST_REQUIRE_EQUAL(test,true);
494 
495  // Create a vector of boxes
496  openfpm::vector<Box<3,float>> vb3;
497  vb3.add(Box<3,float>({0.2,0.2,0.5},{1.0,0.5,1.0}));
498  vb3.add(Box<3,float>({0.0,0.0,0.5},{0.2,0.2,1.0}));
499  vb3.add(Box<3,float>({0.2,0.0,0.5},{0.5,0.2,1.0}));
500  vb3.add(Box<3,float>({0.5,0.0,0.5},{1.0,0.2,1.0}));
501  vb3.add(Box<3,float>({0.0,0.2,0.5},{0.2,0.5,1.0}));
502  vb3.add(Box<3,float>({0.0,0.5,0.5},{1.0,1.0,1.0}));
503 
504  // Create a writer and write
505  VTKWriter<openfpm::vector<Box<3,float>>,VECTOR_BOX> vtk_box3;
506  vtk_box3.add(vb2);
507  vtk_box3.add(vb3);
508  vtk_box3.write("vtk_box_3D_2.vtk");
509 
510  // Check that match
511  test = compare("vtk_box_3D_2.vtk","vtk_box_3D_2_test.vtk");
512  BOOST_REQUIRE_EQUAL(test,true);
513 }
514 
520 void fill_grid_some_data(grid_cpu<2,Point_test<float>> & g)
521 {
522  typedef Point_test<float> p;
523 
524  auto it = g.getIterator();
525 
526  while (it.isNext())
527  {
528  g.template get<p::x>(it.get()) = it.get().get(0);
529  g.template get<p::y>(it.get()) = it.get().get(1);
530  g.template get<p::z>(it.get()) = 0;
531  g.template get<p::s>(it.get()) = 1.0;
532  g.template get<p::v>(it.get())[0] = g.getGrid().LinId(it.get());
533  g.template get<p::v>(it.get())[1] = g.getGrid().LinId(it.get());
534  g.template get<p::v>(it.get())[2] = g.getGrid().LinId(it.get());
535 
536  g.template get<p::t>(it.get())[0][0] = g.getGrid().LinId(it.get());
537  g.template get<p::t>(it.get())[0][1] = g.getGrid().LinId(it.get());
538  g.template get<p::t>(it.get())[0][2] = g.getGrid().LinId(it.get());
539  g.template get<p::t>(it.get())[1][0] = g.getGrid().LinId(it.get());
540  g.template get<p::t>(it.get())[1][1] = g.getGrid().LinId(it.get());
541  g.template get<p::t>(it.get())[1][2] = g.getGrid().LinId(it.get());
542  g.template get<p::t>(it.get())[2][0] = g.getGrid().LinId(it.get());
543  g.template get<p::t>(it.get())[2][1] = g.getGrid().LinId(it.get());
544  g.template get<p::t>(it.get())[2][2] = g.getGrid().LinId(it.get());
545 
546  ++it;
547  }
548 }
549 
555 void fill_grid_some_data_prp(grid_cpu<2,Point_test_prp<float>> & g)
556 {
557  typedef Point_test<float> p;
558 
559  auto it = g.getIterator();
560 
561  while (it.isNext())
562  {
563  g.template get<p::x>(it.get()) = it.get().get(0);
564  g.template get<p::y>(it.get()) = it.get().get(1);
565  g.template get<p::z>(it.get()) = 0;
566  g.template get<p::s>(it.get()) = 1.0;
567  g.template get<p::v>(it.get())[0] = g.getGrid().LinId(it.get());
568  g.template get<p::v>(it.get())[1] = g.getGrid().LinId(it.get());
569  g.template get<p::v>(it.get())[2] = g.getGrid().LinId(it.get());
570 
571  g.template get<p::t>(it.get())[0][0] = g.getGrid().LinId(it.get());
572  g.template get<p::t>(it.get())[0][1] = g.getGrid().LinId(it.get());
573  g.template get<p::t>(it.get())[0][2] = g.getGrid().LinId(it.get());
574  g.template get<p::t>(it.get())[1][0] = g.getGrid().LinId(it.get());
575  g.template get<p::t>(it.get())[1][1] = g.getGrid().LinId(it.get());
576  g.template get<p::t>(it.get())[1][2] = g.getGrid().LinId(it.get());
577  g.template get<p::t>(it.get())[2][0] = g.getGrid().LinId(it.get());
578  g.template get<p::t>(it.get())[2][1] = g.getGrid().LinId(it.get());
579  g.template get<p::t>(it.get())[2][2] = g.getGrid().LinId(it.get());
580 
581  ++it;
582  }
583 }
584 
589 void fill_grid_some_data_scal(grid_cpu<2,Point_test_scal<float>> & g)
590 {
591  typedef Point_test<float> p;
592 
593  auto it = g.getIterator();
594 
595  while (it.isNext())
596  {
597  g.template get<p::x>(it.get()) = it.get().get(0);
598  g.template get<p::y>(it.get()) = it.get().get(1);
599  g.template get<p::z>(it.get()) = 0;
600  g.template get<p::s>(it.get()) = 1.0;
601 
602  ++it;
603  }
604 }
605 
606 BOOST_AUTO_TEST_CASE( vtk_writer_use_grids)
607 {
608  {
609  // Create box grids
610  Point<2,float> offset1({0.0,0.0});
611  Point<2,float> spacing1({0.1,0.2});
612  Box<2,size_t> d1({1,2},{14,15});
613 
614  // Create box grids
615  Point<2,float> offset2({5.0,7.0});
616  Point<2,float> spacing2({0.2,0.1});
617  Box<2,size_t> d2({2,1},{13,15});
618 
619  // Create box grids
620  Point<2,float> offset3({0.0,7.0});
621  Point<2,float> spacing3({0.05,0.07});
622  Box<2,size_t> d3({3,2},{11,10});
623 
624  // Create box grids
625  Point<2,float> offset4({5.0,0.0});
626  Point<2,float> spacing4({0.1,0.1});
627  Box<2,size_t> d4({1,1},{7,7});
628 
629  size_t sz[] = {16,16};
630  grid_cpu<2,Point_test<float>> g1(sz);
631  g1.setMemory();
632  fill_grid_some_data(g1);
633  grid_cpu<2,Point_test<float>> g2(sz);
634  g2.setMemory();
635  fill_grid_some_data(g2);
636  grid_cpu<2,Point_test<float>> g3(sz);
637  g3.setMemory();
638  fill_grid_some_data(g3);
639  grid_cpu<2,Point_test<float>> g4(sz);
640  g4.setMemory();
641  fill_grid_some_data(g4);
642 
643  // Create a writer and write
645  vtk_g.add(g1,offset1,spacing1,d1);
646  vtk_g.add(g2,offset2,spacing2,d2);
647  vtk_g.add(g3,offset3,spacing3,d3);
648  vtk_g.add(g4,offset4,spacing4,d4);
649 
650  vtk_g.write("vtk_grids.vtk");
651 
652  // Check that match
653  bool test = compare("vtk_grids.vtk","vtk_grids_test.vtk");
654  BOOST_REQUIRE_EQUAL(test,true);
655  }
656 
657  {
658  // Create box grids
659  Point<2,float> offset1({0.0,0.0});
660  Point<2,float> spacing1({0.1,0.1});
661  Box<2,size_t> d1({1,2},{14,15});
662 
663  // Create box grids
664  Point<2,float> offset2({0.0,0.0});
665  Point<2,float> spacing2({0.1,0.1});
666  Box<2,size_t> d2({2,1},{13,15});
667 
668  // Create box grids
669  Point<2,float> offset3({5.0,5.0});
670  Point<2,float> spacing3({0.1,0.1});
671  Box<2,size_t> d3({3,2},{11,10});
672 
673  // Create box grids
674  Point<2,float> offset4({5.0,5.0});
675  Point<2,float> spacing4({0.1,0.1});
676  Box<2,size_t> d4({1,1},{7,7});
677 
678  size_t sz[] = {16,16};
679  grid_cpu<2,Point_test<float>> g1(sz);
680  g1.setMemory();
681  fill_grid_some_data(g1);
682  grid_cpu<2,Point_test<float>> g2(sz);
683  g2.setMemory();
684  fill_grid_some_data(g2);
685  grid_cpu<2,Point_test<float>> g3(sz);
686  g3.setMemory();
687  fill_grid_some_data(g3);
688  grid_cpu<2,Point_test<float>> g4(sz);
689  g4.setMemory();
690  fill_grid_some_data(g4);
691 
692  comb<2> cmb;
693  cmb.zero();
694 
695  comb<2> cmb2;
696  cmb2.mone();
697 
698  // Create a writer and write
699  VTKWriter<boost::mpl::pair<grid_cpu<2,Point_test<float>>,float>,VECTOR_ST_GRIDS> vtk_g;
700  vtk_g.add(0,g1,offset1,spacing1,d1,cmb);
701  vtk_g.add(0,g2,offset2,spacing2,d2,cmb);
702  vtk_g.add(1,g3,offset3,spacing3,d3,cmb);
703  vtk_g.add(1,g4,offset4,spacing4,d4,cmb2);
704 
705  vtk_g.write("vtk_grids_st.vtk");
706 
707  // Check that match
708  bool test = compare("vtk_grids_st.vtk","vtk_grids_st_test.vtk");
709  BOOST_REQUIRE_EQUAL(test,true);
710  }
711 
712  {
713  // Create box grids
714  Point<2,float> offset1({0.0,0.0});
715  Point<2,float> spacing1({0.1,0.1});
716  Box<2,size_t> d1({1,2},{14,15});
717 
718  // Create box grids
719  Point<2,float> offset2({0.0,0.0});
720  Point<2,float> spacing2({0.1,0.1});
721  Box<2,size_t> d2({2,1},{13,15});
722 
723  // Create box grids
724  Point<2,float> offset3({5.0,5.0});
725  Point<2,float> spacing3({0.1,0.1});
726  Box<2,size_t> d3({3,2},{11,10});
727 
728  // Create box grids
729  Point<2,float> offset4({5.0,5.0});
730  Point<2,float> spacing4({0.1,0.1});
731  Box<2,size_t> d4({1,1},{7,7});
732 
733  size_t sz[] = {16,16};
734  grid_cpu<2,Point_test_scal<float>> g1(sz);
735  g1.setMemory();
736  fill_grid_some_data_scal(g1);
737  grid_cpu<2,Point_test_scal<float>> g2(sz);
738  g2.setMemory();
739  fill_grid_some_data_scal(g2);
740  grid_cpu<2,Point_test_scal<float>> g3(sz);
741  g3.setMemory();
742  fill_grid_some_data_scal(g3);
743  grid_cpu<2,Point_test_scal<float>> g4(sz);
744  g4.setMemory();
745  fill_grid_some_data_scal(g4);
746 
747  // Create a writer and write
749  vtk_g.add(g1,offset1,spacing1,d1);
750  vtk_g.add(g2,offset2,spacing2,d2);
751  vtk_g.add(g3,offset3,spacing3,d3);
752  vtk_g.add(g4,offset4,spacing4,d4);
753 
754  vtk_g.write("vtk_grids_prp.vtk");
755 
756  // Check that match
757  bool test = compare("vtk_grids_prp.vtk","vtk_grids_prp_test.vtk");
758  BOOST_REQUIRE_EQUAL(test,true);
759  }
760 }
761 
762 BOOST_AUTO_TEST_CASE( vtk_writer_use_point_set )
763 {
764  {
765  // Create 3 vectors with random particles
766  openfpm::vector<Point<3,double>> v1ps;
767  openfpm::vector<Point<3,double>> v2ps;
768  openfpm::vector<Point<3,double>> v3ps;
769  openfpm::vector<aggregate<float,float[3]>> v1pp;
770  openfpm::vector<aggregate<float,float[3]>> v2pp;
771  openfpm::vector<aggregate<float,float[3]>> v3pp;
772 
773  // set the seed
774  // create the random generator engine
775  SimpleRNG rng;
776 
777  // fill the vector with random data
778  v1ps.resize(100);
779  v2ps.resize(100);
780  v3ps.resize(100);
781 
782  v1pp.resize(100);
783  v2pp.resize(100);
784  v3pp.resize(100);
785 
786  for (size_t i = 0 ; i < v1ps.size(); i++)
787  {
788  v1ps.template get<0>(i)[0] = rng.GetUniform();
789  v1ps.template get<0>(i)[1] = rng.GetUniform();
790  v1ps.template get<0>(i)[2] = rng.GetUniform();
791 
792  v2ps.template get<0>(i)[0] = rng.GetUniform()*0.5;
793  v2ps.template get<0>(i)[1] = rng.GetUniform()*0.5;
794  v2ps.template get<0>(i)[2] = rng.GetUniform()*0.5;
795 
796  v3ps.template get<0>(i)[0] = rng.GetUniform()*0.3;
797  v3ps.template get<0>(i)[1] = rng.GetUniform()*0.3;
798  v3ps.template get<0>(i)[2] = rng.GetUniform()*0.3;
799 
800  v1pp.template get<0>(i) = rng.GetUniform();
801  v1pp.template get<1>(i)[0] = rng.GetUniform();
802  v1pp.template get<1>(i)[1] = rng.GetUniform();
803  v1pp.template get<1>(i)[2] = rng.GetUniform();
804 
805  v2pp.template get<0>(i) = rng.GetUniform();
806  v2pp.template get<1>(i)[0] = rng.GetUniform();
807  v2pp.template get<1>(i)[1] = rng.GetUniform();
808  v2pp.template get<1>(i)[2] = rng.GetUniform();
809 
810  v3pp.template get<0>(i) = rng.GetUniform();
811  v3pp.template get<1>(i)[0] = rng.GetUniform();
812  v3pp.template get<1>(i)[1] = rng.GetUniform();
813  v3pp.template get<1>(i)[2] = rng.GetUniform();
814  }
815 
816  // Create a writer and write
817  VTKWriter<boost::mpl::pair<openfpm::vector<Point<3,double>>,openfpm::vector<aggregate<float,float[3]>>>,VECTOR_POINTS> vtk_v;
818  vtk_v.add(v1ps,v1pp,75);
819  vtk_v.add(v2ps,v2pp,88);
820  vtk_v.add(v3ps,v3pp,90);
821 
822  vtk_v.write("vtk_points.vtk");
823 
824  // Check that match
825  bool test = compare("vtk_points.vtk","vtk_points_test.vtk");
826  BOOST_REQUIRE_EQUAL(test,true);
827  }
828 }
829 
830 BOOST_AUTO_TEST_SUITE_END()
831 
832 #endif /* VTKWRITER_UNIT_TESTS_HPP_ */
static const unsigned int x
computation property id in boost::fusion::vector
float s_type
type of the positional field
type data
The data.
type data
The data.
boost::fusion::vector< float[2], size_t, double > type
The node contain 3 unsigned long integer for communication computation memory and id...
vertex3(float x, float y)
Initialize the VTKVertex.
boost::fusion::vector< float[3], size_t, double > type
The node contain 3 unsigned long integer for communication computation memory and id...
boost::fusion::vector< float, float, float, float, size_t, double, unsigned char, long int > type
The node contain 3 unsigned long integer for communication computation memory and id...
float s_type
type of the positional field
static const unsigned int x
computation property id in boost::fusion::vector
vertex2(float x, float y, float z)
Initialize the VTKVertex.
static const unsigned int max_prop
total number of properties boost::fusion::vector
static const unsigned int max_prop
total number of properties boost::fusion::vector
vertex(float x, float y, float z)
Initialize the VTKVertex.
type data
The data.
float s_type
type of the positional field