46 #include "vtkFiltersParallelModule.h"
121 vtkGetMacro(RegionAssignment,
int);
285 const double directionOfProjection[3],
vtkIntArray* orderedList);
322 int RegionAssignment;
328 void StrDupWithNew(
const char* s,
std::string& output);
336 std::vector<int> RegionAssignmentMap;
337 std::vector<std::vector<int> > ProcessAssignmentMap;
338 std::vector<int> NumRegionsAssigned;
340 int UpdateRegionAssignment();
345 std::vector<char> DataLocationMap;
347 std::vector<int> NumProcessesInRegion;
348 std::vector<std::vector<int> > ProcessList;
350 std::vector<int> NumRegionsInProcess;
351 std::vector<std::vector<int> > ParallelRegionList;
353 std::vector<std::vector<vtkIdType> > CellCountList;
355 std::vector<double> CellDataMin;
356 std::vector<double> CellDataMax;
357 std::vector<double> PointDataMin;
358 std::vector<double> PointDataMax;
359 std::vector<std::string> CellDataName;
360 std::vector<std::string> PointDataName;
366 int BuildGlobalIndexLists(
vtkIdType ncells);
368 std::vector<vtkIdType> StartVal;
369 std::vector<vtkIdType> EndVal;
370 std::vector<vtkIdType> NumCells;
376 int _whoHas(
int L,
int R,
int pos);
377 float* GetLocalVal(
int pos);
378 float* GetLocalValNext(
int pos);
379 void SetLocalVal(
int pos,
float* val);
380 void ExchangeVals(
int pos1,
int pos2);
381 void ExchangeLocalVals(
int pos1,
int pos2);
387 float* CurrentPtArray;
391 std::vector<int> SelectBuffer;
395 int AllCheckForFailure(
int rc,
const char* where,
const char* how);
396 void AllCheckParameters();
403 bool VolumeBounds(
double*);
405 int BreadthFirstDivide(
double* bounds);
409 int Select(
int dim,
int L,
int R);
410 void _select(
int L,
int R,
int K,
int dim);
411 void DoTransfer(
int from,
int to,
int fromIndex,
int toIndex,
int count);
413 int* PartitionAboutMyValue(
int L,
int R,
int K,
int dim);
414 int* PartitionAboutOtherValue(
int L,
int R,
float T,
int dim);
415 int* PartitionSubArray(
int L,
int R,
int K,
int dim,
int p1,
int p2);
418 #ifdef YIELDS_INCONSISTENT_REGION_BOUNDARIES
419 void RetrieveData(
vtkKdNode* kd,
int* buf);
421 void ReduceData(
vtkKdNode* kd,
int* sources);
425 void GetDataBounds(
int L,
int K,
int R,
float dataBounds[12]);
426 void GetLocalMinMax(
int L,
int R,
int me,
float* min,
float*
max);
432 static void CheckFixRegionBoundaries(
vtkKdNode* tree);
436 int AllocateDoubleBuffer();
437 void FreeDoubleBuffer();
438 void SwitchDoubleBuffer();
439 void AllocateSelectBuffer();
440 void FreeSelectBuffer();
442 void InitializeGlobalIndexLists();
443 void AllocateAndZeroGlobalIndexLists();
444 void FreeGlobalIndexLists();
445 void InitializeRegionAssignmentLists();
446 void AllocateAndZeroRegionAssignmentLists();
447 void FreeRegionAssignmentLists();
448 void InitializeProcessDataLists();
449 void AllocateAndZeroProcessDataLists();
450 void FreeProcessDataLists();
451 void InitializeFieldArrayMinMax();
452 void AllocateAndZeroFieldArrayMinMax();
453 void FreeFieldArrayMinMax();
455 void ReleaseTables();
459 void AddProcessRegions(
int procId,
vtkKdNode* kd);
460 void BuildRegionListsForProcesses();
464 bool CollectLocalRegionProcessData(std::vector<int>&);
465 int BuildRegionProcessTables();
466 int BuildFieldArrayMinMax();
467 void AddEntry(
int* list,
int len,
int id);
468 #ifdef VTK_USE_64BIT_IDS
473 static int FindNextLocalArrayIndex(
474 const char* n,
const std::vector<std::string>& names,
int len,
int start = 0);
Used to send/receive messages in a multiprocess environment.
abstract class to specify dataset behavior
list of point or cell ids
a simple class to control print indentation
dynamic, self-adjusting array of int
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning.
a Kd-tree spatial decomposition of a set of points
int DivideRegion(vtkKdNode *kd, float *c1, int *ids, int nlevels)
static int Select(int dim, float *c1, int *ids, int nvals, double &coord)
void operator=(const vtkKdTree &)=delete
Multiprocessing communication superclass.
Build a k-d tree decomposition of a list of points.
int ViewOrderAllProcessesFromPosition(const double cameraPosition[3], vtkIntArray *orderedList)
Return a list of all processes in order from front to back given a camera position.
vtkIdType GetTotalNumberOfCells()
Get the total number of cells distributed across the data files read by all processes.
void PrintTiming(ostream &os, vtkIndent indent) override
Print timing of k-d tree build.
int GetCellArrayGlobalRange(const char *name, float range[2])
An added feature of vtkPKdTree is that it will calculate the the global range of field arrays across ...
int GetPointArrayGlobalRange(const char *name, float range[2])
void BuildLocator() override
Build the spatial decomposition.
int CreateProcessCellCountData()
Create tables of counts of cells per process per region.
static const int ContiguousAssignment
int GetPointArrayGlobalRange(int arrayIndex, double range[2])
int GetTotalProcessesInRegion(int regionId)
Returns the total number of processes that have data falling within this spatial region.
int GetRegionsCellCountForProcess(int ProcessId, int *count, int len)
Writes to the supplied integer array the number of cells this process has for each region.
int GetRegionAssignmentMapLength()
/ Returns the number of regions in the region assignment map.
int AssignRegionsContiguous()
Let the PKdTree class assign a process to each region by assigning contiguous sets of spatial regions...
int MultiProcessBuildLocator(double *bounds)
int GetRegionListForProcess(int processId, vtkIntArray *regions)
Adds the region IDs for which this process has data to the supplied vtkIntArray.
void SetController(vtkMultiProcessController *c)
Set/Get the communicator object.
int GetCellArrayGlobalRange(int arrayIndex, float range[2])
int GetRegionAssignmentList(int procId, vtkIntArray *list)
Writes the list of region IDs assigned to the specified process.
int GetPointArrayGlobalRange(const char *name, double range[2])
vtkIdType GetCellListsForProcessRegions(int ProcessId, vtkDataSet *set, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
int ViewOrderAllProcessesInDirection(const double directionOfProjection[3], vtkIntArray *orderedList)
Return a list of all processes in order from front to back given a vector direction of projection.
int AssignRegions(int *map, int numRegions)
Assign spatial regions to processes via a user defined map.
void PrintTables(ostream &os, vtkIndent indent)
int HasData(int processId, int regionId)
Returns 1 if the process has data for the given region, 0 otherwise.
int GetProcessCellCountForRegion(int processId, int regionId)
Returns the number of cells the specified process has in the specified region.
int GetTotalRegionsForProcess(int processId)
Returns the total number of spatial regions that a given process has data for.
int GetProcessesCellCountForRegion(int regionId, int *count, int len)
Writes the number of cells each process has for the region to the supplied list of length len.
int GetPointArrayGlobalRange(int arrayIndex, float range[2])
void SingleProcessBuildLocator()
const int * GetRegionAssignmentMap()
Returns the region assignment map where index is the region and value is the processes id for that re...
int GetCellArrayGlobalRange(const char *name, double range[2])
static const int UserDefinedAssignment
static vtkPKdTree * New()
static const int RoundRobinAssignment
vtkIdType GetCellListsForProcessRegions(int ProcessId, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
static const int NoRegionAssignment
int GetProcessAssignedToRegion(int regionId)
Returns the ID of the process assigned to the region.
void GetAllProcessesBorderingOnPoint(float x, float y, float z, vtkIntArray *list)
The k-d tree spatial regions have been assigned to processes.
int GetCellArrayGlobalRange(int arrayIndex, double range[2])
int AssignRegionsRoundRobin()
Let the PKdTree class assign a process to each region in a round robin fashion.
int CreateGlobalDataArrayBounds()
A convenience function which compiles the global bounds of the data arrays across processes.
int GetProcessListForRegion(int regionId, vtkIntArray *processes)
Adds the list of processes having data for the given region to the supplied list, returns the number ...
vtkIdType GetCellListsForProcessRegions(int ProcessId, int set, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
After regions have been assigned to processes, I may want to know which cells I have that are in the ...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
scalable collective communication for a subset of members of a parallel VTK application