xref: /petsc/src/mat/utils/convert.c (revision 273d9f13de75c4ed17021f7f2c11eebb99d26f0d)
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