28 #ifndef vtkAMRDualGridHelper_h 29 #define vtkAMRDualGridHelper_h 31 #include "vtkObject.h" 32 #include "vtkPVVTKExtensionsDefaultModule.h" 39 class vtkNonOverlappingAMR;
41 class vtkAMRDualGridHelperLevel;
42 class vtkMultiProcessController;
44 class vtkAMRDualGridHelperDegenerateRegion;
46 class vtkAMRDualGridHelperCommRequestList;
54 void PrintSelf(ostream& os, vtkIndent indent);
63 vtkGetMacro(SkipGhostCopy,
int);
64 vtkSetMacro(SkipGhostCopy,
int);
65 vtkBooleanMacro(SkipGhostCopy,
int);
73 vtkGetMacro(EnableDegenerateCells,
int);
74 vtkSetMacro(EnableDegenerateCells,
int);
75 vtkBooleanMacro(EnableDegenerateCells,
int);
85 vtkGetMacro(EnableAsynchronousCommunication,
int);
86 vtkSetMacro(EnableAsynchronousCommunication,
int);
87 vtkBooleanMacro(EnableAsynchronousCommunication,
int);
94 vtkGetObjectMacro(Controller, vtkMultiProcessController);
95 virtual void SetController(vtkMultiProcessController*);
98 int Initialize(vtkNonOverlappingAMR* input);
99 int SetupData(vtkNonOverlappingAMR* input,
const char* arrayName);
104 int GetNumberOfBlocksInLevel(
int level);
118 void CopyDegenerateRegionBlockToBlock(
int regionX,
int regionY,
int regionZ,
126 void QueueRegionRemoteCopy(
int regionX,
int regionY,
int regionZ,
133 void ProcessRegionRemoteCopyQueue(
bool hackLevelFlag);
137 void ClearRegionRemoteCopyQueue();
142 vtkGetStringMacro(ArrayName);
151 vtkSetStringMacro(ArrayName);
154 void ShareMetaData();
156 void ShareBlocksWithNeighbors(vtkIntArray* neighbors);
157 void ShareBlocksWithNeighborsAsynchronous(vtkIntArray* neighbors);
158 void ShareBlocksWithNeighborsSynchronous(vtkIntArray* neighbors);
159 void MarshalBlocks(vtkIntArray* buffer);
160 void UnmarshalBlocks(vtkIntArray* buffer);
161 void UnmarshalBlocksFromOne(vtkIntArray* buffer,
int blockProc);
163 vtkMultiProcessController* Controller;
164 void ComputeGlobalMetaData(vtkNonOverlappingAMR* input);
165 void AddBlock(
int level,
int id, vtkImageData* volume);
173 void AssignSharedRegions();
174 void AssignBlockSharedRegions(
177 int regionX,
int regionY,
int regionZ);
179 int NumberOfBlocksInThisProcess;
182 int StandardBlockDimensions[3];
183 double RootSpacing[3];
189 double GlobalOrigin[3];
192 std::vector<vtkAMRDualGridHelperLevel*> Levels;
194 int EnableDegenerateCells;
196 void ProcessRegionRemoteCopyQueueSynchronous(
bool hackLevelFlag);
197 void SendDegenerateRegionsFromQueueSynchronous(
int destProc, vtkIdType messageLength);
198 void ReceiveDegenerateRegionsFromQueueSynchronous(
199 int srcProc, vtkIdType messageLength,
bool hackLevelFlag);
202 void ProcessRegionRemoteCopyQueueMPIAsynchronous(
bool hackLevelFlag);
203 void SendDegenerateRegionsFromQueueMPIAsynchronous(
204 int recvProc, vtkIdType messageLength, vtkAMRDualGridHelperCommRequestList& sendList);
205 void ReceiveDegenerateRegionsFromQueueMPIAsynchronous(
206 int sendProc, vtkIdType messageLength, vtkAMRDualGridHelperCommRequestList& receiveList);
207 void FinishDegenerateRegionsCommMPIAsynchronous(
bool hackLevelFlag,
208 vtkAMRDualGridHelperCommRequestList& sendList,
209 vtkAMRDualGridHelperCommRequestList& receiveList);
213 std::vector<vtkAMRDualGridHelperDegenerateRegion> DegenerateRegionQueue;
214 void DegenerateRegionMessageSize(vtkIdTypeArray* srcProcs, vtkIdTypeArray* destProc);
215 void* CopyDegenerateRegionBlockToMessage(
216 const vtkAMRDualGridHelperDegenerateRegion& region,
void* messagePtr);
217 const void* CopyDegenerateRegionMessageToBlock(
218 const vtkAMRDualGridHelperDegenerateRegion& region,
const void* messagePtr,
bool hackLevelFlag);
219 void MarshalDegenerateRegionMessage(
void* messagePtr,
int destProc);
220 void UnmarshalDegenerateRegionMessage(
221 const void* messagePtr,
int messageLength,
int srcProc,
bool hackLevelFlag);
225 int EnableAsynchronousCommunication;
236 #define vtkAMRRegionBitOwner 128 238 #define vtkAMRRegionBitsDegenerateMask 127 245 void ResetRegionBits();
250 void AddBackGhostLevels(
int standardBlockDimensions[3]);
289 unsigned char RegionBits[3][3][3];
342 void AddFragmentSeed(
int level,
int x,
int y,
int z,
int fragmentId);
unsigned char BoundaryBits
Tools for processing AMR as a dual grid.
~vtkAMRDualGridHelperSeed()
const double * GetGlobalOrigin()
const double * GetRootSpacing()
std::vector< vtkAMRDualGridHelperSeed > FragmentIds