# MPI_Graph_neighbors(3) man page (version 1.2.9)

 |   Home   |   Support   |   FAQ   |

## NAME

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

## 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  illus-
trated 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
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++  func-
tions  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.