|  | VTK
    9.0.1
    | 
 
 
 
Go to the documentation of this file.
   31 #ifndef vtkStructuredAMRGridConnectivity_h 
   32 #define vtkStructuredAMRGridConnectivity_h 
   35 #include "vtkFiltersGeometryModule.h"  
   61     const unsigned int NumberOfLevels, 
const unsigned int N, 
const int RefinementRatio = -1);
 
   78   virtual void RegisterGrid(
const int gridIdx, 
const int level, 
const int refinementRatio,
 
   87   virtual void RegisterGrid(
const int gridIdx, 
const int level, 
int extents[6],
 
   97   vtkSetMacro(BalancedRefinement, 
bool);
 
   98   vtkGetMacro(BalancedRefinement, 
bool);
 
  107   vtkSetMacro(NodeCentered, 
bool);
 
  108   vtkGetMacro(NodeCentered, 
bool);
 
  116   vtkSetMacro(CellCentered, 
bool);
 
  117   vtkGetMacro(CellCentered, 
bool);
 
  124   int GetNumberOfNeighbors(
const int gridID);
 
  129   void GetGhostedExtent(
const int gridID, 
int ext[6]);
 
  148   void CreateGhostedMaskArrays(
const int gridID);
 
  153   void CreateGhostedExtent(
const int gridID, 
const int N);
 
  158   void SetGhostedExtent(
const int gridID, 
int ext[6]);
 
  163   void GetCoarsenedExtent(
const int gridIdx, 
int fromLevel, 
int toLevel, 
int ext[6]);
 
  168   void GetRefinedExtent(
const int gridIdx, 
int fromLevel, 
int toLevel, 
int ext[6]);
 
  173   void RefineExtent(
int orient[3], 
int ndim, 
int fromLevel, 
int toLevel, 
int ext[6]);
 
  179   void GetCellRefinedExtent(
int orient[3], 
int ndim, 
const int i, 
const int j, 
const int k,
 
  180     const int fromLevel, 
const int toLevel, 
int ext[6]);
 
  185   void CoarsenExtent(
int orient[3], 
int ndim, 
int fromLevel, 
int toLevel, 
int ext[6]);
 
  190   void GetGridExtent(
const int gridIdx, 
int ext[6]);
 
  195   int GetGridLevel(
const int gridIdx);
 
  200   bool LevelExists(
const int level);
 
  205   bool IsNodeInterior(
const int i, 
const int j, 
const int k, 
int ext[6]);
 
  210   bool IsNodeWithinExtent(
const int i, 
const int j, 
const int k, 
int ext[6]);
 
  215   bool IsNodeOnSharedBoundary(
 
  216     const int i, 
const int j, 
const int k, 
const int gridId, 
int gridExt[6]);
 
  221   bool IsNodeOnBoundaryOfExtent(
const int i, 
const int j, 
const int k, 
int ext[6]);
 
  226   void InsertGridAtLevel(
const int level, 
const int gridID);
 
  232   void ComputeNeighborSendAndRcvExtent(
const int gridID, 
const int N);
 
  238   void ComputeWholeExtent();
 
  244   void GetWholeExtentAtLevel(
const int level, 
int ext[6]);
 
  250   void EstablishNeighbors(
const int i, 
const int j);
 
  255   void GetNodeOrientation(
 
  256     const int i, 
const int j, 
const int k, 
int gridExt[6], 
int nodeOrientation[3]);
 
  265   void GetOrientationVector(
const int dataDescription, 
int orient[3], 
int& ndim);
 
  270   bool HasConstantRefinementRatio();
 
  275   void SetRefinementRatioAtLevel(
const int level, 
const int r);
 
  280   int GetRefinementRatioAtLevel(
const int level);
 
  285   bool AreExtentsEqual(
int ext1[6], 
int ext2[6]);
 
  290   void SetBlockTopology(
const int gridID);
 
  299   int GetNumberOfConnectingBlockFaces(
const int gridID);
 
  319     assert(
"pre: gridID is out-of-bounds" && (gridID >= 0) &&
 
  320       (gridID < 
static_cast<int>(this->NumberOfGrids)));
 
  321     assert(
"pre: BlockTopology has not been properly allocated" &&
 
  322       (this->NumberOfGrids == this->BlockTopology.size()));
 
  323     assert(
"pre: blockDirection is out-of-bounds" && (blockDirection >= 0) && (blockDirection < 6));
 
  325     if (this->BlockTopology[gridID] & (1 << blockDirection))
 
  347   void RemoveBlockConnection(
const int gridID, 
const int blockDirection);
 
  363   void AddBlockConnection(
const int gridID, 
const int blockDirection);
 
  369   void ClearBlockConnections(
const int gridID);
 
  374   virtual void MarkNodeProperty(
const int gridId, 
const int i, 
const int j, 
const int k,
 
  375     int gridExt[6], 
int wholeExt[6], 
unsigned char& p);
 
  405     const int jLevel, 
int next2[6], 
const int normalizedLevel, 
const int levelDiff,
 
  413   void ComputeAMRNeighborOverlapExtents(
const int iLevel, 
const int jLevel,
 
  415     int gridOverlapExtent[6], 
int neiOverlapExtent[6]);
 
  420   int Get1DOrientation(
const int idx, 
const int ExtentLo, 
const int ExtentHi, 
const int OnLo,
 
  421     const int OnHi, 
const int NotOnBoundary);
 
  426   void PrintExtent(std::ostream& os, 
int ext[6]);
 
  431   void InitializeGhostData(
const int gridID);
 
  436   void TransferRegisteredDataToGhostedData(
const int gridID);
 
  473   virtual void TransferGhostDataFromNeighbors(
const int gridID);
 
  516   std::vector<std::vector<vtkStructuredAMRNeighbor> > 
Neighbors;
 
  539   assert(
"pre: grid ID is out-of-bounds" && (gridID >= 0) &&
 
  541   assert(
"pre: neighbors vector has not been properly allocated" &&
 
  542     (this->
Neighbors.size() == this->NumberOfGrids));
 
  548   const int gridID, 
const int nei)
 
  550   assert(
"pre: grid ID is out-of-bounds" && (gridID >= 0) &&
 
  552   assert(
"pre: neighbors vector has not been properly allocated" &&
 
  553     (this->
Neighbors.size() == this->NumberOfGrids));
 
  554   assert(
"pre: nei index is out-of-bounds" && (nei >= 0) &&
 
  561   const int ExtentHi, 
const int OnLo, 
const int OnHi, 
const int NotOnBoundary)
 
  567   else if (idx == ExtentHi)
 
  571   return NotOnBoundary;
 
  578   assert(
"pre: gridID is out-of-bounds" && (gridID >= 0) &&
 
  580   assert(
"pre: BlockTopology has not been properly allocated" &&
 
  584   for (
int i = 0; i < 6; ++i)
 
  591   assert(
"post: count must be in [0,5]" && (count >= 0 && count <= 6));
 
  597   const int gridID, 
const int blockDirection)
 
  600   assert(
"pre: gridID is out-of-bounds" && (gridID >= 0) &&
 
  602   assert(
"pre: BlockTopology has not been properly allocated" &&
 
  604   assert(
"pre: blockDirection is out-of-bounds" && (blockDirection >= 0) && (blockDirection < 6));
 
  611   const int gridID, 
const int blockDirection)
 
  614   assert(
"pre: gridID is out-of-bounds" && (gridID >= 0) &&
 
  616   assert(
"pre: BlockTopology has not been properly allocated" &&
 
  618   assert(
"pre: blockDirection is out-of-bounds" && (blockDirection >= 0) && (blockDirection < 6));
 
  626   assert(
"pre: gridID is out-of-bounds" && (gridID >= 0) &&
 
  628   assert(
"pre: BlockTopology has not been properly allocated" &&
 
  630   for (
int i = 0; i < 6; ++i)
 
  639   for (
int i = 0; i < 6; ++i)
 
  641     if (ext1[i] != ext2[i])
 
  652   for (
int i = 0; i < 6; i += 2)
 
  656     os << ext[i + 1] << 
"] ";
 
  663   assert(
"pre: grid Index is out-of-bounds!" && (gridIdx < 
static_cast<int>(this->
NumberOfGrids)));
 
  664   assert(
"pre: grid levels vector has not been allocated" &&
 
  665     (this->
GridLevels.size() == this->NumberOfGrids));
 
  671   const int level, 
const int r)
 
  673   assert(
"pre: RefinementRatios vector is not properly allocated" &&
 
  675   assert(
"pre: leve is out-of-bounds!" && (
level >= 0) &&
 
  677   assert(
"pre: invalid refinement ratio" && (r >= 2));
 
  685   assert(
"pre: RefinementRatios vector is not properly allocated" &&
 
  687   assert(
"pre: leve is out-of-bounds!" && (
level >= 0) &&
 
  690     "pre: refinement ratio for level has not been set" && (this->
RefinementRatios[level] >= 2));
 
  708   assert(
"pre: grid index is out-of-bounds" &&
 
  709     ((gridIdx >= 0) && (gridIdx < 
static_cast<int>(this->
GridExtents.size()))));
 
  711   for (
int i = 0; i < 6; ++i)
 
  720   if (this->
AMRHierarchy.find(level) != this->AMRHierarchy.end())
 
  737     grids.insert(gridID);
 
  
represent and manipulate 3D points
void InsertGridAtLevel(const int level, const int gridID)
Inserts the grid corresponding to the given ID at the prescribed level.
std::vector< int > GridLevels
represent and manipulate point attribute data
int GetRefinementRatioAtLevel(const int level)
Returns the refinement ratio at the given level.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
void RemoveBlockConnection(const int gridID, const int blockDirection)
Removes a block connection along the given direction for the block corresponding to the given gridID.
dynamic, self-adjusting array of unsigned char
virtual void FillGhostArrays(const int gridId, vtkUnsignedCharArray *nodesArray, vtkUnsignedCharArray *cellsArray)=0
Fills the ghost arrays for the given grid.
std::vector< unsigned char > BlockTopology
void AddBlockConnection(const int gridID, const int blockDirection)
Adds a block connection along the given direction for the block corresponding to the given gridID.
std::map< int, std::set< int > > AMRHierarchy
virtual void CreateGhostLayers(const int N=1)=0
Creates N layers of ghost layers where N is the number of cells that will be added to each grid.
std::vector< int > RefinementRatios
bool HasBlockConnection(const int gridID, const int blockDirection)
Checks if the block corresponding to the given grid ID has a block adjacent to it in the given block ...
represent and manipulate fields of data
virtual void SetNumberOfGrids(const unsigned int N)=0
Sets the total number of grids in the domain.
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
std::vector< int > GridExtents
int GetNumberOfConnectingBlockFaces(const int gridID)
Returns the number of faces of the block corresponding to the given grid ID that are adjacent to at l...
unsigned int NumberOfGrids
int GetGridLevel(const int gridIdx)
Returns the level of the grid with the corresponding grid ID.
bool HasConstantRefinementRatio()
Checks if a constant refinement ratio has been specified.
represent and manipulate cell attribute data
std::vector< int > GhostedExtents
a simple class to control print indentation
int Get1DOrientation(const int idx, const int ExtentLo, const int ExtentHi, const int OnLo, const int OnHi, const int NotOnBoundary)
Get 1-D orientation.
std::vector< std::vector< int > > CellCenteredDonorLevel
void SetRefinementRatioAtLevel(const int level, const int r)
Sets the refinement ratio at the given level.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void GetGridExtent(const int gridIdx, int ext[6])
Gets the grid extent for the grid with the given grid ID.
bool LevelExists(const int level)
Checks if the given level has been registered.
unsigned int NumberOfLevels
virtual void ComputeNeighbors()=0
Computes the grid neighboring topology for the domain.
int GetNumberOfNeighbors(const int gridID)
Returns the number of neighbors for the grid corresponding to the given grid ID.
vtkStructuredAMRNeighbor GetNeighbor(const int gridID, const int nei)
Returns the AMR neighbor for the patch with the corresponding grid ID.
bool AreExtentsEqual(int ext1[6], int ext2[6])
Checks if the extent ext1 and ext2 are equal.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
void PrintExtent(std::ostream &os, int ext[6])
Prints the extent.
std::vector< std::vector< vtkStructuredAMRNeighbor > > Neighbors
void ClearBlockConnections(const int gridID)
Clears all block connections for the block corresponding to the given grid ID.