15 class GridTraversalEventGenerator;
127 const std::set<int>& splitting,
128 const std::set< int >& joinTriggered,
129 const std::set< int >& joining,
130 const std::set< int >& hasSplit,
131 bool spacetreeStateIsRunning
151 const std::set<int>& splitting,
152 const std::set< int >& joinTriggered,
153 const std::set< int >& joining,
155 bool spacetreeStateIsRunning
230 const std::set<int>& splitting,
231 const std::set< int >& joinTriggered,
232 const std::set< int >& joining,
233 bool calledByLeaveCell
239 const std::set<int>& splitting,
240 const std::set< int >& joinTriggered,
241 const std::set< int >& joining,
242 bool calledByLeaveCell
252 const std::set<int>& splitting,
253 const std::set< int >& joinTriggered,
254 const std::set< int >& joining
292 const std::set<int>& splitting,
293 const std::set< int >& joinTriggered,
294 const std::set< int >& joining
334 const std::set<int>& splitting,
335 const std::set< int >& joinTriggered,
336 const std::set< int >& joining,
337 bool splittingIsConsideredLocal,
338 bool joiningIsConsideredLocal
358 const std::set<int>& splitting,
359 const std::set< int >& joinTriggered,
360 const std::set< int >& joining,
361 bool splittingIsConsideredLocal,
362 bool joiningIsConsideredLocal
404 const std::set<int>& splitting,
405 const std::set< int >& joinTriggered,
406 const std::set< int >& joining,
407 const std::set< int >& hasSplit,
409 bool spacetreeStateIsRunning
420 const std::set<int>& splitting,
421 const std::set< int >& joinTriggered,
422 const std::set< int >& joining,
423 const std::set< int >& hasSplit,
425 bool spacetreeStateIsRunning
578 const std::set<int>& splitting,
579 const std::set< int >& joinTriggered,
580 const std::set< int >& joining
592 bool useBackedUpAdjacencyInformation
Translate grid traversal automaton's transitions into user events.
static void getVertexTypes(GridVertex coarseGridVertices[TwoPowerD], const tarch::la::Vector< Dimensions, int > &positionOfCell, VertexType vertexTypes[TwoPowerD])
Determine the types of all vertices of one cell.
static VertexType getVertexType(GridVertex coarseGridVertices[TwoPowerD], tarch::la::Vector< Dimensions, int > position)
Identify type of a vertex within the patch of a parent cell.
int getTreeOwningSpacetreeNode(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining) const
We run over the adjacent vertices of the cell and look at each vertex's adjacency list.
static CellType getCellType(GridVertex coarseGridVertices[TwoPowerD], tarch::la::Vector< Dimensions, int > positionOfCell)
You pass in the vertices and it gives you back the cell type.
const int _id
Number of underlying tree.
static bool isFullyRemoteLeaveEvent(const GridTraversalEvent &event)
Counterpart of isFullyRemoteEnterEvent() for the leave event.
tarch::la::Vector< TwoPowerD, int > getAdjacentRanksOfFace(GridVertex vertex[TwoPowerD], int faceNumber, bool useBackedUpAdjacencyInformation) const
bool isSpacetreeNodeLocal(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, bool splittingIsConsideredLocal, bool joiningIsConsideredLocal) const
A spacetree node as 2^d adjacent vertices.
static CellType getCellType(const VertexType vertexTypes[TwoPowerD])
Identify type of cell from the precomputed types of its vertices.
static bool mayMaskDataOnIntermediateStacks(const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, const std::set< int > &hasSplit, bool spacetreeStateIsRunning)
May data of non-local entities be masked out on the stacks between cells?
std::bitset< TwoPowerD > areVerticesLocal(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining) const
Vertices are local.
GridTraversalEvent createLeaveCellTraversalEvent(GridVertex coarseGridVertices[TwoPowerD], GridVertex fineGridVertices[TwoPowerD], const AutomatonState &state, const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, const std::set< int > &hasSplit, const tarch::la::Vector< Dimensions, int > &relativePositionToFather, bool spacetreeStateIsRunning) const
Create description of a leave cell traversal.
bool isVertexAdjacentToLocalSpacetree(GridVertex vertex, const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, bool splittingIsConsideredLocal, bool joiningIsConsideredLocal) const
Study the adjacency flags and do ignore hanging nodes.
GridTraversalEventGenerator(int id)
std::bitset< TwoTimesD > areFacesLocal(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining) const
Identifies for the faces whether they are local or not.
static tarch::logging::Log _log
static bool isFullyRemoteEnterEvent(const GridTraversalEvent &event)
Is a cell fully remote when we enter it?
GridTraversalEvent createGenericCellTraversalEvent(GridVertex coarseGridVertices[TwoPowerD], GridVertex fineGridVertices[TwoPowerD], const AutomatonState &state, const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, const tarch::la::Vector< Dimensions, int > &relativePositionToFather, bool spacetreeStateIsRunning) const
std::bitset< TwoPowerD > areVerticesAdjacentToParallelDomainBoundary(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, bool calledByLeaveCell) const
A vertex is inside the domain, if all of its ids equal _id.
GridTraversalEvent createPrunedLeaveCellTraversalEvent(SpacetreeState spacetreeState, const GridTraversalEvent &event) const
std::bitset< TwoTimesD > areFacesAdjacentToParallelDomainBoundary(GridVertex vertices[TwoPowerD], const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, bool calledByLeaveCell) const
static FaceType getFaceType(const VertexType vertexTypes[TwoPowerD], int faceNumber)
Identify type of face from the precomputed types of the cell's vertices.
GridTraversalEvent createPrunedEnterCellTraversalEvent(SpacetreeState spacetreeState, const GridTraversalEvent &event) const
When we fork or join, the worker's locality analysis identifies local vertices and faces.
GridTraversalEvent createEnterCellTraversalEvent(GridVertex coarseGridVertices[TwoPowerD], GridVertex fineGridVertices[TwoPowerD], const AutomatonState &state, const SplitSpecification &splitTriggered, const std::set< int > &splitting, const std::set< int > &joinTriggered, const std::set< int > &joining, const std::set< int > &hasSplit, const tarch::la::Vector< Dimensions, int > &relativePositionToFather, bool spacetreeStateIsRunning) const
Create description of an enter cell traversal.
static FaceType getFaceType(GridVertex coarseGridVertices[TwoPowerD], tarch::la::Vector< Dimensions, int > positionOfCell, int faceNumber)
Identify type of vertex.
std::map< int, SplitInstruction > SplitSpecification