1: #ifndef _MHYPRE_H
2: #define _MHYPRE_H
4: #include <petscsys.h>
5: #include <../src/vec/vec/impls/hypre/vhyp.h>
6: #include <HYPRE_IJ_mv.h>
8: typedef struct {
9: HYPRE_IJMatrix ij;
10: VecHYPRE_IJVector x;
11: VecHYPRE_IJVector b;
12: MPI_Comm comm;
13: PetscBool inner_free;
14: void *array;
15: PetscInt size;
16: PetscBool available;
17: PetscBool sorted_full;
19: Mat cooMat; /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */
20: HYPRE_Int *diagJ, *offdJ; /* Allocated by hypre, but we take the ownership away, so we need to free them on our own */
21: PetscInt *diag; /* Diagonal pointers (i.e., SeqAIJ->diag[]) on device, allocated by hypre_TAlloc(). */
22: HYPRE_MemoryLocation memType;
23: } Mat_HYPRE;
25: #endif