1*273d9f13SBarry Smith /*$Id: convert.c,v 1.69 2000/09/28 21:12:12 bsmith Exp bsmith $*/ 256fe5c5cSLois Curfman McInnes 394a9d846SBarry Smith #include "src/mat/matimpl.h" 48b6375c0SLois Curfman McInnes 55615d1e5SSatish Balay #undef __FUNC__ 6b2863d3aSBarry Smith #define __FUNC__ /*<a name=""></a>*/"MatConvert_Basic" 78b6375c0SLois Curfman McInnes /* 88b6375c0SLois Curfman McInnes MatConvert_Basic - Converts from any input format to another format. For 98b6375c0SLois Curfman McInnes parallel formats, the new matrix distribution is determined by PETSc. 10*273d9f13SBarry Smith 11*273d9f13SBarry Smith Does not do preallocation so in general will be slow 128b6375c0SLois Curfman McInnes */ 138b6375c0SLois Curfman McInnes int MatConvert_Basic(Mat mat,MatType newtype,Mat *M) 148b6375c0SLois Curfman McInnes { 158b6375c0SLois Curfman McInnes Scalar *vwork; 16f1af5d2fSBarry Smith int ierr,i,nz,m,n,*cwork,rstart,rend,lm,ln; 1725cdf11fSBarry Smith 183a40ed3dSBarry Smith PetscFunctionBegin; 198b6375c0SLois Curfman McInnes ierr = MatGetSize(mat,&m,&n);CHKERRQ(ierr); 20f1af5d2fSBarry Smith ierr = MatGetLocalSize(mat,&lm,&ln);CHKERRQ(ierr); 21*273d9f13SBarry Smith 22*273d9f13SBarry Smith ierr = MatCreate(mat->comm,lm,ln,m,n,M);CHKERRQ(ierr); 23*273d9f13SBarry Smith ierr = MatSetType(*M,newtype);CHKERRQ(ierr); 24*273d9f13SBarry Smith 25f1af5d2fSBarry Smith ierr = MatGetOwnershipRange(mat,&rstart,&rend);CHKERRQ(ierr); 268b6375c0SLois Curfman McInnes for (i=rstart; i<rend; i++) { 278b6375c0SLois Curfman McInnes ierr = MatGetRow(mat,i,&nz,&cwork,&vwork);CHKERRQ(ierr); 288b6375c0SLois Curfman McInnes ierr = MatSetValues(*M,1,&i,nz,cwork,vwork,INSERT_VALUES);CHKERRQ(ierr); 298b6375c0SLois Curfman McInnes ierr = MatRestoreRow(mat,i,&nz,&cwork,&vwork);CHKERRQ(ierr); 308b6375c0SLois Curfman McInnes } 316d4a8577SBarry Smith ierr = MatAssemblyBegin(*M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 326d4a8577SBarry Smith ierr = MatAssemblyEnd(*M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 333a40ed3dSBarry Smith PetscFunctionReturn(0); 348b6375c0SLois Curfman McInnes } 35