1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestRectilinearGridPartitioner.cxx
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 // .NAME TestRectilinearGridPartitioner.cxx -- Simple test for partitioning
16 //  rectilinear grids.
17 //
18 // .SECTION Description
19 //  Simple test for rectilinear grid partitioner
20 
21 #include <cassert>
22 #include <iostream>
23 #include <sstream>
24 
25 #include "vtkMultiBlockDataSet.h"
26 #include "vtkRectilinearGrid.h"
27 #include "vtkRectilinearGridPartitioner.h"
28 #include "vtkXMLMultiBlockDataWriter.h"
29 #include "vtkXMLRectilinearGridReader.h"
30 
31 //------------------------------------------------------------------------------
32 // Description:
33 // Writes multi-block dataset to grid
WriteMultiBlock(const std::string & file,vtkMultiBlockDataSet * mbds)34 void WriteMultiBlock(const std::string& file, vtkMultiBlockDataSet* mbds)
35 {
36   assert("pre: nullptr multi-block dataset!" && (mbds != nullptr));
37 
38   std::ostringstream oss;
39   vtkXMLMultiBlockDataWriter* writer = vtkXMLMultiBlockDataWriter::New();
40 
41   oss << file << "." << writer->GetDefaultFileExtension();
42   writer->SetFileName(oss.str().c_str());
43   writer->SetInputData(mbds);
44   writer->Update();
45   writer->Delete();
46 }
47 
48 //------------------------------------------------------------------------------
49 // Description:
50 // Get grid from file
GetGridFromFile(std::string & file)51 vtkRectilinearGrid* GetGridFromFile(std::string& file)
52 {
53   vtkXMLRectilinearGridReader* reader = vtkXMLRectilinearGridReader::New();
54   reader->SetFileName(file.c_str());
55   reader->Update();
56   vtkRectilinearGrid* myGrid = vtkRectilinearGrid::New();
57   myGrid->DeepCopy(reader->GetOutput());
58   reader->Delete();
59   return (myGrid);
60 }
61 
62 //------------------------------------------------------------------------------
63 // Description:
64 // Program Main
TestRectilinearGridPartitioner(int argc,char * argv[])65 int TestRectilinearGridPartitioner(int argc, char* argv[])
66 {
67   if (argc != 3)
68   {
69     std::cout << "Usage: ./TestRectilinearGridPartitioner <vtsfile> <N>\n";
70     std::cout.flush();
71     return -1;
72   }
73 
74   std::string fileName = std::string(argv[1]);
75   int NumPartitions = atoi(argv[2]);
76 
77   vtkRectilinearGrid* grid = GetGridFromFile(fileName);
78   assert("pre: grid is not nullptr" && (grid != nullptr));
79 
80   vtkRectilinearGridPartitioner* gridPartitioner = vtkRectilinearGridPartitioner::New();
81   gridPartitioner->SetInputData(grid);
82   gridPartitioner->SetNumberOfPartitions(NumPartitions);
83   gridPartitioner->Update();
84 
85   std::cout << "Writing the partitioned output...";
86   std::cout.flush();
87   vtkMultiBlockDataSet* mbds = gridPartitioner->GetOutput();
88   WriteMultiBlock("PartitionedGrid", mbds);
89   std::cout << "[DONE]\n";
90   std::cout.flush();
91 
92   grid->Delete();
93   gridPartitioner->Delete();
94   return 0;
95 }
96