anchor.diff:    !! Data is returned with absolute coordinates.
     !! @param[in] this the distributed sparse matrix.
     !! @param[inout] triplet_list the list to fill.
  -  SUBROUTINE GetRowColumn(this, triplet_list, row_start, row_end, &
  -       & column_start, column_end)
  +  SUBROUTINE PartionMatrix(this, triplet_list, row_start_list, &
  +       & column_start_list)
       !! Parameters
       TYPE(DistributedSparseMatrix_t), INTENT(IN) :: this
       TYPE(TripletList_t), INTENT(INOUT) :: triplet_list
  -    INTEGER, INTENT(IN) :: row_start, row_end
  -    INTEGER, INTENT(IN) :: column_start, column_end
  +    INTEGER, DIMENSION(:), INTENT(IN) :: row_start_list
  +    INTEGER, DIMENSION(:), INTENT(IN) :: column_start_list
       !! Local Data
       TYPE(SparseMatrix_t) :: merged_local_data
       TYPE(TripletList_t) :: local_triplet_list
  -    !! For Gathering
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_row_start
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_row_end
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_col_start
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_col_end
       !! Send Buffer
       INTEGER, DIMENSION(:), ALLOCATABLE :: send_per_proc
       INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_offsets
  
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.
  