/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
|