VTK
vtkDistributedDataFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDistributedDataFilter.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  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 
91 #ifndef __vtkDistributedDataFilter_h
92 #define __vtkDistributedDataFilter_h
93 
94 #include "vtkFiltersParallelMPIModule.h" // For export macro
95 #include "vtkDataObjectAlgorithm.h"
96 
97 class vtkBSPCuts;
98 class vtkDataArray;
99 class vtkDistributedDataFilterSTLCloak;
100 class vtkFloatArray;
101 class vtkIdList;
102 class vtkIdTypeArray;
103 class vtkIntArray;
104 class vtkModelMetadata;
106 class vtkPKdTree;
107 class vtkUnstructuredGrid;
108 
109 class VTKFILTERSPARALLELMPI_EXPORT vtkDistributedDataFilter: public vtkDataObjectAlgorithm
110 {
111  vtkTypeMacro(vtkDistributedDataFilter,
113 
114 public:
115  void PrintSelf(ostream& os, vtkIndent indent);
116 
117  static vtkDistributedDataFilter *New();
118 
120 
121  void SetController(vtkMultiProcessController *c);
122  vtkGetObjectMacro(Controller, vtkMultiProcessController);
124 
133  vtkPKdTree *GetKdtree();
134 
149  vtkBooleanMacro(RetainKdtree, int);
150  vtkGetMacro(RetainKdtree, int);
151  vtkSetMacro(RetainKdtree, int);
152 
162  vtkBooleanMacro(IncludeAllIntersectingCells, int);
163  vtkGetMacro(IncludeAllIntersectingCells, int);
164  vtkSetMacro(IncludeAllIntersectingCells, int);
165 
170  vtkBooleanMacro(ClipCells, int);
171  vtkGetMacro(ClipCells, int);
172  vtkSetMacro(ClipCells, int);
173 
174 //BTX
176  ASSIGN_TO_ONE_REGION=0,
177  ASSIGN_TO_ALL_INTERSECTING_REGIONS=1,
178  SPLIT_BOUNDARY_CELLS=2
179  };
180 //ETX
181 
183 
184  void SetBoundaryMode(int mode);
185  void SetBoundaryModeToAssignToOneRegion()
186  { this->SetBoundaryMode(vtkDistributedDataFilter::ASSIGN_TO_ONE_REGION); }
187  void SetBoundaryModeToAssignToAllIntersectingRegions()
188  { this->SetBoundaryMode(
190  }
191  void SetBoundaryModeToSplitBoundaryCells()
192  { this->SetBoundaryMode(vtkDistributedDataFilter::SPLIT_BOUNDARY_CELLS); }
193  int GetBoundaryMode();
195 
198 
206  vtkBooleanMacro(UseMinimalMemory, int);
207  vtkGetMacro(UseMinimalMemory, int);
208  vtkSetMacro(UseMinimalMemory, int);
209 
210 
213  vtkBooleanMacro(Timing, int);
214  vtkSetMacro(Timing, int);
215  vtkGetMacro(Timing, int);
216 
218 
223  vtkBSPCuts* GetCuts() {return this->UserCuts;}
224  void SetCuts(vtkBSPCuts* cuts);
226 
235  void SetUserRegionAssignments(const int *map, int numRegions);
236 
237 protected:
240 
246  void AssignBoundaryCellsToOneRegionOn();
247  void AssignBoundaryCellsToOneRegionOff();
248  void SetAssignBoundaryCellsToOneRegion(int val);
249 
257  void AssignBoundaryCellsToAllIntersectingRegionsOn();
258  void AssignBoundaryCellsToAllIntersectingRegionsOff();
259  void SetAssignBoundaryCellsToAllIntersectingRegions(int val);
260 
267  void DivideBoundaryCellsOn();
268  void DivideBoundaryCellsOff();
269  void SetDivideBoundaryCells(int val);
270 
277  void SingleProcessExecute(vtkDataSet *input, vtkUnstructuredGrid *output);
281 
283 
286  virtual int RequestDataObject(vtkInformation*,
290 
292 
293  int RequestDataInternal(vtkDataSet* input, vtkUnstructuredGrid* output);
294 //BTX
295 private:
297 
298  enum{
299  DeleteNo = 0,
300  DeleteYes = 1
301  };
302 
303  enum{
304  DuplicateCellsNo = 0,
305  DuplicateCellsYes = 1
306  };
307 
308  enum{
309  GhostCellsNo = 0,
310  GhostCellsYes = 1
311  };
312 
313  enum{
314  UnsetGhostLevel = 99
315  };
316 
318  int PartitionDataAndAssignToProcesses(vtkDataSet *set);
319 
321  vtkUnstructuredGrid *RedistributeDataSet(vtkDataSet *set, vtkDataSet *input);
322 
324  int ClipGridCells(vtkUnstructuredGrid *grid);
325 
327  vtkUnstructuredGrid * AcquireGhostCells(vtkUnstructuredGrid *grid);
328 
330  void ComputeMyRegionBounds();
331 
333  int CheckFieldArrayTypes(vtkDataSet *set);
334 
337  vtkDataSet *TestFixTooFewInputFiles(vtkDataSet *input);
338 
340  vtkUnstructuredGrid *MPIRedistribute(vtkDataSet *in, vtkDataSet *input);
341 
343  vtkIdList **GetCellIdsForProcess(int proc, int *nlists);
344 
347  void SetUpPairWiseExchange();
348 
350 
351  void FreeIntArrays(vtkIdTypeArray **ar);
352  static void FreeIdLists(vtkIdList**lists, int nlists);
353  static vtkIdType GetIdListSize(vtkIdList**lists, int nlists);
355 
357 
358  vtkIdTypeArray *ExchangeCounts(vtkIdType myCount, int tag);
359  vtkIdTypeArray *ExchangeCountsLean(vtkIdType myCount, int tag);
360  vtkIdTypeArray *ExchangeCountsFast(vtkIdType myCount, int tag);
362 
364 
365  vtkIdTypeArray **ExchangeIdArrays(vtkIdTypeArray **arIn,
366  int deleteSendArrays, int tag);
367  vtkIdTypeArray **ExchangeIdArraysLean(vtkIdTypeArray **arIn,
368  int deleteSendArrays, int tag);
369  vtkIdTypeArray **ExchangeIdArraysFast(vtkIdTypeArray **arIn,
370  int deleteSendArrays, int tag);
372 
374 
375  vtkFloatArray **ExchangeFloatArrays(vtkFloatArray **myArray,
376  int deleteSendArrays, int tag);
377  vtkFloatArray **ExchangeFloatArraysLean(vtkFloatArray **myArray,
378  int deleteSendArrays, int tag);
379  vtkFloatArray **ExchangeFloatArraysFast(vtkFloatArray **myArray,
380  int deleteSendArrays, int tag);
382 
384 
385  vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList **cellIds, int deleteCellIds,
386  vtkDataSet *myGrid, int deleteMyGrid,
387  int filterOutDuplicateCells, int ghostCellFlag, int tag);
388  vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList ***cellIds, int *numLists,
389  int deleteCellIds,
390  vtkDataSet *myGrid, int deleteMyGrid,
391  int filterOutDuplicateCells, int ghostCellFlag, int tag);
392  vtkUnstructuredGrid *ExchangeMergeSubGridsLean(
393  vtkIdList ***cellIds, int *numLists,
394  int deleteCellIds,
395  vtkDataSet *myGrid, int deleteMyGrid,
396  int filterOutDuplicateCells, int ghostCellFlag, int tag);
397  vtkUnstructuredGrid *ExchangeMergeSubGridsFast(
398  vtkIdList ***cellIds, int *numLists,
399  int deleteCellIds,
400  vtkDataSet *myGrid, int deleteMyGrid,
401  int filterOutDuplicateCells, int ghostCellFlag, int tag);
403 
404 
406 
407  char *MarshallDataSet(vtkUnstructuredGrid *extractedGrid, int &size);
408  vtkUnstructuredGrid *UnMarshallDataSet(char *buf, int size);
410 
412 
413  void ClipCellsToSpatialRegion(vtkUnstructuredGrid *grid);
414  void ClipWithVtkClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
415  vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
417 
418  void ClipWithBoxClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
419  vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
420 
422 
426  vtkIdTypeArray *GetGlobalNodeIdArray(vtkDataSet *set);
427  vtkIdType *GetGlobalNodeIds(vtkDataSet *set);
428  vtkIdTypeArray *GetGlobalElementIdArray(vtkDataSet *set);
429  vtkIdType *GetGlobalElementIds(vtkDataSet *set);
430  int AssignGlobalNodeIds(vtkUnstructuredGrid *grid);
431  int AssignGlobalElementIds(vtkDataSet *in);
432  vtkIdTypeArray **FindGlobalPointIds(vtkFloatArray **ptarray,
433  vtkIdTypeArray *ids, vtkUnstructuredGrid *grid, vtkIdType &numUniqueMissingPoints);
435 
437 
438  vtkIdTypeArray **MakeProcessLists(vtkIdTypeArray **pointIds,
439  vtkDistributedDataFilterSTLCloak *procs);
441 
443 
444  vtkIdList **BuildRequestedGrids( vtkIdTypeArray **globalPtIds,
445  vtkUnstructuredGrid *grid,
446  vtkDistributedDataFilterSTLCloak *ptIdMap);
448 
450 
451  int InMySpatialRegion(float x, float y, float z);
452  int InMySpatialRegion(double x, double y, double z);
453  int StrictlyInsideMyBounds(float x, float y, float z);
454  int StrictlyInsideMyBounds(double x, double y, double z);
456 
458 
459  vtkIdTypeArray **GetGhostPointIds(int ghostLevel, vtkUnstructuredGrid *grid,
460  int AddCellsIAlreadyHave);
461  vtkUnstructuredGrid *AddGhostCellsUniqueCellAssignment(
462  vtkUnstructuredGrid *myGrid,
463  vtkDistributedDataFilterSTLCloak *globalToLocalMap);
464  vtkUnstructuredGrid *AddGhostCellsDuplicateCellAssignment(
465  vtkUnstructuredGrid *myGrid,
466  vtkDistributedDataFilterSTLCloak *globalToLocalMap);
467  vtkUnstructuredGrid *SetMergeGhostGrid(
468  vtkUnstructuredGrid *ghostCellGrid,
469  vtkUnstructuredGrid *incomingGhostCells,
470  int ghostLevel, vtkDistributedDataFilterSTLCloak *idMap);
472 
474 
475  vtkUnstructuredGrid *ExtractCells(vtkIdList *list,
476  int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
477  vtkUnstructuredGrid *ExtractCells(vtkIdList **lists, int nlists,
478  int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
479  vtkUnstructuredGrid *ExtractZeroCellGrid(vtkDataSet *in,
480  vtkModelMetadata *mmd);
482 
484 
485  static int GlobalPointIdIsUsed(vtkUnstructuredGrid *grid,
486  int ptId, vtkDistributedDataFilterSTLCloak *globalToLocal);
487  static int LocalPointIdIsUsed(vtkUnstructuredGrid *grid, int ptId);
488  static vtkIdType FindId(vtkIdTypeArray *ids, vtkIdType gid, vtkIdType startLoc);
490 
492 
493  static vtkIdTypeArray *AddPointAndCells(vtkIdType gid,
494  vtkIdType localId,
495  vtkUnstructuredGrid *grid,
496  vtkIdType *gidCells,
497  vtkIdTypeArray *ids);
499 
501 
502  static void AddConstantUnsignedCharPointArray(vtkUnstructuredGrid *grid,
503  const char *arrayName, unsigned char val);
504  static void AddConstantUnsignedCharCellArray(vtkUnstructuredGrid *grid,
505  const char *arrayName, unsigned char val);
507 
509 
510  static void RemoveRemoteCellsFromList(vtkIdList *cellList,
511  vtkIdType *gidCells,
512  vtkIdType *remoteCells,
513  vtkIdType nRemoteCells);
515 
517 
518  static vtkUnstructuredGrid *MergeGrids(vtkDataSet **sets, int nsets,
519  int deleteDataSets,
520  int useGlobalNodeIds, float pointMergeTolerance,
521  int useGlobalCellIds);
523 
525 
526  void AddMetadata(vtkUnstructuredGrid *grid, vtkModelMetadata *mmd);
527  static int HasMetadata(vtkDataSet *s);
529 
530  vtkPKdTree *Kdtree;
531  vtkMultiProcessController *Controller;
532 
533  int NumProcesses;
534  int MyId;
535 
536  int *Target;
537  int *Source;
538 
539  int NumConvexSubRegions;
540  double *ConvexSubRegionBounds;
541 
542  int GhostLevel;
543 
544  int RetainKdtree;
545  int IncludeAllIntersectingCells;
546  int ClipCells;
547  int AssignBoundaryCellsToOneRegion;
548  int AssignBoundaryCellsToAllIntersectingRegions;
549  int DivideBoundaryCells;
550 
551  int Timing;
552 
553  int NextProgressStep;
554  double ProgressIncrement;
555 
556  int UseMinimalMemory;
557 
558  vtkBSPCuts* UserCuts;
559 
560  vtkDistributedDataFilter(const vtkDistributedDataFilter&); // Not implemented
561  void operator=(const vtkDistributedDataFilter&); // Not implemented
562 
563  class vtkInternals;
564  vtkInternals* Internals;
565 //ETX
566 };
567 #endif