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 "vtkDataObjectAlgorithm.h"
95 
96 class vtkBSPCuts;
97 class vtkDataArray;
98 class vtkDistributedDataFilterSTLCloak;
99 class vtkFloatArray;
100 class vtkIdList;
101 class vtkIdTypeArray;
102 class vtkIntArray;
103 class vtkModelMetadata;
105 class vtkPKdTree;
106 class vtkUnstructuredGrid;
107 
109 {
110  vtkTypeMacro(vtkDistributedDataFilter,
112 
113 public:
114  void PrintSelf(ostream& os, vtkIndent indent);
115 
116  static vtkDistributedDataFilter *New();
117 
119 
120  void SetController(vtkMultiProcessController *c);
121  vtkGetObjectMacro(Controller, vtkMultiProcessController);
123 
132  vtkPKdTree *GetKdtree();
133 
148  vtkBooleanMacro(RetainKdtree, int);
149  vtkGetMacro(RetainKdtree, int);
150  vtkSetMacro(RetainKdtree, int);
151 
161  vtkBooleanMacro(IncludeAllIntersectingCells, int);
162  vtkGetMacro(IncludeAllIntersectingCells, int);
163  vtkSetMacro(IncludeAllIntersectingCells, int);
164 
169  vtkBooleanMacro(ClipCells, int);
170  vtkGetMacro(ClipCells, int);
171  vtkSetMacro(ClipCells, int);
172 
173 //BTX
175  ASSIGN_TO_ONE_REGION=0,
176  ASSIGN_TO_ALL_INTERSECTING_REGIONS=1,
177  SPLIT_BOUNDARY_CELLS=2
178  };
179 //ETX
180 
182 
183  void SetBoundaryMode(int mode);
184  void SetBoundaryModeToAssignToOneRegion()
185  { this->SetBoundaryMode(vtkDistributedDataFilter::ASSIGN_TO_ONE_REGION); }
186  void SetBoundaryModeToAssignToAllIntersectingRegions()
187  { this->SetBoundaryMode(
189  }
190  void SetBoundaryModeToSplitBoundaryCells()
191  { this->SetBoundaryMode(vtkDistributedDataFilter::SPLIT_BOUNDARY_CELLS); }
192  int GetBoundaryMode();
194 
197 
205  vtkBooleanMacro(UseMinimalMemory, int);
206  vtkGetMacro(UseMinimalMemory, int);
207  vtkSetMacro(UseMinimalMemory, int);
208 
209 
212  vtkBooleanMacro(Timing, int);
213  vtkSetMacro(Timing, int);
214  vtkGetMacro(Timing, int);
215 
217 
222  vtkBSPCuts* GetCuts() {return this->UserCuts;}
223  void SetCuts(vtkBSPCuts* cuts);
225 
234  void SetUserRegionAssignments(const int *map, int numRegions);
235 
236 protected:
239 
245  void AssignBoundaryCellsToOneRegionOn();
246  void AssignBoundaryCellsToOneRegionOff();
247  void SetAssignBoundaryCellsToOneRegion(int val);
248 
256  void AssignBoundaryCellsToAllIntersectingRegionsOn();
257  void AssignBoundaryCellsToAllIntersectingRegionsOff();
258  void SetAssignBoundaryCellsToAllIntersectingRegions(int val);
259 
266  void DivideBoundaryCellsOn();
267  void DivideBoundaryCellsOff();
268  void SetDivideBoundaryCells(int val);
269 
276  void SingleProcessExecute(vtkDataSet *input, vtkUnstructuredGrid *output);
280 
282 
285  virtual int RequestDataObject(vtkInformation*,
289 
291 
292  int RequestDataInternal(vtkDataSet* input, vtkUnstructuredGrid* output);
293 //BTX
294 private:
296 
297  enum{
298  DeleteNo = 0,
299  DeleteYes = 1
300  };
301 
302  enum{
303  DuplicateCellsNo = 0,
304  DuplicateCellsYes = 1
305  };
306 
307  enum{
308  GhostCellsNo = 0,
309  GhostCellsYes = 1
310  };
311 
312  enum{
313  UnsetGhostLevel = 99
314  };
315 
317  int PartitionDataAndAssignToProcesses(vtkDataSet *set);
318 
320  vtkUnstructuredGrid *RedistributeDataSet(vtkDataSet *set, vtkDataSet *input);
321 
323  int ClipGridCells(vtkUnstructuredGrid *grid);
324 
326  vtkUnstructuredGrid * AcquireGhostCells(vtkUnstructuredGrid *grid);
327 
329  void ComputeMyRegionBounds();
330 
332  int CheckFieldArrayTypes(vtkDataSet *set);
333 
336  vtkDataSet *TestFixTooFewInputFiles(vtkDataSet *input);
337 
339  vtkUnstructuredGrid *MPIRedistribute(vtkDataSet *in, vtkDataSet *input);
340 
342  vtkIdList **GetCellIdsForProcess(int proc, int *nlists);
343 
346  void SetUpPairWiseExchange();
347 
349 
350  void FreeIntArrays(vtkIdTypeArray **ar);
351  static void FreeIdLists(vtkIdList**lists, int nlists);
352  static vtkIdType GetIdListSize(vtkIdList**lists, int nlists);
354 
356 
357  vtkIdTypeArray *ExchangeCounts(vtkIdType myCount, int tag);
358  vtkIdTypeArray *ExchangeCountsLean(vtkIdType myCount, int tag);
359  vtkIdTypeArray *ExchangeCountsFast(vtkIdType myCount, int tag);
361 
363 
364  vtkIdTypeArray **ExchangeIdArrays(vtkIdTypeArray **arIn,
365  int deleteSendArrays, int tag);
366  vtkIdTypeArray **ExchangeIdArraysLean(vtkIdTypeArray **arIn,
367  int deleteSendArrays, int tag);
368  vtkIdTypeArray **ExchangeIdArraysFast(vtkIdTypeArray **arIn,
369  int deleteSendArrays, int tag);
371 
373 
374  vtkFloatArray **ExchangeFloatArrays(vtkFloatArray **myArray,
375  int deleteSendArrays, int tag);
376  vtkFloatArray **ExchangeFloatArraysLean(vtkFloatArray **myArray,
377  int deleteSendArrays, int tag);
378  vtkFloatArray **ExchangeFloatArraysFast(vtkFloatArray **myArray,
379  int deleteSendArrays, int tag);
381 
383 
384  vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList **cellIds, int deleteCellIds,
385  vtkDataSet *myGrid, int deleteMyGrid,
386  int filterOutDuplicateCells, int ghostCellFlag, int tag);
387  vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList ***cellIds, int *numLists,
388  int deleteCellIds,
389  vtkDataSet *myGrid, int deleteMyGrid,
390  int filterOutDuplicateCells, int ghostCellFlag, int tag);
391  vtkUnstructuredGrid *ExchangeMergeSubGridsLean(
392  vtkIdList ***cellIds, int *numLists,
393  int deleteCellIds,
394  vtkDataSet *myGrid, int deleteMyGrid,
395  int filterOutDuplicateCells, int ghostCellFlag, int tag);
396  vtkUnstructuredGrid *ExchangeMergeSubGridsFast(
397  vtkIdList ***cellIds, int *numLists,
398  int deleteCellIds,
399  vtkDataSet *myGrid, int deleteMyGrid,
400  int filterOutDuplicateCells, int ghostCellFlag, int tag);
402 
403 
405 
406  char *MarshallDataSet(vtkUnstructuredGrid *extractedGrid, int &size);
407  vtkUnstructuredGrid *UnMarshallDataSet(char *buf, int size);
409 
411 
412  void ClipCellsToSpatialRegion(vtkUnstructuredGrid *grid);
413  void ClipWithVtkClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
414  vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
416 
417  void ClipWithBoxClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
418  vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
419 
421 
425  vtkIdTypeArray *GetGlobalNodeIdArray(vtkDataSet *set);
426  vtkIdType *GetGlobalNodeIds(vtkDataSet *set);
427  vtkIdTypeArray *GetGlobalElementIdArray(vtkDataSet *set);
428  vtkIdType *GetGlobalElementIds(vtkDataSet *set);
429  int AssignGlobalNodeIds(vtkUnstructuredGrid *grid);
430  int AssignGlobalElementIds(vtkDataSet *in);
431  vtkIdTypeArray **FindGlobalPointIds(vtkFloatArray **ptarray,
432  vtkIdTypeArray *ids, vtkUnstructuredGrid *grid, vtkIdType &numUniqueMissingPoints);
434 
436 
437  vtkIdTypeArray **MakeProcessLists(vtkIdTypeArray **pointIds,
438  vtkDistributedDataFilterSTLCloak *procs);
440 
442 
443  vtkIdList **BuildRequestedGrids( vtkIdTypeArray **globalPtIds,
444  vtkUnstructuredGrid *grid,
445  vtkDistributedDataFilterSTLCloak *ptIdMap);
447 
449 
450  int InMySpatialRegion(float x, float y, float z);
451  int InMySpatialRegion(double x, double y, double z);
452  int StrictlyInsideMyBounds(float x, float y, float z);
453  int StrictlyInsideMyBounds(double x, double y, double z);
455 
457 
458  vtkIdTypeArray **GetGhostPointIds(int ghostLevel, vtkUnstructuredGrid *grid,
459  int AddCellsIAlreadyHave);
460  vtkUnstructuredGrid *AddGhostCellsUniqueCellAssignment(
461  vtkUnstructuredGrid *myGrid,
462  vtkDistributedDataFilterSTLCloak *globalToLocalMap);
463  vtkUnstructuredGrid *AddGhostCellsDuplicateCellAssignment(
464  vtkUnstructuredGrid *myGrid,
465  vtkDistributedDataFilterSTLCloak *globalToLocalMap);
466  vtkUnstructuredGrid *SetMergeGhostGrid(
467  vtkUnstructuredGrid *ghostCellGrid,
468  vtkUnstructuredGrid *incomingGhostCells,
469  int ghostLevel, vtkDistributedDataFilterSTLCloak *idMap);
471 
473 
474  vtkUnstructuredGrid *ExtractCells(vtkIdList *list,
475  int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
476  vtkUnstructuredGrid *ExtractCells(vtkIdList **lists, int nlists,
477  int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
478  vtkUnstructuredGrid *ExtractZeroCellGrid(vtkDataSet *in,
479  vtkModelMetadata *mmd);
481 
483 
484  static int GlobalPointIdIsUsed(vtkUnstructuredGrid *grid,
485  int ptId, vtkDistributedDataFilterSTLCloak *globalToLocal);
486  static int LocalPointIdIsUsed(vtkUnstructuredGrid *grid, int ptId);
487  static vtkIdType FindId(vtkIdTypeArray *ids, vtkIdType gid, vtkIdType startLoc);
489 
491 
492  static vtkIdTypeArray *AddPointAndCells(vtkIdType gid,
493  vtkIdType localId,
494  vtkUnstructuredGrid *grid,
495  vtkIdType *gidCells,
496  vtkIdTypeArray *ids);
498 
500 
501  static void AddConstantUnsignedCharPointArray(vtkUnstructuredGrid *grid,
502  const char *arrayName, unsigned char val);
503  static void AddConstantUnsignedCharCellArray(vtkUnstructuredGrid *grid,
504  const char *arrayName, unsigned char val);
506 
508 
509  static void RemoveRemoteCellsFromList(vtkIdList *cellList,
510  vtkIdType *gidCells,
511  vtkIdType *remoteCells,
512  vtkIdType nRemoteCells);
514 
516 
517  static vtkUnstructuredGrid *MergeGrids(vtkDataSet **sets, int nsets,
518  int deleteDataSets,
519  int useGlobalNodeIds, float pointMergeTolerance,
520  int useGlobalCellIds);
522 
524 
525  void AddMetadata(vtkUnstructuredGrid *grid, vtkModelMetadata *mmd);
526  static int HasMetadata(vtkDataSet *s);
528 
529  vtkPKdTree *Kdtree;
530  vtkMultiProcessController *Controller;
531 
532  int NumProcesses;
533  int MyId;
534 
535  int *Target;
536  int *Source;
537 
538  int NumConvexSubRegions;
539  double *ConvexSubRegionBounds;
540 
541  int GhostLevel;
542 
543  int RetainKdtree;
544  int IncludeAllIntersectingCells;
545  int ClipCells;
546  int AssignBoundaryCellsToOneRegion;
547  int AssignBoundaryCellsToAllIntersectingRegions;
548  int DivideBoundaryCells;
549 
550  int Timing;
551 
552  int NextProgressStep;
553  double ProgressIncrement;
554 
555  int UseMinimalMemory;
556 
557  vtkBSPCuts* UserCuts;
558 
559  vtkDistributedDataFilter(const vtkDistributedDataFilter&); // Not implemented
560  void operator=(const vtkDistributedDataFilter&); // Not implemented
561 
562  class vtkInternals;
563  vtkInternals* Internals;
564 //ETX
565 };
566 #endif