Peano
Loading...
Searching...
No Matches
GridTraversalEventGenerator.h
Go to the documentation of this file.
1// This file is part of the Peano project. For conditions of distribution and
2// use, please see the copyright notice at www.peano-framework.org
3#pragma once
4
6#include "tarch/logging/Log.h"
7
8#include "grid.h"
10#include "AutomatonState.h"
11#include "GridVertex.h"
12
13namespace peano4 {
14 namespace grid {
15 class GridTraversalEventGenerator;
16
17 namespace tests {
19 }
20 }
21}
22
78 private:
80
82
86 const int _id;
87
88 public:
101
109
126 const SplitSpecification& splitTriggered,
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
132 );
133
134 private:
135
147 GridVertex coarseGridVertices[TwoPowerD],
148 GridVertex fineGridVertices[TwoPowerD],
149 const AutomatonState& state,
150 const SplitSpecification& splitTriggered,
151 const std::set<int>& splitting,
152 const std::set< int >& joinTriggered,
153 const std::set< int >& joining,
154 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
155 bool spacetreeStateIsRunning
156 ) const;
157
200 GridVertex coarseGridVertices[TwoPowerD],
202 int faceNumber
203 );
204
217 const VertexType vertexTypes[TwoPowerD],
218 int faceNumber
219 );
220
228 GridVertex vertices[TwoPowerD],
229 const SplitSpecification& splitTriggered,
230 const std::set<int>& splitting,
231 const std::set< int >& joinTriggered,
232 const std::set< int >& joining,
233 bool calledByLeaveCell
234 ) const;
235
237 GridVertex vertices[TwoPowerD],
238 const SplitSpecification& splitTriggered,
239 const std::set<int>& splitting,
240 const std::set< int >& joinTriggered,
241 const std::set< int >& joining,
242 bool calledByLeaveCell
243 ) const;
244
249 std::bitset<TwoPowerD> areVerticesLocal(
250 GridVertex vertices[TwoPowerD],
251 const SplitSpecification& splitTriggered,
252 const std::set<int>& splitting,
253 const std::set< int >& joinTriggered,
254 const std::set< int >& joining
255 ) const;
256
289 std::bitset<TwoTimesD> areFacesLocal(
290 GridVertex vertices[TwoPowerD],
291 const SplitSpecification& splitTriggered,
292 const std::set<int>& splitting,
293 const std::set< int >& joinTriggered,
294 const std::set< int >& joining
295 ) const;
296
297 public:
299
332 GridVertex vertex,
333 const SplitSpecification& splitTriggered,
334 const std::set<int>& splitting,
335 const std::set< int >& joinTriggered,
336 const std::set< int >& joining,
337 bool splittingIsConsideredLocal,
338 bool joiningIsConsideredLocal
339 ) const;
340
356 GridVertex vertices[TwoPowerD],
357 const SplitSpecification& splitTriggered,
358 const std::set<int>& splitting,
359 const std::set< int >& joinTriggered,
360 const std::set< int >& joining,
361 bool splittingIsConsideredLocal,
362 bool joiningIsConsideredLocal
363 ) const;
364
400 GridVertex coarseGridVertices[TwoPowerD],
401 GridVertex fineGridVertices[TwoPowerD],
402 const AutomatonState& state,
403 const SplitSpecification& splitTriggered,
404 const std::set<int>& splitting,
405 const std::set< int >& joinTriggered,
406 const std::set< int >& joining,
407 const std::set< int >& hasSplit,
408 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
409 bool spacetreeStateIsRunning
410 ) const;
411
416 GridVertex coarseGridVertices[TwoPowerD],
417 GridVertex fineGridVertices[TwoPowerD],
418 const AutomatonState& state,
419 const SplitSpecification& splitTriggered,
420 const std::set<int>& splitting,
421 const std::set< int >& joinTriggered,
422 const std::set< int >& joining,
423 const std::set< int >& hasSplit,
424 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
425 bool spacetreeStateIsRunning
426 ) const;
427
463
472 GridVertex coarseGridVertices[TwoPowerD],
474 );
475
484 const VertexType vertexTypes[TwoPowerD]
485 );
486
509 static void getVertexTypes(
510 GridVertex coarseGridVertices[TwoPowerD],
511 const tarch::la::Vector<Dimensions,int>& positionOfCell,
512 VertexType vertexTypes[TwoPowerD]
513 );
514
549 GridVertex coarseGridVertices[TwoPowerD],
551 );
552
576 GridVertex vertices[TwoPowerD],
577 const SplitSpecification& splitTriggered,
578 const std::set<int>& splitting,
579 const std::set< int >& joinTriggered,
580 const std::set< int >& joining
581 ) const;
582
590 GridVertex vertex[TwoPowerD],
591 int faceNumber,
592 bool useBackedUpAdjacencyInformation
593 ) const;
594};
#define TwoPowerD
Definition Globals.h:19
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.
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.
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 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.
Log Device.
Definition Log.h:517
std::map< int, SplitInstruction > SplitSpecification
Definition grid.h:44
Simple vector class.
Definition Vector.h:159