c
c This is a non-blocking exchange.
	subroutine nbexchng1( a, nx, s, e, comm1d,
     *                        nbrbottom, nbrtop, flag  )
	integer nx, s, e, flag
	double precision a(0:nx+1,s-1:e+1)
	integer comm1d
	integer nbrbottom, nbrtop
	include 'mpif.h'
	integer statuses(MPI_STATUS_SIZE,4), ierr
        integer handles(4)
	save handles
c
	if (flag .eq. 0) then
c
c Begin the communications (start both receives and then both sends)
c
	    call MPI_irecv( a(1,s-1), nx,
     *                     MPI_DOUBLE_PRECISION,
     *                     nbrbottom, 0, comm1d, handles(1), ierr )
            call MPI_irecv( a(1,e+1), nx,
     *                     MPI_DOUBLE_PRECISION,
     *                     nbrtop, 1, comm1d, handles(2), ierr )
            call MPI_isend( a(1,e), nx, MPI_DOUBLE_PRECISION,
     *                     nbrtop, 0, comm1d, handles(3), ierr )
            call MPI_isend( a(1,s), nx, MPI_DOUBLE_PRECISION,
     *                     nbrbottom, 1, comm1d, handles(4), ierr )
        else
c
c Complete all of the sends and receives
c
	    call MPI_Waitall( 4, handles, statuses, ierr )
	endif
	return
	end