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 vtkGhostCellsGenerator
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 * vtkGhostCellsGenerator
31 #ifndef vtkStaticPUnstructuredGridGhostCellsGenerator_h
32 #define vtkStaticPUnstructuredGridGhostCellsGenerator_h
35 #include <vtkGhostCellsGenerator.h>
39 #include "StaticMeshModuleModule.h"
43 class vtkUnstructuredGrid;
45 class STATICMESHMODULE_EXPORT vtkStaticPUnstructuredGridGhostCellsGenerator
46 : public vtkGhostCellsGenerator
49 static vtkStaticPUnstructuredGridGhostCellsGenerator* New();
50 typedef vtkGhostCellsGenerator
51 Superclass; // vtkTypeMacro can't be used with a factory built object
52 void PrintSelf(ostream& os, vtkIndent indent) override;
54 int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
57 vtkStaticPUnstructuredGridGhostCellsGenerator();
58 ~vtkStaticPUnstructuredGridGhostCellsGenerator() override = default;
61 * Check input for "ProcessId" and "Ids" point and cell array,
62 * If absent, compute and add them.
64 static void AddIdsArrays(vtkDataSet* input, vtkDataSet* output);
67 * Using the Cache, exchange and update ghost point and cell
70 virtual void ProcessGhostIds();
73 * Update cache with input and with ghost cells info
75 virtual void UpdateCacheData(vtkDataSet* input);
78 * Copy input point, cell and field data into cache
80 virtual void UpdateCacheDataWithInput(vtkDataSet* input);
83 * Using Cached ghost cell and points info
84 * Update ghost cell and point data in cache
85 * by sending input point and cell data to other ranks
87 virtual void UpdateCacheGhostCellAndPointData(vtkDataSet* input);
90 vtkStaticPUnstructuredGridGhostCellsGenerator(
91 const vtkStaticPUnstructuredGridGhostCellsGenerator&) = delete;
92 void operator=(const vtkStaticPUnstructuredGridGhostCellsGenerator&) = delete;
94 vtkNew<vtkUnstructuredGrid> Cache;
95 vtkMTimeType InputMeshTime = 0;
96 vtkMTimeType FilterMTime = 0;
98 std::vector<vtkNew<vtkIdList> > GhostCellsToReceive;
99 std::vector<vtkNew<vtkIdList> > GhostCellsToSend;
100 std::vector<vtkNew<vtkIdList> > GhostPointsToReceive;
101 std::vector<vtkNew<vtkIdList> > GhostPointsToSend;