#include /*I "petscmat.h" I*/ PetscErrorCode MatConvert_Shell(Mat oldmat, MatType newtype,MatReuse reuse,Mat *newmat) { Mat mat; Vec in,out; PetscErrorCode ierr; PetscInt i,m,n,M,N,*rows,start; MPI_Comm comm; PetscScalar *array; PetscFunctionBegin; ierr = PetscObjectGetComm((PetscObject)oldmat,&comm);CHKERRQ(ierr); ierr = MatGetOwnershipRange(oldmat,&start,NULL);CHKERRQ(ierr); ierr = MatCreateVecs(oldmat,&in,&out);CHKERRQ(ierr); ierr = MatGetLocalSize(oldmat,&m,&n);CHKERRQ(ierr); ierr = MatGetSize(oldmat,&M,&N);CHKERRQ(ierr); ierr = PetscMalloc1(m,&rows);CHKERRQ(ierr); for (i=0; i