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)34void 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)51vtkRectilinearGrid* 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[])65int 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