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