1 /*=========================================================================
3 Program: Visualization Toolkit
4 Module: vtkStaticPUnstructuredGridGhostCellsGenerator.h
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
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.
14 =========================================================================*/
16 * @class vtkStaticPUnstructuredGridGhostCellsGenerator
17 * @brief StaticMesh aware GhostCellGenerator implementation
19 * This class specialize vtkPUnstructuredGridGhostCellGenerator
20 * This class improves it by making it static mesh aware.
21 * The first time this filter is executed it will store its output
22 * in a cache as well as a list of ghost and point ids to request from other rank
23 * On next execution, if the mesh is static, it will uses the list of ids to request
24 * only point and cell data for the ghost point and cell from other
25 * allowing to update the output without needing to recompute everything
28 * vtkPUnstructuredGridGhostCellsGenerator
31 #ifndef vtkStaticPUnstructuredGridGhostCellsGenerator_h
32 #define vtkStaticPUnstructuredGridGhostCellsGenerator_h
34 #include <vtkIdList.h>
36 #include <vtkPUnstructuredGridGhostCellsGenerator.h>
37 #include <vtkSmartPointer.h>
41 class vtkUnstructuredGrid;
43 class vtkStaticPUnstructuredGridGhostCellsGenerator : public vtkPUnstructuredGridGhostCellsGenerator
46 static vtkStaticPUnstructuredGridGhostCellsGenerator* New();
47 typedef vtkPUnstructuredGridGhostCellsGenerator
48 Superclass; // vtkTypeMacro can't be used with a factory built object
49 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
51 int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) VTK_OVERRIDE;
54 vtkStaticPUnstructuredGridGhostCellsGenerator();
55 ~vtkStaticPUnstructuredGridGhostCellsGenerator() VTK_OVERRIDE;
58 * Check input for "ProcessId" and "Ids" point and cell array,
59 * If absent, compute and add them.
61 static void AddIdsArrays(vtkDataSet* input, vtkDataSet* output);
64 * Using the Cache, exchange and update ghost point and cell
67 virtual void ProcessGhostIds();
70 * Update cache with input and with ghost cells info
72 virtual void UpdateCacheData(vtkDataSet* input);
75 * Copy input point, cell and field data into cache
77 virtual void UpdateCacheDataWithInput(vtkDataSet* input);
80 * Using Cached ghost cell and points info
81 * Update ghost cell and point data in cache
82 * by sending input point and cell data to other ranks
84 virtual void UpdateCacheGhostCellAndPointData(vtkDataSet* input);
86 vtkNew<vtkUnstructuredGrid> Cache;
87 vtkMTimeType InputMeshTime;
88 vtkMTimeType FilterMTime;
90 std::vector<vtkSmartPointer<vtkIdList> > GhostCellsToReceive;
91 std::vector<vtkSmartPointer<vtkIdList> > GhostCellsToSend;
92 std::vector<vtkSmartPointer<vtkIdList> > GhostPointsToReceive;
93 std::vector<vtkSmartPointer<vtkIdList> > GhostPointsToSend;
96 // Hide these from the user and the compiler.
97 vtkStaticPUnstructuredGridGhostCellsGenerator(
98 const vtkStaticPUnstructuredGridGhostCellsGenerator&) VTK_DELETE_FUNCTION;
99 void operator=(const vtkStaticPUnstructuredGridGhostCellsGenerator&) VTK_DELETE_FUNCTION;