Provided by: openmpi-doc_2.1.1-8_all bug

NAME

       MPI_Graph_neighbors  - Returns the neighbors of a node associated with a graph topology.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
            int neighbors[])

Fortran Syntax

       INCLUDE 'mpif.h'
       MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR)
            INTEGER   COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR

C++ Syntax

       #include <mpi.h>
       void Graphcomm::Get_neighbors(int rank, int maxneighbors,
            int neighbors[]) const

INPUT PARAMETERS

       comm      Communicator with graph topology (handle).

       rank      Rank of process in group of comm (integer).

       maxneighbors
                 Size of array neighbors (integer).

OUTPUT PARAMETERS

       neighbors Ranks of processes that are neighbors to specified process (array of integers).

       IERROR    Fortran only: Error status (integer).

DESCRIPTION

       Example:  Suppose that comm is a communicator with a shuffle-exchange topology. The group has 2n members.
       Each process is labeled  by  a(1), ...,  a(n)  with  a(i)  E{0,1},  and  has  three  neighbors:  exchange
       (a(1), ...,  a(n)  =  a(1), ...,  a(n-1),  a(n) (a = 1 - a), shuffle (a(1), ..., a(n)) = a(2), ..., a(n),
       a(1), and unshuffle (a(1), ..., a(n)) = a(n), a(1), ..., a(n-1). The graph adjacency list is  illustrated
       below for n=3.

                      exchange       shuffle        unshuffle
           node       neighbors(1)   neighbors(2)   neighbors(3)
           0(000)         1              0              0
           1(001)         0              2              4
           2(010)         3              4              1
           3(011)         2              6              5
           4(100)         5              1              2
           5(101)         4              3              6
           6(110)         7              5              3
           7(111)         6              7              7

       Suppose  that  the  communicator  comm  has this topology associated with it. The following code fragment
       cycles through the three types of neighbors and performs an appropriate permutation for each.

       C  assume: each process has stored a real number A.
       C  extract neighborhood information
             CALL MPI_COMM_RANK(comm, myrank, ierr)
             CALL MPI_GRAPH_NEIGHBORS(comm, myrank, 3, neighbors, ierr)
       C  perform exchange permutation
             CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(1), 0,
            +     neighbors(1), 0, comm, status, ierr)
       C  perform shuffle permutation
             CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(2), 0,
            +     neighbors(3), 0, comm, status, ierr)
       C  perform unshuffle permutation
             CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(3), 0,
            +     neighbors(2), 0, comm, status, ierr)

ERRORS

       Almost all MPI routines return an error value; C routines as  the  value  of  the  function  and  Fortran
       routines in the last argument. C++ functions do not return errors. If the default error handler is set to
       MPI::ERRORS_THROW_EXCEPTIONS, 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  with
       MPI_Comm_set_errhandler; the predefined error handler MPI_ERRORS_RETURN 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.

SEE ALSO

       MPI_Graph_neighbors_count