1 /*$Id: convert.c,v 1.70 2000/10/24 20:26:14 bsmith Exp bsmith $*/ 2 3 #include "src/mat/matimpl.h" 4 5 #undef __FUNC__ 6 #define __FUNC__ "MatConvert_Basic" 7 /* 8 MatConvert_Basic - Converts from any input format to another format. For 9 parallel formats, the new matrix distribution is determined by PETSc. 10 11 Does not do preallocation so in general will be slow 12 */ 13 int MatConvert_Basic(Mat mat,MatType newtype,Mat *M) 14 { 15 Scalar *vwork; 16 int ierr,i,nz,m,n,*cwork,rstart,rend,lm,ln; 17 18 PetscFunctionBegin; 19 ierr = MatGetSize(mat,&m,&n);CHKERRQ(ierr); 20 ierr = MatGetLocalSize(mat,&lm,&ln);CHKERRQ(ierr); 21 22 ierr = MatCreate(mat->comm,lm,ln,m,n,M);CHKERRQ(ierr); 23 ierr = MatSetType(*M,newtype);CHKERRQ(ierr); 24 25 ierr = MatGetOwnershipRange(mat,&rstart,&rend);CHKERRQ(ierr); 26 for (i=rstart; i<rend; i++) { 27 ierr = MatGetRow(mat,i,&nz,&cwork,&vwork);CHKERRQ(ierr); 28 ierr = MatSetValues(*M,1,&i,nz,cwork,vwork,INSERT_VALUES);CHKERRQ(ierr); 29 ierr = MatRestoreRow(mat,i,&nz,&cwork,&vwork);CHKERRQ(ierr); 30 } 31 ierr = MatAssemblyBegin(*M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 32 ierr = MatAssemblyEnd(*M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 33 PetscFunctionReturn(0); 34 } 35