subroutine exchng1( a, nx, s, e, win,
* bottom_nbr, top_nbr )
include 'mpif.h'
integer nx, s, e
double precision a(0:nx+1,s-1:e+1)
integer win, bottom_nbr, top_nbr
integer ierr
c Special case for IRIX
integer*8 bottom_ghost_disp, top_ghost_disp
c --
print *, 'Before fence'
c --
call MPI_WIN_FENCE( 0, win, ierr )
c Put bottom edge into bottom neighbor's top ghost cells
c See text about top_ghost_disp
top_ghost_disp = 1 + (nx+2)*(e-s+2)
c --
print *, 'Before put'
c --
if (bottom_nbr .ne. MPI_PROC_NULL) then
call MPI_PUT( a(1,s), nx, MPI_DOUBLE_PRECISION,
* bottom_nbr, top_ghost_disp, nx,
* MPI_DOUBLE_PRECISION, win, ierr )
endif
c Put top edge into top neighbor's bottom ghost cells
bottom_ghost_disp = 1
c --
print *, 'Before put2'
c --
if (top_nbr .ne. MPI_PROC_NULL) then
call MPI_PUT( a(1,e), nx, MPI_DOUBLE_PRECISION,
* top_nbr, bottom_ghost_disp, nx,
* MPI_DOUBLE_PRECISION, win, ierr )
endif
c --
print *, 'Before fence2'
c --
call MPI_WIN_FENCE( 0, win, ierr )
c --
print *, 'Before fence3'
c --
return
end