Go to the documentation of this file.
33 #ifndef VTKSTRUCTUREDAMRGRIDCONNECTIVITY_H_
34 #define VTKSTRUCTUREDAMRGRIDCONNECTIVITY_H_
63 const unsigned int NumberOfLevels,
64 const unsigned int N,
const int RefinementRatio=-1);
78 const int gridIdx,
const int level,
const int refinementRatio,
92 const int gridIdx,
const int level,
int extents[6],
126 int GetNumberOfNeighbors(
const int gridID);
156 const int gridIdx,
int fromLevel,
int toLevel,
int ext[6]);
162 const int gridIdx,
int fromLevel,
int toLevel,
int ext[6]);
168 int orient[3],
int ndim,
int fromLevel,
int toLevel,
int ext[6]);
175 int orient[3],
int ndim,
176 const int i,
const int j,
const int k,
177 const int fromLevel,
const int toLevel,
184 int orient[3],
int ndim,
int fromLevel,
int toLevel,
int ext[6]);
188 void GetGridExtent(
const int gridIdx,
int ext[6] );
191 int GetGridLevel(
const int gridIdx );
194 bool LevelExists(
const int level );
199 const int i,
const int j,
const int k,
int ext[6]);
205 const int i,
const int j,
const int k,
int ext[6]);
211 const int i,
const int j,
const int k,
212 const int gridId,
int gridExt[6]);
218 const int i,
const int j,
const int k,
int ext[6] );
223 void InsertGridAtLevel(
const int level,
const int gridID);
244 const int i,
const int j,
const int k,
245 int gridExt[6],
int nodeOrientation[3]);
256 const int dataDescription,
int orient[3],
int &ndim);
260 bool HasConstantRefinementRatio( );
263 void SetRefinementRatioAtLevel(
const int level,
const int r);
266 int GetRefinementRatioAtLevel(
const int level);
269 bool AreExtentsEqual(
int ext1[6],
int ext2[6] );
279 int GetNumberOfConnectingBlockFaces(
const int gridID );
292 assert(
"pre: gridID is out-of-bounds" &&
293 (gridID >=0) && (gridID <
static_cast<int>(this->NumberOfGrids)));
294 assert(
"pre: BlockTopology has not been properly allocated" &&
295 (this->NumberOfGrids == this->BlockTopology.size()));
296 assert(
"pre: blockDirection is out-of-bounds" &&
297 (blockDirection >= 0) && (blockDirection < 6) );
299 if( this->BlockTopology[ gridID ] & (1 << blockDirection) )
314 void RemoveBlockConnection(
const int gridID,
const int blockDirection);
323 void AddBlockConnection(
const int gridID,
const int blockDirection);
327 void ClearBlockConnections(
const int gridID );
332 const int gridId,
const int i,
const int j,
const int k,
333 int gridExt[6],
int wholeExt[6],
365 const int i,
const int iLevel,
int next1[6],
366 const int j,
const int jLevel,
int next2[6],
367 const int normalizedLevel,
378 const int iLevel,
const int jLevel,
const int normalizedLevel,
380 int orient[3],
int ndim,
381 int gridOverlapExtent[6],
382 int neiOverlapExtent[6]);
387 int Get1DOrientation(
388 const int idx,
const int ExtentLo,
const int ExtentHi,
389 const int OnLo,
const int OnHi,
const int NotOnBoundary);
393 void PrintExtent(std::ostream& os,
int ext[6]);
489 std::vector< std::vector<vtkStructuredAMRNeighbor> >
Neighbors;
516 assert(
"pre: grid ID is out-of-bounds" &&
517 (gridID >= 0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
518 assert(
"pre: neighbors vector has not been properly allocated" &&
519 (this->
Neighbors.size()==this->NumberOfGrids));
526 const int gridID,
const int nei)
528 assert(
"pre: grid ID is out-of-bounds" &&
529 (gridID >= 0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
530 assert(
"pre: neighbors vector has not been properly allocated" &&
531 (this->
Neighbors.size()==this->NumberOfGrids));
532 assert(
"pre: nei index is out-of-bounds" &&
541 const int idx,
const int ExtentLo,
const int ExtentHi,
542 const int OnLo,
const int OnHi,
const int NotOnBoundary)
544 if( idx == ExtentLo )
548 else if( idx == ExtentHi )
552 return NotOnBoundary;
561 assert(
"pre: gridID is out-of-bounds" &&
562 (gridID >=0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
563 assert(
"pre: BlockTopology has not been properly allocated" &&
567 for(
int i=0; i < 6; ++i )
574 assert(
"post: count must be in [0,5]" && (
count >=0 &&
count <= 6) );
580 const int gridID,
const int blockDirection )
583 assert(
"pre: gridID is out-of-bounds" &&
584 (gridID >=0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
585 assert(
"pre: BlockTopology has not been properly allocated" &&
587 assert(
"pre: blockDirection is out-of-bounds" &&
588 (blockDirection >= 0) && (blockDirection < 6) );
595 const int gridID,
const int blockDirection )
598 assert(
"pre: gridID is out-of-bounds" &&
599 (gridID >=0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
600 assert(
"pre: BlockTopology has not been properly allocated" &&
602 assert(
"pre: blockDirection is out-of-bounds" &&
603 (blockDirection >= 0) && (blockDirection < 6) );
612 assert(
"pre: gridID is out-of-bounds" &&
613 (gridID >=0) && (gridID <
static_cast<int>(this->
NumberOfGrids)));
614 assert(
"pre: BlockTopology has not been properly allocated" &&
616 for(
int i=0; i < 6; ++i )
625 int ext1[6],
int ext2[6])
627 for(
int i=0; i < 6; ++i )
629 if( ext1[i] != ext2[i] )
640 std::ostream& os,
int ext[6])
642 for(
int i=0; i < 6; i+=2 )
646 os << ext[i+1] <<
"] ";
654 assert(
"pre: grid Index is out-of-bounds!" &&
656 assert(
"pre: grid levels vector has not been allocated" &&
657 (this->
GridLevels.size()==this->NumberOfGrids) );
664 const int level,
const int r)
666 assert(
"pre: RefinementRatios vector is not propertly allocated" &&
668 assert(
"pre: leve is out-of-bounds!" &&
671 assert(
"pre: invalid refinement ratio" && (
r >= 2) );
681 assert(
"pre: RefinementRatios vector is not propertly allocated" &&
683 assert(
"pre: leve is out-of-bounds!" &&
686 assert(
"pre: refinement ratio for level has not been set" &&
705 const int gridIdx,
int ext[6])
707 assert(
"pre: grid index is out-of-bounds" &&
709 (gridIdx <
static_cast<int>(this->
GridExtents.size()) ) ) );
711 for(
int i=0; i < 6; ++i )
721 if( this->
AMRHierarchy.find(level) != this->AMRHierarchy.end() )
730 const int level,
const int gridID )
739 grids.insert( gridID );
represent and manipulate 3D points
void GetLocalCellCentersFromCoarserLevel(const int gridID, vtkStructuredAMRNeighbor &nei)
void InsertGridAtLevel(const int level, const int gridID)
GLuint GLuint GLsizei count
void ComputeWholeExtent()
represent and manipulate point attribute data
void CopyFieldData(vtkFieldData *source, vtkIdType sourceIdx, vtkFieldData *target, vtkIdType targetIdx)
#define VTKFILTERSGEOMETRY_EXPORT
int GetRefinementRatioAtLevel(const int level)
void GetWholeExtentAtLevel(const int level, int ext[6])
void RemoveBlockConnection(const int gridID, const int blockDirection)
void CoarsenExtent(int orient[3], int ndim, int fromLevel, int toLevel, int ext[6])
virtual void MarkNodeProperty(const int gridId, const int i, const int j, const int k, int gridExt[6], int wholeExt[6], unsigned char &p)
vtkStructuredAMRNeighbor GetAMRNeighbor(const int i, const int iLevel, int next1[6], const int j, const int jLevel, int next2[6], const int normalizedLevel, const int levelDiff, vtkStructuredNeighbor &nei)
virtual ~vtkStructuredAMRGridConnectivity()
dynamic, self-adjusting array of unsigned char
#define vtkTypeMacro(thisClass, superclass)
void CreateGhostedMaskArrays(const int gridID)
virtual void CreateGhostLayers(const int N=1)
void GetCellRefinedExtent(int orient[3], int ndim, const int i, const int j, const int k, const int fromLevel, const int toLevel, int ext[6])
void AddBlockConnection(const int gridID, const int blockDirection)
void InitializeGhostData(const int gridID)
void CreateGhostedExtent(const int gridID, const int N)
void SetGhostedExtent(const int gridID, int ext[6])
std::vector< std::vector< int > > CellCenteredDonorLevel
std::vector< unsigned char > BlockTopology
bool IsNodeWithinExtent(const int i, const int j, const int k, int ext[6])
bool HasBlockConnection(const int gridID, const int blockDirection)
represent and manipulate fields of data
void SetBlockTopology(const int gridID)
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
std::vector< int > RefinementRatios
void GetRefinedExtent(const int gridIdx, int fromLevel, int toLevel, int ext[6])
virtual void RegisterGrid(const int gridIdx, const int level, const int refinementRatio, int extents[6], vtkUnsignedCharArray *nodesGhostArray, vtkUnsignedCharArray *cellGhostArray, vtkPointData *pointData, vtkCellData *cellData, vtkPoints *gridNodes)
virtual void TransferGhostDataFromNeighbors(const int gridID)
int GetNumberOfConnectingBlockFaces(const int gridID)
void GetCoarsenedExtent(const int gridIdx, int fromLevel, int toLevel, int ext[6])
unsigned int NumberOfGrids
int GetGridLevel(const int gridIdx)
static vtkStructuredAMRGridConnectivity * New()
bool HasConstantRefinementRatio()
void TransferLocalNodeCenteredNeighborData(const int gridID, vtkStructuredAMRNeighbor &nei)
represent and manipulate cell attribute data
a simple class to control print indentation
vtkStructuredAMRGridConnectivity()
int Get1DOrientation(const int idx, const int ExtentLo, const int ExtentHi, const int OnLo, const int OnHi, const int NotOnBoundary)
std::map< int, std::set< int > > AMRHierarchy
void GetNodeOrientation(const int i, const int j, const int k, int gridExt[6], int nodeOrientation[3])
void AverageFieldData(vtkFieldData *source, vtkIdType *sourceIds, const int N, vtkFieldData *target, vtkIdType targetIdx)
virtual void SetNumberOfGrids(const unsigned int N)
void GetGhostedExtent(const int gridID, int ext[6])
void PrintSelf(ostream &os, vtkIndent indent)
#define vtkGetMacro(name, type)
void SetRefinementRatioAtLevel(const int level, const int r)
void GetOrientationVector(const int dataDescription, int orient[3], int &ndim)
void TransferLocalNeighborData(const int gridID, vtkStructuredAMRNeighbor &nei)
bool IsNodeOnBoundaryOfExtent(const int i, const int j, const int k, int ext[6])
virtual void RegisterGrid(const int gridIdx, const int level, int extents[6], vtkUnsignedCharArray *nodesGhostArray, vtkUnsignedCharArray *cellGhostArray, vtkPointData *pointData, vtkCellData *cellData, vtkPoints *gridNodes)
void GetGridExtent(const int gridIdx, int ext[6])
void GetLocalCellCentersFromFinerLevel(const int gridID, vtkStructuredAMRNeighbor &nei)
vtkSetMacro(IgnoreDriverBugs, bool)
bool LevelExists(const int level)
unsigned int NumberOfLevels
GLdouble GLdouble GLdouble r
virtual void FillGhostArrays(const int gridId, vtkUnsignedCharArray *nodesArray, vtkUnsignedCharArray *cellsArray)
void EstablishNeighbors(const int i, const int j)
std::vector< std::vector< vtkStructuredAMRNeighbor > > Neighbors
bool IsNodeInterior(const int i, const int j, const int k, int ext[6])
std::vector< int > GridExtents
void Initialize(const unsigned int NumberOfLevels, const unsigned int N, const int RefinementRatio=-1)
void GetLocalCellCentersAtSameLevel(const int gridID, vtkStructuredAMRNeighbor &nei)
void ComputeNeighborSendAndRcvExtent(const int gridID, const int N)
void TransferLocalCellCenteredNeighborData(const int gridID, vtkStructuredAMRNeighbor &nei)
int GetNumberOfNeighbors(const int gridID)
void ComputeAMRNeighborOverlapExtents(const int iLevel, const int jLevel, const int normalizedLevel, const vtkStructuredNeighbor &nei, int orient[3], int ndim, int gridOverlapExtent[6], int neiOverlapExtent[6])
vtkStructuredAMRNeighbor GetNeighbor(const int gridID, const int nei)
bool AreExtentsEqual(int ext1[6], int ext2[6])
void TransferRegisteredDataToGhostedData(const int gridID)
bool IsNodeOnSharedBoundary(const int i, const int j, const int k, const int gridId, int gridExt[6])
void RefineExtent(int orient[3], int ndim, int fromLevel, int toLevel, int ext[6])
virtual void FillCellsGhostArray(const int gridId, vtkUnsignedCharArray *cellArray)
void PrintExtent(std::ostream &os, int ext[6])
virtual void FillNodesGhostArray(const int gridId, vtkUnsignedCharArray *nodesArray)
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
virtual void ComputeNeighbors()
std::vector< int > GhostedExtents
std::vector< int > GridLevels
void ClearBlockConnections(const int gridID)