File mpicartesianneighbourssingledimension.h
File List > cartesian > mpicartesianneighbourssingledimension.h
Go to the documentation of this file
#ifndef TEMPLAT_PARALLEL_MPI_CARTESIAN_MPICARTESIANNEIGHBOURSSINGLEDIMENSION_H
#define TEMPLAT_PARALLEL_MPI_CARTESIAN_MPICARTESIANNEIGHBOURSSINGLEDIMENSION_H
/* This file is part of TempLat, available at https://cosmolattice.github.io/templat .
Copyright 2021-2026 The TempLat authors, see AUTHORS.md.
Released under the MIT license, see LICENSE.md. */
// File info: Main contributor(s): Wessel Valkenburg, Year: 2019
#include "TempLat/parallel/mpi/cartesian/mpicartesiangroup.h"
namespace TempLat
{
class MPICartesianNeighboursSingleDimension
{
public:
// Put public methods here. These should change very little over time.
MPICartesianNeighboursSingleDimension(MPICartesianGroup cartesianGroup, ptrdiff_t dimension)
: mCartesianGroup(cartesianGroup), mDimension(dimension), mUpperNeighbourRank(0), mLowerNeighbourRank(0)
{
#ifdef HAVE_MPI
const int displacement = 1;
MPI_Cart_shift(mCartesianGroup.getComm(), mDimension, displacement, &mLowerNeighbourRank, &mUpperNeighbourRank);
#endif
}
const int &getUpper() const { return mUpperNeighbourRank; }
const int &getLower() const { return mLowerNeighbourRank; }
friend std::ostream &operator<<(std::ostream &ostream, const MPICartesianNeighboursSingleDimension &nsd)
{
ostream << "Dimension: " << nsd.mDimension << " - lower neighbour: " << nsd.mLowerNeighbourRank
<< " - upper neighbour: " << nsd.mUpperNeighbourRank;
return ostream;
}
private:
/* Put all member variables and private methods here. These may change arbitrarily. */
MPICartesianGroup mCartesianGroup;
ptrdiff_t mDimension;
int mUpperNeighbourRank;
int mLowerNeighbourRank;
};
} // namespace TempLat
#endif