anchor.diff:      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
  
positive.code:   PUBLIC :: GetActualDimension
    PUBLIC :: GetLogicalDimension
    PUBLIC :: GetTripletList
    PUBLIC :: GetRowColumn
    !! Printing To The Console
    PUBLIC :: PrintDistributedSparseMatrix
    PUBLIC :: PrintMatrixInformation
  
negative.code: 
      !! Build a receive buffer
      ALLOCATE(recv_per_proc(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)))
  