31#include "vtkFiltersParallelModule.h"
36VTK_ABI_NAMESPACE_BEGIN
107 vtkGetMacro(RegionAssignment,
int);
271 const double directionOfProjection[3],
vtkIntArray* orderedList);
308 int RegionAssignment;
314 void StrDupWithNew(
const char* s, std::string& output);
322 std::vector<int> RegionAssignmentMap;
323 std::vector<std::vector<int>> ProcessAssignmentMap;
324 std::vector<int> NumRegionsAssigned;
326 int UpdateRegionAssignment();
331 std::vector<char> DataLocationMap;
333 std::vector<int> NumProcessesInRegion;
334 std::vector<std::vector<int>> ProcessList;
336 std::vector<int> NumRegionsInProcess;
337 std::vector<std::vector<int>> ParallelRegionList;
339 std::vector<std::vector<vtkIdType>> CellCountList;
341 std::vector<double> CellDataMin;
342 std::vector<double> CellDataMax;
343 std::vector<double> PointDataMin;
344 std::vector<double> PointDataMax;
345 std::vector<std::string> CellDataName;
346 std::vector<std::string> PointDataName;
352 int BuildGlobalIndexLists(
vtkIdType ncells);
354 std::vector<vtkIdType> StartVal;
355 std::vector<vtkIdType> EndVal;
356 std::vector<vtkIdType> NumCells;
362 int _whoHas(
int L,
int R,
int pos);
363 float* GetLocalVal(
int pos);
364 float* GetLocalValNext(
int pos);
365 void SetLocalVal(
int pos,
float* val);
366 void ExchangeVals(
int pos1,
int pos2);
367 void ExchangeLocalVals(
int pos1,
int pos2);
373 float* CurrentPtArray;
377 std::vector<int> SelectBuffer;
381 int AllCheckForFailure(
int rc,
const char* where,
const char* how);
382 void AllCheckParameters();
389 bool VolumeBounds(
double*);
391 int BreadthFirstDivide(
double* bounds);
392 void enQueueNode(
vtkKdNode* kd,
int L,
int level,
int tag);
395 int Select(
int dim,
int L,
int R);
396 void _select(
int L,
int R,
int K,
int dim);
397 void DoTransfer(
int from,
int to,
int fromIndex,
int toIndex,
int count);
399 int* PartitionAboutMyValue(
int L,
int R,
int K,
int dim);
400 int* PartitionAboutOtherValue(
int L,
int R,
float T,
int dim);
401 int* PartitionSubArray(
int L,
int R,
int K,
int dim,
int p1,
int p2);
404#ifdef YIELDS_INCONSISTENT_REGION_BOUNDARIES
405 void RetrieveData(
vtkKdNode* kd,
int* buf);
407 void ReduceData(
vtkKdNode* kd,
int* sources);
411 void GetDataBounds(
int L,
int K,
int R,
float dataBounds[12]);
412 void GetLocalMinMax(
int L,
int R,
int me,
float* min,
float*
max);
414 static int FillOutTree(
vtkKdNode* kd,
int level);
416 static void PackData(
vtkKdNode* kd,
double* data);
417 static void UnpackData(
vtkKdNode* kd,
double* data);
418 static void CheckFixRegionBoundaries(
vtkKdNode* tree);
422 int AllocateDoubleBuffer();
423 void FreeDoubleBuffer();
424 void SwitchDoubleBuffer();
425 void AllocateSelectBuffer();
426 void FreeSelectBuffer();
428 void InitializeGlobalIndexLists();
429 void AllocateAndZeroGlobalIndexLists();
430 void FreeGlobalIndexLists();
431 void InitializeRegionAssignmentLists();
432 void AllocateAndZeroRegionAssignmentLists();
433 void FreeRegionAssignmentLists();
434 void InitializeProcessDataLists();
435 void AllocateAndZeroProcessDataLists();
436 void FreeProcessDataLists();
437 void InitializeFieldArrayMinMax();
438 void AllocateAndZeroFieldArrayMinMax();
439 void FreeFieldArrayMinMax();
441 void ReleaseTables();
445 void AddProcessRegions(
int procId,
vtkKdNode* kd);
446 void BuildRegionListsForProcesses();
450 bool CollectLocalRegionProcessData(std::vector<int>&);
451 int BuildRegionProcessTables();
452 int BuildFieldArrayMinMax();
453 void AddEntry(
int* list,
int len,
int id);
454#ifdef VTK_USE_64BIT_IDS
459 static int FindNextLocalArrayIndex(
460 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.
static vtkPKdTree * New()
int GetPointArrayGlobalRange(const char *name, double range[2])
vtkIdType GetCellListsForProcessRegions(int ProcessId, vtkDataSet *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 ...
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()
int GetCellArrayGlobalRange(const char *name, double range[2])
static const int UserDefinedAssignment
static const int RoundRobinAssignment
vtkIdType GetCellListsForProcessRegions(int ProcessId, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
After regions have been assigned to processes, I may want to know which cells I have that are in the ...
static const int NoRegionAssignment
const int * GetRegionAssignmentMap()
Returns the region assignment map where index is the region and value is the processes id for that re...
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