NAME
MMPPIICCaarrttsshhiifftt - Returns the shifted source and destination ranks,
given a shift direction and amount. SSYYNNTTAAXX CC SSyynnttaaxx#include
int MPICartshift(MPIComm comm, int direction, int disp, int *ranksource, int *rankdest) FFoorrttrraann SSyynnttaaxx INCLUDE 'mpif.h' MPICARTSHIFT(COMM, DIRECTION, DISP, RANKSOURCE,RANKDEST, IERROR)
INTEGER COMM, DIRECTION, DISP, RANKSOURCEINTEGER RANKDEST, IERROR
CC++++ SSyynnttaaxx#include
void Cartcomm::Shift(int direction, int disp, int& ranksource, int& rankdest) const IINNPPUUTT PPAARRAAMMEETTEERRSS comm Communicator with Cartesian structure (handle). direction Coordinate dimension of shift (integer).disp Displacement ( > 0: upward shift, < 0: downward shift) (inte-
ger). OOUUTTPPUUTT PPAARRAAMMEETTEERRSS ranksource Rank of source process (integer). rankdest Rank of destination process (integer).IERROR Fortran only: Error status (integer).
DESCRIPTION
If the process topology is a Cartesian structure, an MPISendrecv oper-
ation is likely to be used along a coordinate direction to perform a shift of data. As input, MPISendrecv takes the rank of a source process for the receive, and the rank of a destination process for the send. If the function MPICartshift is called for a Cartesian process group, it provides the calling process with the above identifiers,which then can be passed to MPISendrecv. The user specifies the coor-
dinate direction and the size of the step (positive or negative). The function is local. The direction argument indicates the dimension of the shift, i.e., the coordinate whose value is modified by the shift. The coordinates arenumbered from 0 to ndims-1, where ndims is the number of dimensions.
NNoottee:: The direction argument is in the range [0, n-1] for an n-dimen-
sional Cartesian mesh. Depending on the periodicity of the Cartesian group in the specified coordinate direction, MPICartshift provides the identifiers for acircular or an end-off shift. In the case of an end-off shift, the
value MPIPROCNULL may be returned in ranksource or rankdest, indi-
cating that the source or the destination for the shift is out of range.EExxaammppllee:: The communicator, comm, has a two-dimensional, periodic,
Cartesian topology associated with it. A two-dimensional array of
REALs is stored one element per process, in variable A. One wishes toskew this array, by shifting column i (vertically, i.e., along the col-
umn) by i steps. .... C find process rank CALL MPICOMMRANK(comm, rank, ierr)) C find Cartesian coordinates CALL MPICARTCOORDS(comm, rank, maxdims, coords, ierr) C compute shift source and destination CALL MPICARTSHIFT(comm, 0, coords(2), source, dest, ierr) C skew array CALL MPISENDRECVREPLACE(A, 1, MPIREAL, dest, 0, source, 0, comm, status, ierr) NNOOTTEE In Fortran, the dimension indicated by DIRECTION = i has DIMS(i+1) nodes, where DIMS is the array that was used to create the grid. In C, the dimension indicated by direction = i is the dimension specified by dims[i]. EERRRROORRSS Almost all MPI routines return an error value; C routines as the valueof the function and Fortran routines in the last argument. C++ func-
tions do not return errors. If the default error handler is set toMPI::ERRORSTHROWEXCEPTIONS, then on error the C++ exception mechanism
will be used to throw an MPI:Exception object. Before the error value is returned, the current MPI error handler is called. By default, this error handler aborts the MPI job, except for I/O function errors. The error handler may be changed withMPICommseterrhandler; the predefined error handler MPIERRORSRETURN
may be used to cause error values to be returned. Note that MPI does not guarantee that an MPI program can continue past an error. Open MPI 1.2 September 2006 MPICartshift(3OpenMPI)