subroutine exchng2( a, sx, ex, sy, ey,
& comm2d, stridetype,
& nbrleft, nbrright, nbrtop, nbrbottom )
include 'mpif.h'
integer sx, ex, sy, ey, stridetype
double precision a(sx-1:ex+1, sy-1:ey+1)
integer nbrleft, nbrright, nbrtop, nbrbottom, comm2d
integer status(MPI_STATUS_SIZE), ierr, nx
c
nx = ex - sx + 1
c These are just like the 1-d versions, except for less data
call MPI_SENDRECV( a(sx,ey), nx, MPI_DOUBLE_PRECISION,
& nbrtop, 0,
& a(sx,sy-1), nx, MPI_DOUBLE_PRECISION,
& nbrbottom, 0, comm2d, status, ierr )
call MPI_SENDRECV( a(sx,sy), nx, MPI_DOUBLE_PRECISION,
& nbrbottom, 1,
& a(sx,ey+1), nx, MPI_DOUBLE_PRECISION,
& nbrtop, 1, comm2d, status, ierr )
c
c This uses the vector datatype stridetype
call MPI_SENDRECV( a(ex,sy), 1, stridetype, nbrright, 0,
& a(sx-1,sy), 1, stridetype, nbrleft, 0,
& comm2d, status, ierr )
call MPI_SENDRECV( a(sx,sy), 1, stridetype, nbrleft, 1,
& a(ex+1,sy), 1, stridetype, nbrright, 1,
& comm2d, status, ierr )
return
end