call MPI_WIN_FENCE( 0, winbuf, ierr )
! Put bottom edge into bottom neighbor's ghost cells
nx = ex - sx + 1
call MPI_PUT( a(sx,sy), nx, MPI_DOUBLE_PRECISION, &
bottom_nbr, 0, nx, MPI_DOUBLE_PRECISION, winbuf, ierr )
! Put top edge into top neighbor's ghost cells
call MPI_PUT( a(sx,ey), nx, MPI_DOUBLE_PRECISION, &
top_nbr, nx, nx, MPI_DOUBLE_PRECISION, winbuf, ierr )
! Put left edge into left neighbor's ghost cells
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 )
! Put right edge into right neighbor's ghost cells
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 )
... use data in aghost ...