#ifndef GRID_COMMUNICATOR_H #define GRID_COMMUNICATOR_H /////////////////////////////////// // Processor layout information /////////////////////////////////// namespace dpo { class CartesianCommunicator { public: // Communicator should know nothing of the physics grid, only processor grid. std::vector _processors; // Which dimensions get relayed out over processors lanes. int _processor; // linear processor rank std::vector _processor_coor; // linear processor coordinate unsigned long _ndimension; #ifdef GRID_COMMS_MPI MPI_Comm communicator; #endif CartesianCommunicator(std::vector &pdimensions_in); int Rank(std::vector coor); void GlobalSumF(float &); void GlobalSumFVector(float *,int N); void GlobalSumF(double &); void GlobalSumFVector(double *,int N); void SendToRecvFrom(void *xmit, std::vector to_coordinate, void *recv, std::vector from_coordinate, int bytes); }; } #endif