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