xref: /petsc/src/mat/utils/convert.c (revision b0a32e0c6855ee6a6cd3495fa7da12ea9885bc5d)
1*b0a32e0cSBarry Smith /*$Id: convert.c,v 1.70 2000/10/24 20:26:14 bsmith Exp bsmith $*/
256fe5c5cSLois Curfman McInnes 
394a9d846SBarry Smith #include "src/mat/matimpl.h"
48b6375c0SLois Curfman McInnes 
55615d1e5SSatish Balay #undef __FUNC__
6*b0a32e0cSBarry Smith #define __FUNC__ "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.
10273d9f13SBarry Smith 
11273d9f13SBarry 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);
21273d9f13SBarry Smith 
22273d9f13SBarry Smith   ierr = MatCreate(mat->comm,lm,ln,m,n,M);CHKERRQ(ierr);
23273d9f13SBarry Smith   ierr = MatSetType(*M,newtype);CHKERRQ(ierr);
24273d9f13SBarry 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