• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/Parallel/vtkDistributedDataFilter.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkDistributedDataFilter.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*----------------------------------------------------------------------------
00016  Copyright (c) Sandia Corporation
00017  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
00018 ----------------------------------------------------------------------------*/
00019 
00091 #ifndef __vtkDistributedDataFilter_h
00092 #define __vtkDistributedDataFilter_h
00093 
00094 #include "vtkDataObjectAlgorithm.h"
00095 
00096 class vtkBSPCuts;
00097 class vtkDataArray;
00098 class vtkDistributedDataFilterSTLCloak;
00099 class vtkFloatArray;
00100 class vtkIdList;
00101 class vtkIdTypeArray;
00102 class vtkIntArray;
00103 class vtkModelMetadata;
00104 class vtkMultiProcessController;
00105 class vtkPKdTree;
00106 class vtkUnstructuredGrid;
00107 
00108 class VTK_PARALLEL_EXPORT vtkDistributedDataFilter: public vtkDataObjectAlgorithm
00109 {
00110   vtkTypeRevisionMacro(vtkDistributedDataFilter, 
00111     vtkDataObjectAlgorithm);
00112 
00113 public:
00114   void PrintSelf(ostream& os, vtkIndent indent);
00115 
00116   static vtkDistributedDataFilter *New();
00117 
00119 
00120   void SetController(vtkMultiProcessController *c);
00121   vtkGetObjectMacro(Controller, vtkMultiProcessController);
00123 
00132   vtkPKdTree *GetKdtree();
00133 
00148   vtkBooleanMacro(RetainKdtree, int);
00149   vtkGetMacro(RetainKdtree, int);
00150   vtkSetMacro(RetainKdtree, int);
00151 
00161   vtkBooleanMacro(IncludeAllIntersectingCells, int);
00162   vtkGetMacro(IncludeAllIntersectingCells, int);
00163   vtkSetMacro(IncludeAllIntersectingCells, int);
00164 
00169   vtkBooleanMacro(ClipCells, int);
00170   vtkGetMacro(ClipCells, int);
00171   vtkSetMacro(ClipCells, int);
00172 
00173 //BTX
00174   enum BoundaryModes {
00175     ASSIGN_TO_ONE_REGION=0,
00176     ASSIGN_TO_ALL_INTERSECTING_REGIONS=1,
00177     SPLIT_BOUNDARY_CELLS=2
00178   };
00179 //ETX
00180 
00182 
00183   void SetBoundaryMode(int mode);
00184   void SetBoundaryModeToAssignToOneRegion()
00185     { this->SetBoundaryMode(vtkDistributedDataFilter::ASSIGN_TO_ONE_REGION); }
00186   void SetBoundaryModeToAssignToAllIntersectingRegions()
00187     { this->SetBoundaryMode(
00188       vtkDistributedDataFilter::ASSIGN_TO_ALL_INTERSECTING_REGIONS);
00189     }
00190   void SetBoundaryModeToSplitBoundaryCells()
00191     { this->SetBoundaryMode(vtkDistributedDataFilter::SPLIT_BOUNDARY_CELLS); }
00192   int GetBoundaryMode();
00194   
00196   virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00197 
00205   vtkBooleanMacro(UseMinimalMemory, int);
00206   vtkGetMacro(UseMinimalMemory, int);
00207   vtkSetMacro(UseMinimalMemory, int);
00208 
00209 
00212   vtkBooleanMacro(Timing, int);
00213   vtkSetMacro(Timing, int);
00214   vtkGetMacro(Timing, int);
00215 
00217 
00222   vtkBSPCuts* GetCuts() {return this->UserCuts;}
00223   void SetCuts(vtkBSPCuts* cuts);
00225 
00226 protected:
00227   vtkDistributedDataFilter();
00228   ~vtkDistributedDataFilter();
00229 
00235   void AssignBoundaryCellsToOneRegionOn();
00236   void AssignBoundaryCellsToOneRegionOff();
00237   void SetAssignBoundaryCellsToOneRegion(int val);
00238 
00246   void AssignBoundaryCellsToAllIntersectingRegionsOn();
00247   void AssignBoundaryCellsToAllIntersectingRegionsOff();
00248   void SetAssignBoundaryCellsToAllIntersectingRegions(int val);
00249 
00256   void DivideBoundaryCellsOn();
00257   void DivideBoundaryCellsOff();
00258   void SetDivideBoundaryCells(int val);
00259 
00264   virtual int RequestData(vtkInformation *, vtkInformationVector **,
00265     vtkInformationVector *);
00266   void SingleProcessExecute(vtkDataSet *input, vtkUnstructuredGrid *output);
00267   virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
00268     vtkInformationVector *);
00269   virtual int FillInputPortInformation(int port, vtkInformation *info);
00270   
00272 
00275   virtual int RequestDataObject(vtkInformation*,
00276                                 vtkInformationVector**,
00277                                 vtkInformationVector*);
00279   
00281   int RequestDataInternal(vtkDataSet* input, vtkUnstructuredGrid* output);
00282 private:
00283 
00284 //BTX
00285   enum{
00286       DeleteNo = 0,
00287       DeleteYes = 1
00288       };
00289 
00290   enum{
00291       DuplicateCellsNo = 0,
00292       DuplicateCellsYes = 1
00293       };
00294 
00295   enum{
00296       GhostCellsNo = 0,
00297       GhostCellsYes = 1
00298       };
00299 
00300   enum{
00301       UnsetGhostLevel = 99
00302       };
00303 //ETX
00304 
00306   int PartitionDataAndAssignToProcesses(vtkDataSet *set);
00307 
00309   vtkUnstructuredGrid *RedistributeDataSet(vtkDataSet *set, vtkDataSet *input);
00310 
00312   int ClipGridCells(vtkUnstructuredGrid *grid);
00313 
00315   vtkUnstructuredGrid * AcquireGhostCells(vtkUnstructuredGrid *grid);
00316 
00318   void ComputeMyRegionBounds();
00319  
00321   int CheckFieldArrayTypes(vtkDataSet *set);
00322 
00325   vtkDataSet *TestFixTooFewInputFiles(vtkDataSet *input);
00326 
00328   vtkUnstructuredGrid *MPIRedistribute(vtkDataSet *in, vtkDataSet *input);
00329 
00331   vtkIdList **GetCellIdsForProcess(int proc, int *nlists);
00332 
00335   void SetUpPairWiseExchange();
00336 
00338 
00339   void FreeIntArrays(vtkIdTypeArray **ar);
00340   static void FreeIdLists(vtkIdList**lists, int nlists);
00341   static vtkIdType GetIdListSize(vtkIdList**lists, int nlists);
00343 
00345 
00346   vtkIdTypeArray *ExchangeCounts(vtkIdType myCount, int tag);
00347   vtkIdTypeArray *ExchangeCountsLean(vtkIdType myCount, int tag);
00348   vtkIdTypeArray *ExchangeCountsFast(vtkIdType myCount, int tag);
00350 
00352 
00353   vtkIdTypeArray **ExchangeIdArrays(vtkIdTypeArray **arIn, 
00354                                     int deleteSendArrays, int tag);
00355   vtkIdTypeArray **ExchangeIdArraysLean(vtkIdTypeArray **arIn, 
00356                                         int deleteSendArrays, int tag);
00357   vtkIdTypeArray **ExchangeIdArraysFast(vtkIdTypeArray **arIn, 
00358                                         int deleteSendArrays, int tag);
00360   
00362 
00363   vtkFloatArray **ExchangeFloatArrays(vtkFloatArray **myArray, 
00364                                       int deleteSendArrays, int tag);
00365   vtkFloatArray **ExchangeFloatArraysLean(vtkFloatArray **myArray, 
00366                                       int deleteSendArrays, int tag);
00367   vtkFloatArray **ExchangeFloatArraysFast(vtkFloatArray **myArray, 
00368                                       int deleteSendArrays, int tag);
00370 
00372 
00373   vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList **cellIds, int deleteCellIds,
00374                          vtkDataSet *myGrid, int deleteMyGrid,
00375                          int filterOutDuplicateCells, int ghostCellFlag, int tag);
00376   vtkUnstructuredGrid *ExchangeMergeSubGrids(vtkIdList ***cellIds, int *numLists, 
00377                    int deleteCellIds,
00378                    vtkDataSet *myGrid, int deleteMyGrid,
00379                    int filterOutDuplicateCells, int ghostCellFlag, int tag);
00380   vtkUnstructuredGrid *ExchangeMergeSubGridsLean(
00381                    vtkIdList ***cellIds, int *numLists, 
00382                    int deleteCellIds,
00383                    vtkDataSet *myGrid, int deleteMyGrid,
00384                    int filterOutDuplicateCells, int ghostCellFlag, int tag);
00385   vtkUnstructuredGrid *ExchangeMergeSubGridsFast(
00386                    vtkIdList ***cellIds, int *numLists, 
00387                    int deleteCellIds,
00388                    vtkDataSet *myGrid, int deleteMyGrid,
00389                    int filterOutDuplicateCells, int ghostCellFlag, int tag);
00391 
00392 
00394 
00395   char *MarshallDataSet(vtkUnstructuredGrid *extractedGrid, int &size);
00396   vtkUnstructuredGrid *UnMarshallDataSet(char *buf, int size);
00398 
00400 
00401   void ClipCellsToSpatialRegion(vtkUnstructuredGrid *grid);
00402   void ClipWithVtkClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
00403            vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
00405 
00406   void ClipWithBoxClipDataSet(vtkUnstructuredGrid *grid, double *bounds,
00407            vtkUnstructuredGrid **outside, vtkUnstructuredGrid **inside);
00408 
00410 
00414   vtkIdTypeArray *GetGlobalNodeIdArray(vtkDataSet *set);
00415   vtkIdType *GetGlobalNodeIds(vtkDataSet *set);
00416   vtkIdTypeArray *GetGlobalElementIdArray(vtkDataSet *set);
00417   vtkIdType *GetGlobalElementIds(vtkDataSet *set);
00418   int AssignGlobalNodeIds(vtkUnstructuredGrid *grid);
00419   int AssignGlobalElementIds(vtkDataSet *in);
00420   vtkIdTypeArray **FindGlobalPointIds(vtkFloatArray **ptarray,
00421     vtkIdTypeArray *ids, vtkUnstructuredGrid *grid, vtkIdType &numUniqueMissingPoints);
00423 
00425 
00426   vtkIdTypeArray **MakeProcessLists(vtkIdTypeArray **pointIds,
00427                                  vtkDistributedDataFilterSTLCloak *procs);
00429 
00431 
00432   vtkIdList **BuildRequestedGrids( vtkIdTypeArray **globalPtIds,
00433                         vtkUnstructuredGrid *grid,
00434                         vtkDistributedDataFilterSTLCloak *ptIdMap);
00436 
00438 
00439   int InMySpatialRegion(float x, float y, float z);
00440   int InMySpatialRegion(double x, double y, double z);
00441   int StrictlyInsideMyBounds(float x, float y, float z);
00442   int StrictlyInsideMyBounds(double x, double y, double z);
00444 
00446 
00447   vtkIdTypeArray **GetGhostPointIds(int ghostLevel, vtkUnstructuredGrid *grid,
00448                                     int AddCellsIAlreadyHave);
00449   vtkUnstructuredGrid *AddGhostCellsUniqueCellAssignment(
00450                            vtkUnstructuredGrid *myGrid,
00451                            vtkDistributedDataFilterSTLCloak *globalToLocalMap);
00452   vtkUnstructuredGrid *AddGhostCellsDuplicateCellAssignment(
00453                            vtkUnstructuredGrid *myGrid,
00454                            vtkDistributedDataFilterSTLCloak *globalToLocalMap);
00455   vtkUnstructuredGrid *SetMergeGhostGrid(
00456                        vtkUnstructuredGrid *ghostCellGrid,
00457                        vtkUnstructuredGrid *incomingGhostCells,
00458                        int ghostLevel, vtkDistributedDataFilterSTLCloak *idMap);
00460 
00462 
00463   vtkUnstructuredGrid *ExtractCells(vtkIdList *list, 
00464                   int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
00465   vtkUnstructuredGrid *ExtractCells(vtkIdList **lists, int nlists, 
00466                   int deleteCellLists, vtkDataSet *in, vtkModelMetadata *mmd);
00467   vtkUnstructuredGrid *ExtractZeroCellGrid(vtkDataSet *in,
00468                   vtkModelMetadata *mmd);
00470 
00472 
00473   static int GlobalPointIdIsUsed(vtkUnstructuredGrid *grid,
00474                int ptId, vtkDistributedDataFilterSTLCloak *globalToLocal);
00475   static int LocalPointIdIsUsed(vtkUnstructuredGrid *grid, int ptId);
00476   static vtkIdType FindId(vtkIdTypeArray *ids, vtkIdType gid, vtkIdType startLoc);
00478 
00480 
00481   static vtkIdTypeArray *AddPointAndCells(vtkIdType gid, 
00482                                        vtkIdType localId, 
00483                                        vtkUnstructuredGrid *grid, 
00484                                        vtkIdType *gidCells, 
00485                                        vtkIdTypeArray *ids);
00487 
00489 
00490   static void AddConstantUnsignedCharPointArray(vtkUnstructuredGrid *grid, 
00491                                  const char *arrayName, unsigned char val);
00492   static void AddConstantUnsignedCharCellArray(vtkUnstructuredGrid *grid, 
00493                                  const char *arrayName, unsigned char val);
00495 
00497 
00498   static void RemoveRemoteCellsFromList(vtkIdList *cellList, 
00499                                         vtkIdType *gidCells, 
00500                                         vtkIdType *remoteCells, 
00501                                         vtkIdType nRemoteCells);
00503 
00505 
00506   static vtkUnstructuredGrid *MergeGrids(vtkDataSet **sets, int nsets,
00507                                          int deleteDataSets,
00508                                          int useGlobalNodeIds, float pointMergeTolerance,
00509                                          int useGlobalCellIds);
00511 
00513 
00514   void AddMetadata(vtkUnstructuredGrid *grid, vtkModelMetadata *mmd);
00515   static int HasMetadata(vtkDataSet *s);
00517 
00518   vtkPKdTree *Kdtree;
00519   vtkMultiProcessController *Controller;
00520 
00521   int NumProcesses;
00522   int MyId;
00523 
00524   int *Target;
00525   int *Source;
00526 
00527   int NumConvexSubRegions;
00528   double *ConvexSubRegionBounds;
00529 
00530   int GhostLevel;
00531 
00532   int RetainKdtree;
00533   int IncludeAllIntersectingCells;
00534   int ClipCells;
00535   int AssignBoundaryCellsToOneRegion;
00536   int AssignBoundaryCellsToAllIntersectingRegions;
00537   int DivideBoundaryCells;
00538 
00539   int Timing;
00540 
00541   int NextProgressStep;
00542   double ProgressIncrement;
00543 
00544   int UseMinimalMemory;
00545 
00546   vtkBSPCuts* UserCuts;
00547 
00548   vtkDistributedDataFilter(const vtkDistributedDataFilter&); // Not implemented
00549   void operator=(const vtkDistributedDataFilter&); // Not implemented
00550 };
00551 #endif

Generated by  doxygen 1.7.1