message: A few tweaks in HypreParMatrix::Threshold.
diff: @@ -1271,9 +1271,15 @@ void HypreParMatrix::Threshold(double threshold)
  0, 0, 0);
  hypre_ParCSRMatrixOwnsRowStarts(parcsr_A_ptr) = old_owns_row;
  hypre_ParCSRMatrixOwnsColStarts(parcsr_A_ptr) = old_owns_col;
  + hypre_ParCSRMatrixOwnsRowStarts(A) = 0;
  + hypre_ParCSRMatrixOwnsColStarts(A) = 0;
  csr_A = hypre_MergeDiagAndOffd(A);
  + // Free A, if owned
  + Destroy();
  + Init();
  +
  csr_A_wo_z = hypre_CSRMatrixDeleteZeros(csr_A,threshold);
  /* hypre_CSRMatrixDeleteZeros will return a NULL pointer rather than a usable
  @@ -1297,12 +1303,14 @@ void HypreParMatrix::Threshold(double threshold)
  MFEM_VERIFY(ierr == 0, "");
  - Destroy();
  - Init();
  -
  A = parcsr_A_ptr;
  hypre_ParCSRMatrixSetNumNonzeros(A);
  + /* Make sure that the first entry in each row is the diagonal one. */
  + if (row_starts == col_starts)
  + {
  + hypre_CSRMatrixReorder(hypre_ParCSRMatrixDiag(A));
  + }
  hypre_MatvecCommPkgCreate(A);
  height = GetNumRows();
  width = GetNumCols();
  