anchor.diff:                 else
                     if (debug) print*, 'R:', rank, 'sending reduce'
                  end if
  +
                  ! Receive interaction in i
  -               call mpi_reduce(a_comm, a, 3*N, MPI_REAL_XP, MPI_SUM, i, MPI_COMM_WORLD, err)
  +               call mpi_reduce(a_comm_i,    a, 3*N, MPI_REAL_XP, MPI_SUM,          i, MPI_COMM_WORLD, err)
  +
  +               ! Receive interaction in np-i-1
  +               call mpi_reduce(a_comm_np_i, a, 3*N, MPI_REAL_XP, MPI_SUM, nprocs-i-1, MPI_COMM_WORLD, err)
  +
                  if (debug) call mpi_barrier(MPI_COMM_WORLD, err)
   
                  if (rank == 0) then
  
positive.code:                if (rank == i) then
                    if (debug) print*, 'R:', i, '(2/2) sends to:', nprocs-i-1
                    call mpi_send(a_right, 3*N, MPI_REAL_XP, nprocs-i-1, 0, MPI_COMM_WORLD, err)
                 else if (rank == nprocs-i-1) then
                    if (debug) print*, 'R:', rank, '(2/2) gets from:', i
                    call mpi_recv(a_comm, 3*N, MPI_REAL_XP, i, 0, MPI_COMM_WORLD, stat, err)
                    a = a + a_comm
                 end if
                 if (debug) call mpi_barrier(MPI_COMM_WORLD, err)
              end do
  
negative.code:             !--------------------------------
              ! Allocate and initialize
              !--------------------------------
              allocate(a_comm_i(3, N))
              allocate(a_comm_np_i(3, N))
              allocate(a_right(3, N))
              allocate(r_i(3, N))
              allocate(r_np_i(3, N))
  