VTK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 vtkMultiProcessController;
105 class vtkPKdTree;
106 class vtkUnstructuredGrid;
107 
108 class VTKFILTERSPARALLELMPI_EXPORT vtkDistributedDataFilter: public vtkDataObjectAlgorithm
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);
185  { this->SetBoundaryMode(vtkDistributedDataFilter::ASSIGN_TO_ONE_REGION); }
187  { this->SetBoundaryMode(
189  }
191  { this->SetBoundaryMode(vtkDistributedDataFilter::SPLIT_BOUNDARY_CELLS); }
192  int GetBoundaryMode();
194 
196  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
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 
274  virtual int RequestData(vtkInformation *, vtkInformationVector **,
275  vtkInformationVector *);
276  void SingleProcessExecute(vtkDataSet *input, vtkUnstructuredGrid *output);
277  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
278  vtkInformationVector *);
279  virtual int FillInputPortInformation(int port, vtkInformation *info);
280 
282 
285  virtual int RequestDataObject(vtkInformation*,
286  vtkInformationVector**,
287  vtkInformationVector*);
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);
476  vtkUnstructuredGrid *ExtractCells(vtkIdList **lists, int nlists,
477  int deleteCellLists, vtkDataSet *in);
478  vtkUnstructuredGrid *ExtractZeroCellGrid(vtkDataSet *in);
480 
482 
483  static int GlobalPointIdIsUsed(vtkUnstructuredGrid *grid,
484  int ptId, vtkDistributedDataFilterSTLCloak *globalToLocal);
485  static int LocalPointIdIsUsed(vtkUnstructuredGrid *grid, int ptId);
486  static vtkIdType FindId(vtkIdTypeArray *ids, vtkIdType gid, vtkIdType startLoc);
488 
490 
491  static vtkIdTypeArray *AddPointAndCells(vtkIdType gid,
492  vtkIdType localId,
493  vtkUnstructuredGrid *grid,
494  vtkIdType *gidCells,
495  vtkIdTypeArray *ids);
497 
499 
500  static void AddConstantUnsignedCharPointArray(vtkUnstructuredGrid *grid,
501  const char *arrayName, unsigned char val);
502  static void AddConstantUnsignedCharCellArray(vtkUnstructuredGrid *grid,
503  const char *arrayName, unsigned char val);
505 
507 
508  static void RemoveRemoteCellsFromList(vtkIdList *cellList,
509  vtkIdType *gidCells,
510  vtkIdType *remoteCells,
511  vtkIdType nRemoteCells);
513 
515 
516  static vtkUnstructuredGrid *MergeGrids(vtkDataSet **sets, int nsets,
517  int deleteDataSets,
518  int useGlobalNodeIds, float pointMergeTolerance,
519  int useGlobalCellIds);
521 
522  vtkPKdTree *Kdtree;
523  vtkMultiProcessController *Controller;
524 
525  int NumProcesses;
526  int MyId;
527 
528  int *Target;
529  int *Source;
530 
531  int NumConvexSubRegions;
532  double *ConvexSubRegionBounds;
533 
534  int GhostLevel;
535 
536  int RetainKdtree;
537  int IncludeAllIntersectingCells;
538  int ClipCells;
539  int AssignBoundaryCellsToOneRegion;
540  int AssignBoundaryCellsToAllIntersectingRegions;
541  int DivideBoundaryCells;
542 
543  int Timing;
544 
545  int NextProgressStep;
546  double ProgressIncrement;
547 
548  int UseMinimalMemory;
549 
550  vtkBSPCuts* UserCuts;
551 
552  vtkDistributedDataFilter(const vtkDistributedDataFilter&); // Not implemented
553  void operator=(const vtkDistributedDataFilter&); // Not implemented
554 
555  class vtkInternals;
556  vtkInternals* Internals;
557 //ETX
558 };
559 #endif
virtual int RequestDataObject(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Build a k-d tree decomposition of a list of points.
Definition: vtkPKdTree.h:54
static vtkDataObjectAlgorithm * New()
void PrintSelf(ostream &os, vtkIndent indent)
Distribute data among processors.
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
virtual int FillInputPortInformation(int port, vtkInformation *info)
Superclass for algorithms that produce only data object as output.
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)