anchor.diff:  
       !! Build a receive buffer
       ALLOCATE(recv_per_proc(total_processors))
  -    ALLOCATE(recv_buffer_offsets(total_processors))
       CALL MPI_Alltoall(send_per_proc, 1, MPI_INT, recv_per_proc, 1, MPI_INT, &
            & global_comm, grid_error)
  +    ALLOCATE(recv_buffer_offsets(total_processors))
       ALLOCATE(recv_buffer_row(SUM(recv_per_proc)))
       ALLOCATE(recv_buffer_col(SUM(recv_per_proc)))
       ALLOCATE(recv_buffer_val(SUM(recv_per_proc)))
  
positive.code:     CALL MergeLocalBlocks(this, merged_local_data)
      CALL MatrixToTripletList(merged_local_data, local_triplet_list)
  
      !! Share row and column information across processors
      ALLOCATE(per_proc_row_start(total_processors))
      ALLOCATE(per_proc_row_end(total_processors))
      ALLOCATE(per_proc_col_start(total_processors))
      ALLOCATE(per_proc_col_end(total_processors))
      CALL MPI_Allgather(row_start, 1, MPI_INT, per_proc_row_start, 1, MPI_INT,&
           & global_comm, grid_error)
      CALL MPI_Allgather(row_end, 1, MPI_INT, per_proc_row_end, 1, MPI_INT, &
           & global_comm, grid_error)
      CALL MPI_Allgather(column_start, 1, MPI_INT, per_proc_col_start, 1, &
           & MPI_INT, global_comm, grid_error)
      CALL MPI_Allgather(column_end, 1, MPI_INT, per_proc_col_end, 1, MPI_INT, &
           & global_comm, grid_error)
  
      !! Count The Number of Elements To Send To Each Process
      ALLOCATE(send_per_proc(total_processors))
      send_per_proc = 0
  
negative.code:     DEALLOCATE(send_buffer_row)
      DEALLOCATE(send_buffer_offsets)
      DEALLOCATE(send_per_proc)
    END SUBROUTINE PartionMatrix
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !> Extracts a triplet list of the data that is stored on this process.
    !! Data is returned with absolute coordinates.
  