This file is indexed.

/usr/include/paraview/vtkPUnstructuredGridGhostCellsGenerator.h is in paraview-dev 5.1.2+dfsg1-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkPUnstructuredGridGhostCellsGenerator.h

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/

// .NAME vtkPUnstructuredGridGhostCellsGenerator - Builds ghost cells for a
//  distributed unstructured grid dataset.
//
// .SECTION Description
// This filter generate ghost cells for distributed a unstructured grid in
// parallel - using MPI asynchronous communications.
// The filter can take benefit of the input grid point global ids to perform.
//
// .SECTION Caveats
//  <ul>
//    <li> A step of 'all reduce' (each processor send/receive data to/from
//         all other processors.
//    <li> The code currently assumes one grid per rank. </li>
//    <li> PointData and CellData must match across partitions/processes. </li>
//  </ul>
//
// .SECTION See Also
// vtkDistributedDataFilter vtkPUnstructuredGridGhostDataGenerator
//
// .SECTION Thanks
// This filter has been developed by Joachim Pouderoux, Kitware SAS 2015.
//
// This filter was expanded to compute multiple ghost layers by Boonthanome
// Nouanesengsy and John Patchett, Los Alamos National Laboratory 2016.
//
// ************************************************
//
// This filter uses different algorithms when obtaining the first layer of
// ghost cells and getting subsequent layers.
//
// First ghost cell layer algorithm:
//   - each proc obtains surface points using the surface filter
//   - perform an all-to-all to share surface points with each other
//   - for each other proc, look at their points, and see if any points
//     match any of your local points
//   - for each matching point, find all local cells which use those points,
//     and send those cells to that proc. mark the cells that were sent
//     (used for later ghost layers)
//   - receive all cells sent to you, and merge everything together
//
// Subsequent ghost layers
//   - for each cell that was sent last round, find all other local cells
//     which border these cells. 'local cells' also includes all ghost cells
//     which i have. send these cells to the same proc, and mark them as sent
//     last round
//   - receive all cells sent to you, and merge everything together
//   - if another layer is needed, repeat
//

#ifndef vtkPUnstructuredGridGhostCellsGenerator_h
#define vtkPUnstructuredGridGhostCellsGenerator_h

#include "vtkFiltersParallelGeometryModule.h" // For export macro
#include "vtkUnstructuredGridAlgorithm.h"

class vtkMultiProcessController;
class vtkUnstructuredGrid;
class vtkUnstructuredGridBase;

class VTKFILTERSPARALLELGEOMETRY_EXPORT vtkPUnstructuredGridGhostCellsGenerator:
  public vtkUnstructuredGridAlgorithm
{
  vtkTypeMacro(vtkPUnstructuredGridGhostCellsGenerator, vtkUnstructuredGridAlgorithm);

public:
  void PrintSelf(ostream& os, vtkIndent indent);

  static vtkPUnstructuredGridGhostCellsGenerator *New();

  // Description:
  // Set/Get the MPI multi process controller object.
  void SetController(vtkMultiProcessController *c);
  vtkGetObjectMacro(Controller, vtkMultiProcessController);

  // Description:
  // Specify if the filter must take benefit of global point ids if they exist.
  // If false, point coordinates are used. Default is TRUE.
  vtkSetMacro(UseGlobalPointIds, bool);
  vtkGetMacro(UseGlobalPointIds, bool);
  vtkBooleanMacro(UseGlobalPointIds, bool);

  // Description:
  // Specify the name of the global point ids data array if the GlobalIds
  // attribute array is not set. Default is "GlobalNodeIds".
  vtkSetStringMacro(GlobalPointIdsArrayName);
  vtkGetStringMacro(GlobalPointIdsArrayName);

  // Description:
  // Specify if the data has global cell ids.
  // If more than one layer of ghost cells is needed, global cell ids are
  // necessary. If global cell ids are not provided, they will be computed
  // internally.
  // If false, global cell ids will be computed, then deleted afterwards.
  // Default is FALSE.
  vtkSetMacro(HasGlobalCellIds, bool);
  vtkGetMacro(HasGlobalCellIds, bool);
  vtkBooleanMacro(HasGlobalCellIds, bool);

  // Description:
  // Specify the name of the global cell ids data array if the GlobalIds
  // attribute array is not set. Default is "GlobalNodeIds".
  vtkSetStringMacro(GlobalCellIdsArrayName);
  vtkGetStringMacro(GlobalCellIdsArrayName);

  // Description:
  // Specify if the filter must generate the ghost cells only if required by
  // the pipeline.
  // If false, ghost cells are computed even if they are not required.
  // Default is TRUE.
  vtkSetMacro(BuildIfRequired, bool);
  vtkGetMacro(BuildIfRequired, bool);
  vtkBooleanMacro(BuildIfRequired, bool);

  // Description:
  // When BuildIfRequired is `false`, this can be used to set the minimum number
  // of ghost levels to generate. Note, if the downstream pipeline requests more
  // ghost levels than the number specified here, then the filter will generate
  // those extra ghost levels as needed. Accepted values are in the interval
  // [1, VTK_INT_MAX].
  vtkSetClampMacro(MinimumNumberOfGhostLevels, int, 1, VTK_INT_MAX);
  vtkGetMacro(MinimumNumberOfGhostLevels, int);

protected:
  vtkPUnstructuredGridGhostCellsGenerator();
  ~vtkPUnstructuredGridGhostCellsGenerator();

  virtual int RequestData(vtkInformation *, vtkInformationVector **,
    vtkInformationVector *);

  void GetFirstGhostLayer(int, vtkUnstructuredGrid *);

  void ExtractAndReduceSurfacePoints();

  void ComputeSharedPoints();

  void ExtractAndSendGhostCells(vtkUnstructuredGridBase *);

  void ReceiveAndMergeGhostCells(int, vtkUnstructuredGridBase *,
    vtkUnstructuredGrid *);

  void AddGhostLayer(int ghostLevel, int maxGhostLevel);

  void FindGhostCells();

  void AddGlobalCellIds();

  void RemoveGlobalCellIds();


  vtkMultiProcessController *Controller;

  int NumRanks;
  int RankId;
  char *GlobalPointIdsArrayName;
  bool UseGlobalPointIds;
  char *GlobalCellIdsArrayName;
  bool HasGlobalCellIds;
  bool BuildIfRequired;
  int MinimumNumberOfGhostLevels;

private:
  struct vtkInternals;
  vtkInternals *Internals;

  vtkPUnstructuredGridGhostCellsGenerator(const vtkPUnstructuredGridGhostCellsGenerator&); // Not implemented
  void operator=(const vtkPUnstructuredGridGhostCellsGenerator&); // Not implemented
};

#endif