anchor.diff:        integer         :: i                          ! Counter for elements
   
         integer         :: istart, iend
  +
  +      logical :: debug = .false.
   !      integer         :: jstart, jend
   
         select case(flag_mpi)
  
positive.code:                   r_np_i = r
                 end if
  
                 ! Broadcast i-th data
                 call mpi_bcast(r_i, 3*N, MPI_REAL_XP, i, MPI_COMM_WORLD, err)
                 ! Broadcast n-i-th data
                 call mpi_bcast(r_np_i, 3*N, MPI_REAL_XP, nprocs-i-1, MPI_COMM_WORLD, err)
  
                 ! If i == rank, compute both diagonals
                 if (rank == i) then
  
negative.code:             do i = 0, nprocs / 2 - 1
                 ! Get data from nprocs-i in i
                 ! Note: use nprocs-i, because nprocs start at 0
  
                 if (debug) print*, 'R:', rank, 'i:', i
                 if (rank == nprocs-i-1) then
                    if (debug) print*, 'R:', rank, '(1/2) sends to:', i
                    call mpi_send(r, 3*N, MPI_REAL_XP, i, 0, MPI_COMM_WORLD, err)
                 else if (rank == i) then
                    if (debug) print*, 'R:', rank, '(1/2) get from:', nprocs-i-1
                    call mpi_recv(r_right, 3*N, MPI_REAL_XP, nprocs-i-1, 0, MPI_COMM_WORLD, stat, err)
                 end if
  
                 if (debug) call mpi_barrier(MPI_COMM_WORLD, err)
  
                 if (rank == i) then
                    r_i = r
  