call MPI_WIN_FENCE(0, winbuf, ierr)
nx = ex - sx + 1
call MPI_PUT(a(sx,sy), nx, MPI_DOUBLE_PRECISION, &
bottom_nbr, 0, nx, MPI_DOUBLE_PRECISION, winbuf, ierr)
call MPI_PUT(a(sx,ey), nx, MPI_DOUBLE_PRECISION, &
top_nbr, nx, nx, MPI_DOUBLE_PRECISION, winbuf, ierr)
ny = ey - sy + 1
do i=sy,ey
buf1(i-sy+1) = a(sx,i)
enddo
call MPI_PUT(buf1, ny, MPI_DOUBLE_PRECISION, &
left_nbr, 2*nx, ny, MPI_DOUBLE_PRECISION, &
winbuf, ierr)
do i=sy,ey
buf2(i-sy+1) = a(ex,i)
enddo
call MPI_PUT(buf2, ny, MPI_DOUBLE_PRECISION, &
right_nbr, 2*nx+ny, ny, MPI_DOUBLE_PRECISION, &
winbuf, ierr)
call MPI_WIN_FENCE(0, winbuf, ierr)