33 struct GridTraversalEvent;
44 GridTraversalEvent(
tarch::la::Vector<Dimensions,double> __x,
tarch::la::Vector<Dimensions,double> __h, std::bitset<TwoPowerD> __hasBeenRefined, std::bitset<TwoPowerD> __willBeRefined, std::bitset<TwoPowerD> __isVertexLocal, std::bitset<TwoPowerD> __isParentVertexLocal, std::bitset<TwoPowerD> __isVertexParentOfSubtree, std::bitset<TwoTimesD> __isFaceLocal,
bool __isCellLocal,
bool __isParentCellLocal, std::bitset<TwoPowerD> __isVertexAdjacentToParallelDomainBoundary, std::bitset<TwoTimesD> __isFaceAdjacentToParallelDomainBoundary,
tarch::la::Vector<TwoPowerD,int> __numberOfAdjacentTreesPerVertex, std::bitset<ThreePowerD> __isAdjacentCellLocal,
tarch::la::Vector<TwoPowerD,int> __vertexDataFrom,
tarch::la::Vector<TwoPowerD,int> __vertexDataTo,
tarch::la::Vector<TwoTimesD,int> __faceDataFrom,
tarch::la::Vector<TwoTimesD,int> __faceDataTo,
int __cellData,
tarch::la::Vector<Dimensions,int> __relativePositionToFather,
int __invokingSpacetree,
bool __invokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing);
49 double getX(
int index)
const;
50 void setX(
int index,
double value);
53 double getH(
int index)
const;
54 void setH(
int index,
double value);
143 [[clang::map_mpi_datatype]]
146 [[clang::map_mpi_datatype]]
149 [[clang::map_mpi_datatype]]
152 [[clang::map_mpi_datatype]]
155 [[clang::map_mpi_datatype]]
158 [[clang::map_mpi_datatype]]
161 [[clang::map_mpi_datatype]]
164 [[clang::map_mpi_datatype]]
167 [[clang::map_mpi_datatype]]
170 [[clang::map_mpi_datatype]]
207 static void send(
const peano4::grid::GridTraversalEvent& buffer,
int destination,
int tag, std::function<
void()> startCommunicationFunctor, std::function<
void()> waitFunctor, MPI_Comm communicator );
208 static void receive(
peano4::grid::GridTraversalEvent& buffer,
int source,
int tag, std::function<
void()> startCommunicationFunctor, std::function<
void()> waitFunctor, MPI_Comm communicator );
228#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
229 [[clang::truncate_mantissa(48)]]
double _x[Dimensions];
231#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
234#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
235 [[clang::truncate_mantissa(48)]]
double _h[Dimensions];
237#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
240#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
243#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
246#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
249#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
252#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
255#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
258#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
261#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
264#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
267#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
270#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
273#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
278#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
281#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
284#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
287#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
291#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
294#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
302#if defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
305#if !defined(__PACKED_ATTRIBUTES_LANGUAGE_EXTENSION__)
317 #if !defined(__MPI_ATTRIBUTES_LANGUAGE_EXTENSION__)
static Rank & getInstance()
This operation returns the singleton instance.
static MPI_Datatype getForkDatatype()
Hands out MPI datatype if we work without the LLVM MPI extension.
static void freeJoinDatatype()
void setIsFaceAdjacentToParallelDomainBoundary(const std::bitset< TwoTimesD > &value)
std::bitset< TwoTimesD > getIsFaceLocal() const
std::bitset< ThreePowerD > _isAdjacentCellLocal
void setIsFaceLocal(const std::bitset< TwoTimesD > &value)
void setRelativePositionToFather(const tarch::la::Vector< Dimensions, int > &value)
bool getInvokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing() const
bool _invokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing
void flipIsParentVertexLocal(int index)
void setVertexDataFrom(const tarch::la::Vector< TwoPowerD, int > &value)
tarch::la::Vector< TwoTimesD, int > getFaceDataFrom() const
void setCellData(int value)
void flipIsVertexParentOfSubtree(int index)
std::bitset< TwoPowerD > getIsVertexParentOfSubtree() const
std::bitset< TwoPowerD > _isParentVertexLocal
std::bitset< TwoPowerD > getHasBeenRefined() const
static void sendAndPollDanglingMessages(const peano4::grid::GridTraversalEvent &message, int destination, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator())
std::string toString() const
tarch::la::Vector< TwoPowerD, int > _vertexDataFrom
void setFaceDataTo(const tarch::la::Vector< TwoTimesD, int > &value)
static void receive(peano4::grid::GridTraversalEvent &buffer, int source, int tag, MPI_Comm communicator)
std::bitset< TwoTimesD > _isFaceAdjacentToParallelDomainBoundary
void setX(const tarch::la::Vector< Dimensions, double > &value)
static void send(const peano4::grid::GridTraversalEvent &buffer, int destination, int tag, MPI_Comm communicator)
In DaStGen (the first version), I had a non-static version of the send as well as the receive.
void setInvokingSpacetree(int value)
void flipIsVertexAdjacentToParallelDomainBoundary(int index)
void setNumberOfAdjacentTreesPerVertex(const tarch::la::Vector< TwoPowerD, int > &value)
std::bitset< TwoPowerD > _hasBeenRefined
std::bitset< TwoPowerD > _isVertexLocal
tarch::la::Vector< TwoTimesD, int > _faceDataTo
void setInvokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing(bool value)
std::bitset< ThreePowerD > getIsAdjacentCellLocal() const
tarch::la::Vector< TwoTimesD, int > _faceDataFrom
void flipIsAdjacentCellLocal(int index)
int getInvokingSpacetree() const
tarch::la::Vector< TwoPowerD, int > getVertexDataFrom() const
static void shutdownDatatype()
Free the underlying MPI datatype.
void setIsAdjacentCellLocal(const std::bitset< ThreePowerD > &value)
std::bitset< TwoPowerD > getIsParentVertexLocal() const
std::bitset< TwoPowerD > _isVertexParentOfSubtree
std::bitset< TwoPowerD > getWillBeRefined() const
void setIsCellLocal(bool value)
std::bitset< TwoPowerD > getIsVertexAdjacentToParallelDomainBoundary() const
void setFaceDataFrom(const tarch::la::Vector< TwoTimesD, int > &value)
tarch::la::Vector< TwoTimesD, int > getFaceDataTo() const
int getSenderRank() const
void flipIsVertexLocal(int index)
static void initDatatype()
Wrapper around getDatatype() to trigger lazy evaluation if we use the lazy initialisation.
static void freeBoundaryExchangeDatatype()
tarch::la::Vector< Dimensions, double > getH() const
void flipIsFaceAdjacentToParallelDomainBoundary(int index)
static MPI_Datatype getJoinDatatype()
void setIsVertexLocal(const std::bitset< TwoPowerD > &value)
tarch::la::Vector< Dimensions, int > _relativePositionToFather
void setH(const tarch::la::Vector< Dimensions, double > &value)
void setIsParentVertexLocal(const std::bitset< TwoPowerD > &value)
tarch::la::Vector< TwoPowerD, int > _numberOfAdjacentTreesPerVertex
int _senderDestinationRank
void setWillBeRefined(const std::bitset< TwoPowerD > &value)
static MPI_Datatype getMultiscaleDataExchangeDatatype()
static MPI_Datatype getBoundaryExchangeDatatype()
GridTraversalEvent(ObjectConstruction)
void setIsVertexAdjacentToParallelDomainBoundary(const std::bitset< TwoPowerD > &value)
tarch::la::Vector< TwoPowerD, int > getNumberOfAdjacentTreesPerVertex() const
static void receiveAndPollDanglingMessages(peano4::grid::GridTraversalEvent &message, int source, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator())
void setIsVertexParentOfSubtree(const std::bitset< TwoPowerD > &value)
std::bitset< TwoPowerD > _isVertexAdjacentToParallelDomainBoundary
std::bitset< TwoTimesD > _isFaceLocal
tarch::la::Vector< TwoPowerD, int > getVertexDataTo() const
std::bitset< TwoPowerD > getIsVertexLocal() const
bool getIsCellLocal() const
void setIsParentCellLocal(bool value)
void flipIsFaceLocal(int index)
static void freeGlobalCommunciationDatatype()
void flipHasBeenRefined(int index)
static MPI_Datatype getGlobalCommunciationDatatype()
static void freeMultiscaleDataExchangeDatatype()
tarch::la::Vector< Dimensions, double > _h
tarch::la::Vector< Dimensions, double > getX() const
std::bitset< TwoTimesD > getIsFaceAdjacentToParallelDomainBoundary() const
tarch::la::Vector< Dimensions, int > getRelativePositionToFather() const
tarch::la::Vector< Dimensions, double > _x
void setVertexDataTo(const tarch::la::Vector< TwoPowerD, int > &value)
void setHasBeenRefined(const std::bitset< TwoPowerD > &value)
bool getIsParentCellLocal() const
tarch::la::Vector< TwoPowerD, int > _vertexDataTo
std::bitset< TwoPowerD > _willBeRefined
static MPI_Datatype Datatype
Whenever we use LLVM's MPI extension (DaStGe), we rely on lazy initialisation of the datatype.
void flipWillBeRefined(int index)
static void freeForkDatatype()