<h3>Specific improvements</h3>
<ol>
+<li> Fixed: PETScWrappers:MPI:SparseMatrix and apply_boundary_values() produced an error in debug mode about non-existant SparsityPattern entries. Reason: clear_rows() also eliminated the whole row in the PETSc-internal SparsityPattern, which resulted in an error in the next assembly process.
+<br>
+(Timo Heister, 2011/02/23)
+</li>
+
<li> Fixed: It wasn't possible to use the FE_Nothing element inside an FESystem
object and hand the result over to an FEValues object. This is now fixed.
<br>
// Tell PETSc that we are not
// planning on adding new entries
// to the matrix. Generate errors
- // in debugmode.
-#if DEAL_II_PETSC_VERSION_LT(3,0,0)
+ // in debug mode.
int ierr;
+#if DEAL_II_PETSC_VERSION_LT(3,0,0)
#ifdef DEBUG
ierr = MatSetOption (matrix, MAT_NEW_NONZERO_LOCATION_ERR);
AssertThrow (ierr == 0, ExcPETScError(ierr));
AssertThrow (ierr == 0, ExcPETScError(ierr));
#endif
#else
- int ierr;
#ifdef DEBUG
ierr = MatSetOption (matrix, MAT_NEW_NONZERO_LOCATION_ERR, PETSC_TRUE);
AssertThrow (ierr == 0, ExcPETScError(ierr));
AssertThrow (ierr == 0, ExcPETScError(ierr));
#endif
#endif
+
+ // Tell PETSc to keep the
+ // SparsityPattern entries even if
+ // we delete a row with
+ // clear_rows() which calls
+ // MatZeroRows(). Otherwise one can
+ // not write into that row
+ // afterwards.
+#if DEAL_II_PETSC_VERSION_LT(3,1,0)
+ ierr = MatSetOption (matrix, MAT_KEEP_ZEROED_ROWS, PETSC_TRUE);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+#else
+ ierr = MatSetOption (matrix, MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+#endif
+
}
}