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
99 GridVertex coarseGridVertices[TwoPowerD],
100 GridVertex fineGridVertices[TwoPowerD],
101 const AutomatonState& state,
102 const SplitSpecification& splitTriggered,
103 const std::set<int>& splitting,
104 const std::set< int >& joinTriggered,
105 const std::set< int >& joining,
106 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
107 bool spacetreeStateIsRunning
108 ) const;
109
147 static FaceType getFaceType(
148 GridVertex coarseGridVertices[TwoPowerD],
150 int faceNumber
151 );
152
159 std::bitset<TwoPowerD> areVerticesAdjacentToParallelDomainBoundary(
160 GridVertex vertices[TwoPowerD],
161 const SplitSpecification& splitTriggered,
162 const std::set<int>& splitting,
163 const std::set< int >& joinTriggered,
164 const std::set< int >& joining,
165 bool calledByLeaveCell
166 ) const;
167
168 std::bitset<TwoTimesD> areFacesAdjacentToParallelDomainBoundary(
169 GridVertex vertices[TwoPowerD],
170 const SplitSpecification& splitTriggered,
171 const std::set<int>& splitting,
172 const std::set< int >& joinTriggered,
173 const std::set< int >& joining,
174 bool calledByLeaveCell
175 ) const;
176
181 std::bitset<TwoPowerD> areVerticesLocal(
182 GridVertex vertices[TwoPowerD],
183 const SplitSpecification& splitTriggered,
184 const std::set<int>& splitting,
185 const std::set< int >& joinTriggered,
186 const std::set< int >& joining
187 ) const;
188
221 std::bitset<TwoTimesD> areFacesLocal(
222 GridVertex vertices[TwoPowerD],
223 const SplitSpecification& splitTriggered,
224 const std::set<int>& splitting,
225 const std::set< int >& joinTriggered,
226 const std::set< int >& joining
227 ) const;
228
229 public:
231
264 GridVertex vertex,
265 const SplitSpecification& splitTriggered,
266 const std::set<int>& splitting,
267 const std::set< int >& joinTriggered,
268 const std::set< int >& joining,
269 bool splittingIsConsideredLocal,
270 bool joiningIsConsideredLocal
271 ) const;
272
288 GridVertex vertices[TwoPowerD],
289 const SplitSpecification& splitTriggered,
290 const std::set<int>& splitting,
291 const std::set< int >& joinTriggered,
292 const std::set< int >& joining,
293 bool splittingIsConsideredLocal,
294 bool joiningIsConsideredLocal
295 ) const;
296
332 GridVertex coarseGridVertices[TwoPowerD],
333 GridVertex fineGridVertices[TwoPowerD],
334 const AutomatonState& state,
335 const SplitSpecification& splitTriggered,
336 const std::set<int>& splitting,
337 const std::set< int >& joinTriggered,
338 const std::set< int >& joining,
339 const std::set< int >& hasSplit,
340 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
341 bool spacetreeStateIsRunning
342 ) const;
343
348 GridVertex coarseGridVertices[TwoPowerD],
349 GridVertex fineGridVertices[TwoPowerD],
350 const AutomatonState& state,
351 const SplitSpecification& splitTriggered,
352 const std::set<int>& splitting,
353 const std::set< int >& joinTriggered,
354 const std::set< int >& joining,
355 const std::set< int >& hasSplit,
356 const tarch::la::Vector<Dimensions,int>& relativePositionToFather,
357 bool spacetreeStateIsRunning
358 ) const;
359
395
402 static CellType getCellType(
403 GridVertex coarseGridVertices[TwoPowerD],
405 );
406
417 GridVertex coarseGridVertices[TwoPowerD],
419 int dimension = Dimensions-1
420 );
421
445 GridVertex vertices[TwoPowerD],
446 const SplitSpecification& splitTriggered,
447 const std::set<int>& splitting,
448 const std::set< int >& joinTriggered,
449 const std::set< int >& joining
450 ) const;
451
459 GridVertex vertex[TwoPowerD],
460 int faceNumber,
461 bool useBackedUpAdjacencyInformation
462 ) const;
463};
#define TwoPowerD
Definition Globals.h:19
AutomatonState state
Translate grid traversal automaton's transitions into user events.
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 VertexType getVertexType(GridVertex coarseGridVertices[TwoPowerD], tarch::la::Vector< Dimensions, int > position, int dimension=Dimensions-1)
Simple recursive type analysis.
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 FaceType getFaceType(GridVertex coarseGridVertices[TwoPowerD], tarch::la::Vector< Dimensions, int > positionOfCell, int faceNumber)
Identify type of vertex.
tarch::la::Vector< TwoPowerD, int > getAdjacentRanksOfFace(GridVertex vertex[TwoPowerD], int faceNumber, bool useBackedUpAdjacencyInformation) const
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
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.
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.
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.
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.
GridTraversalEvent createPrunedEnterCellTraversalEvent(SpacetreeState spacetreeState, const GridTraversalEvent &event) const
When we fork or join, the worker's locality analysis identifies local vertices and faces.
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.
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.
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
Log Device.
Definition Log.h:516
std::map< int, SplitInstruction > SplitSpecification
Definition grid.h:44
Simple vector class.
Definition Vector.h:134