diff --git a/src/numerics/petsc_matrix.C b/src/numerics/petsc_matrix.C index cf9b208..7565a10 100644 --- a/src/numerics/petsc_matrix.C +++ b/src/numerics/petsc_matrix.C @@ -30,6 +30,7 @@ #include "libmesh/dense_matrix.h" #include "libmesh/petsc_vector.h" +#include "petsc-private/matimpl.h" // For some reason, the blocked matrix API calls below seem to break with PETSC 3.2 & presumably earier. @@ -416,6 +417,14 @@ void PetscMatrix::update_preallocation_and_zero () PetscErrorCode ierr = 0; { + ierr = (*_mat->ops->destroy)(_mat); + LIBMESH_CHKERRABORT(ierr); + _mat->ops->destroy = NULL; + _mat->preallocated = PETSC_FALSE; + _mat->assembled = PETSC_FALSE; + ierr = MatSetType(_mat,MATAIJ); + LIBMESH_CHKERRABORT(ierr); + ierr = MatSeqAIJSetPreallocation (_mat, 0, numeric_petsc_cast(n_nz.empty() ? NULL : &n_nz[0]));