91 #ifndef __vtkDistributedDataFilter_h
92 #define __vtkDistributedDataFilter_h
94 #include "vtkFiltersParallelMPIModule.h"
95 #include "vtkDataObjectAlgorithm.h"
99 class vtkDistributedDataFilterSTLCloak;
102 class vtkIdTypeArray;
104 class vtkMultiProcessController;
106 class vtkUnstructuredGrid;
111 vtkDataObjectAlgorithm);
114 void PrintSelf(ostream& os, vtkIndent indent);
120 void SetController(vtkMultiProcessController *c);
121 vtkGetObjectMacro(Controller, vtkMultiProcessController);
148 vtkBooleanMacro(RetainKdtree,
int);
149 vtkGetMacro(RetainKdtree,
int);
150 vtkSetMacro(RetainKdtree,
int);
161 vtkBooleanMacro(IncludeAllIntersectingCells,
int);
162 vtkGetMacro(IncludeAllIntersectingCells,
int);
163 vtkSetMacro(IncludeAllIntersectingCells,
int);
169 vtkBooleanMacro(ClipCells,
int);
170 vtkGetMacro(ClipCells,
int);
171 vtkSetMacro(ClipCells,
int);
175 ASSIGN_TO_ONE_REGION=0,
176 ASSIGN_TO_ALL_INTERSECTING_REGIONS=1,
177 SPLIT_BOUNDARY_CELLS=2
183 void SetBoundaryMode(
int mode);
187 { this->SetBoundaryMode(
192 int GetBoundaryMode();
196 virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
205 vtkBooleanMacro(UseMinimalMemory,
int);
206 vtkGetMacro(UseMinimalMemory,
int);
207 vtkSetMacro(UseMinimalMemory,
int);
212 vtkBooleanMacro(Timing,
int);
213 vtkSetMacro(Timing,
int);
214 vtkGetMacro(Timing,
int);
222 vtkBSPCuts*
GetCuts() {
return this->UserCuts;}
223 void SetCuts(vtkBSPCuts* cuts);
234 void SetUserRegionAssignments(
const int *map,
int numRegions);
245 void AssignBoundaryCellsToOneRegionOn();
246 void AssignBoundaryCellsToOneRegionOff();
247 void SetAssignBoundaryCellsToOneRegion(
int val);
256 void AssignBoundaryCellsToAllIntersectingRegionsOn();
257 void AssignBoundaryCellsToAllIntersectingRegionsOff();
258 void SetAssignBoundaryCellsToAllIntersectingRegions(
int val);
266 void DivideBoundaryCellsOn();
267 void DivideBoundaryCellsOff();
268 void SetDivideBoundaryCells(
int val);
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);
285 virtual int RequestDataObject(vtkInformation*,
286 vtkInformationVector**,
287 vtkInformationVector*);
292 int RequestDataInternal(vtkDataSet* input, vtkUnstructuredGrid* output);
303 DuplicateCellsNo = 0,
304 DuplicateCellsYes = 1
317 int PartitionDataAndAssignToProcesses(vtkDataSet *set);
320 vtkUnstructuredGrid *RedistributeDataSet(vtkDataSet *set, vtkDataSet *input);
323 int ClipGridCells(vtkUnstructuredGrid *grid);
326 vtkUnstructuredGrid * AcquireGhostCells(vtkUnstructuredGrid *grid);
329 void ComputeMyRegionBounds();
332 int CheckFieldArrayTypes(vtkDataSet *set);
336 vtkDataSet *TestFixTooFewInputFiles(vtkDataSet *input);
339 vtkUnstructuredGrid *MPIRedistribute(vtkDataSet *in, vtkDataSet *input);
342 vtkIdList **GetCellIdsForProcess(
int proc,
int *nlists);
346 void SetUpPairWiseExchange();
350 void FreeIntArrays(vtkIdTypeArray **ar);
351 static void FreeIdLists(vtkIdList**lists,
int nlists);
352 static vtkIdType GetIdListSize(vtkIdList**lists,
int nlists);
357 vtkIdTypeArray *ExchangeCounts(vtkIdType myCount,
int tag);
358 vtkIdTypeArray *ExchangeCountsLean(vtkIdType myCount,
int tag);
359 vtkIdTypeArray *ExchangeCountsFast(vtkIdType myCount,
int tag);
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);
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);
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,
389 vtkDataSet *myGrid,
int deleteMyGrid,
390 int filterOutDuplicateCells,
int ghostCellFlag,
int tag);
391 vtkUnstructuredGrid *ExchangeMergeSubGridsLean(
392 vtkIdList ***cellIds,
int *numLists,
394 vtkDataSet *myGrid,
int deleteMyGrid,
395 int filterOutDuplicateCells,
int ghostCellFlag,
int tag);
396 vtkUnstructuredGrid *ExchangeMergeSubGridsFast(
397 vtkIdList ***cellIds,
int *numLists,
399 vtkDataSet *myGrid,
int deleteMyGrid,
400 int filterOutDuplicateCells,
int ghostCellFlag,
int tag);
406 char *MarshallDataSet(vtkUnstructuredGrid *extractedGrid,
int &size);
407 vtkUnstructuredGrid *UnMarshallDataSet(
char *buf,
int size);
412 void ClipCellsToSpatialRegion(vtkUnstructuredGrid *grid);
413 void ClipWithVtkClipDataSet(vtkUnstructuredGrid *grid,
double *bounds,
414 vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
417 void ClipWithBoxClipDataSet(vtkUnstructuredGrid *grid,
double *bounds,
418 vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
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);
437 vtkIdTypeArray **MakeProcessLists(vtkIdTypeArray **pointIds,
438 vtkDistributedDataFilterSTLCloak *procs);
443 vtkIdList **BuildRequestedGrids( vtkIdTypeArray **globalPtIds,
444 vtkUnstructuredGrid *grid,
445 vtkDistributedDataFilterSTLCloak *ptIdMap);
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);
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);
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);
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);
491 static vtkIdTypeArray *AddPointAndCells(vtkIdType gid,
493 vtkUnstructuredGrid *grid,
495 vtkIdTypeArray *ids);
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);
508 static void RemoveRemoteCellsFromList(vtkIdList *cellList,
510 vtkIdType *remoteCells,
511 vtkIdType nRemoteCells);
516 static vtkUnstructuredGrid *MergeGrids(vtkDataSet **sets,
int nsets,
518 int useGlobalNodeIds,
float pointMergeTolerance,
519 int useGlobalCellIds);
523 vtkMultiProcessController *Controller;
531 int NumConvexSubRegions;
532 double *ConvexSubRegionBounds;
537 int IncludeAllIntersectingCells;
539 int AssignBoundaryCellsToOneRegion;
540 int AssignBoundaryCellsToAllIntersectingRegions;
541 int DivideBoundaryCells;
545 int NextProgressStep;
546 double ProgressIncrement;
548 int UseMinimalMemory;
550 vtkBSPCuts* UserCuts;
556 vtkInternals* Internals;
Build a k-d tree decomposition of a list of points.
void SetBoundaryModeToSplitBoundaryCells()
void SetBoundaryModeToAssignToAllIntersectingRegions()
void SetBoundaryModeToAssignToOneRegion()
Distribute data among processors.