Actual source code: mhyp.c
1: /*
2: Creates hypre ijvector from PETSc vector
3: */
5: #include src/mat/matimpl.h
7: #include "HYPRE.h"
8: #include "IJ_mv.h"
11: PetscErrorCode MatHYPRE_IJMatrixCreate(Mat v,HYPRE_IJMatrix *ij)
12: {
14: int rstart,rend,cstart,cend;
15:
17: MatGetOwnershipRange(v,&rstart,&rend);
18: PetscMapGetLocalRange(v->cmap,&cstart,&cend);
19: HYPRE_IJMatrixCreate(v->comm,rstart,rend-1,cstart,cend-1,ij);
20: HYPRE_IJMatrixSetObjectType(*ij,HYPRE_PARCSR);
21: return(0);
22: }
24: /*
25: Currently this only works with the MPIAIJ PETSc matrices to make
26: the conversion efficient
27: */
28: /* #include "src/mat/impls/aij/mpi/mpiaij.h" */
29: /* Mat_MPIAIJ *aij = (Mat_MPIAIJ *)v->data; */
31: PetscErrorCode MatHYPRE_IJMatrixCopy(Mat v,HYPRE_IJMatrix ij)
32: {
33: PetscErrorCode ierr;
34: int i,rstart,rend,ncols;
35: const PetscScalar *values;
36: const int *cols;
39: HYPRE_IJMatrixInitialize(ij);
40: MatGetOwnershipRange(v,&rstart,&rend);
41: for (i=rstart; i<rend; i++) {
42: MatGetRow(v,i,&ncols,&cols,&values);
43: HYPRE_IJMatrixSetValues(ij,1,&ncols,&i,cols,values);
44: MatRestoreRow(v,i,&ncols,&cols,&values);
45: }
46: HYPRE_IJMatrixAssemble(ij);
47: return(0);
48: }