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.
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