1 /*=========================================================================
2 
3  Program:   Visualization Toolkit
4  Module:    vtkPDataSetGhostGenerator.h
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 /**
16  * @class   vtkPDataSetGhostGenerator
17  *
18  *
19  *  An abstract class that provides common functionality and implements an
20  *  interface for all parallel ghost data generators.
21  *
22  * @sa
23  * vtkDataSetGhostGenerator, vtkPUniformGridGhostDataGenerator,
24  * vtkPStructuredGridGhostDataGenerator, vtkPRectilinearGridGhostDataGenerator
25 */
26 
27 #ifndef vtkPDataSetGhostGenerator_h
28 #define vtkPDataSetGhostGenerator_h
29 
30 #include "vtkFiltersParallelGeometryModule.h" // For export macro
31 #include "vtkDataSetGhostGenerator.h"
32 
33 class vtkMultiProcessController;
34 class vtkMultiBlockDataSet;
35 
36 class VTKFILTERSPARALLELGEOMETRY_EXPORT vtkPDataSetGhostGenerator :
37   public vtkDataSetGhostGenerator
38 {
39 public:
40    vtkTypeMacro(vtkPDataSetGhostGenerator,vtkDataSetGhostGenerator);
41    void PrintSelf(ostream& os, vtkIndent indent) override;
42 
43    //@{
44    /**
45     * Get/Set macro for the multi-process controller. If a controller is not
46     * supplied, then, the global controller is assumed.
47     */
48    vtkSetMacro(Controller, vtkMultiProcessController*);
49    vtkGetMacro(Controller, vtkMultiProcessController*);
50    //@}
51 
52    /**
53     * Initializes
54     */
55    void Initialize();
56 
57    /**
58     * Barrier synchronization
59     */
60    void Barrier();
61 
62 protected:
63   vtkPDataSetGhostGenerator();
64   ~vtkPDataSetGhostGenerator() override;
65 
66   /**
67    * Creates ghost layers. Implemented by concrete implementations.
68    */
69   virtual void GenerateGhostLayers(
70       vtkMultiBlockDataSet *in, vtkMultiBlockDataSet *out) override = 0;
71 
72   int Rank;
73   bool Initialized;
74   vtkMultiProcessController *Controller;
75 
76 private:
77   vtkPDataSetGhostGenerator(const vtkPDataSetGhostGenerator&) = delete;
78   void operator=(const vtkPDataSetGhostGenerator&) = delete;
79 };
80 
81 #endif /* vtkPDataSetGhostGenerator_h */
82