1D Shift
Receive and Unpack
C --<< set processor array indices >>--
call hpf_procrtd_get_coords(hpf$heap, b$proc, b$coord)
myid1 = hpf$heap$integer(b$coord + 0)
C
C
C Loop section ---[ 0 <= q1 <= 3 ]---
C
do q1 = 0, 3
if (myid1 .ne. q1) then
C --< Loop Counters >--
counter$b$2 = 0
if (max(25 * myid1, 25 * q1 + 1, 1) .le. min(25 * myid1 + 24
*, 25 * q1 + 25, 98)) then
counter$b$2 = counter$b$2 + min(25 * myid1 + 24, 25 * q1 +
* 25, 98) - max(25 * myid1, 25 * q1 + 1, 1) + 1
endif
call hpf_buffer_alloc(counter$b$2 * 8, recv$buf$b$2)
call hpf_ptr_to_index(hpf$heap, recv$buf$b$2, 8, recv$buf$b$
*2$index)
if (counter$b$2 .gt. 0) then
call MPI_CART_SHIFT(p$cmap, 0, 1, sendproc, recvproc, ierr
*)
call MPI_RECV(hpf$heap$double(recv$buf$b$2$index), counter
*$b$2, MPI_DOUBLE_PRECISION, sendproc, 1, p$cmap, status, ierr)
endif
C --< Unpack Loop From Recv For Nonlocal Read >--
counter$b$2 = 0
C
C Loop section ---[ max((25 * myid1), ((25 * q1) + 1), 1) <= i1 <= min
C(((25 * myid1) + 24), ((25 * q1) + 25), 98) ]---
C
do i1 = max(25 * myid1, 25 * q1 + 1, 1), min(25 * myid1 + 24
*, 25 * q1 + 25, 98)
call hpf_nonlocal_insertd(hash$nonlocals, b$data, i1, hpf$
*heap$double(recv$buf$b$2$index + counter$b$2))
counter$b$2 = counter$b$2 + 1
enddo
call hpf_buffer_free(recv$buf$b$2)
endif
enddo