#include /*I "petscmat.h" I*/ PETSC_INTERN PetscErrorCode MatConvert_Shell(Mat oldmat, MatType newtype,MatReuse reuse,Mat *newmat) { Mat mat; Vec in,out; PetscErrorCode ierr; PetscInt i,M,m,*rows,start,end; MPI_Comm comm; PetscScalar *array,zero = 0.0,one = 1.0; PetscFunctionBegin; ierr = PetscObjectGetComm((PetscObject)oldmat,&comm);CHKERRQ(ierr); ierr = MatGetOwnershipRange(oldmat,&start,&end);CHKERRQ(ierr); ierr = VecCreateMPI(comm,end-start,PETSC_DECIDE,&in);CHKERRQ(ierr); ierr = VecDuplicate(in,&out);CHKERRQ(ierr); ierr = VecGetSize(in,&M);CHKERRQ(ierr); ierr = VecGetLocalSize(in,&m);CHKERRQ(ierr); ierr = PetscMalloc1(m+1,&rows);CHKERRQ(ierr); for (i=0; i