16524c165SJacob Faibussowitsch #ifndef _MHYPRE_H 263c07aadSStefano Zampini #define _MHYPRE_H 363c07aadSStefano Zampini 458968eb6SStefano Zampini #include <petscsys.h> 56ea7df73SStefano Zampini #include <../src/vec/vec/impls/hypre/vhyp.h> 663c07aadSStefano Zampini #include <HYPRE_IJ_mv.h> 763c07aadSStefano Zampini 863c07aadSStefano Zampini typedef struct { 963c07aadSStefano Zampini HYPRE_IJMatrix ij; 106ea7df73SStefano Zampini VecHYPRE_IJVector x; 116ea7df73SStefano Zampini VecHYPRE_IJVector b; 1263c07aadSStefano Zampini MPI_Comm comm; 13978814f1SStefano Zampini PetscBool inner_free; 145fbaff96SJunchao Zhang 15*651b1cf9SStefano Zampini /* MatGetArray_HYPRE */ 16*651b1cf9SStefano Zampini void *array; 17*651b1cf9SStefano Zampini PetscInt array_size; 18*651b1cf9SStefano Zampini PetscBool array_available; 19*651b1cf9SStefano Zampini 20*651b1cf9SStefano Zampini /* MatSetOption_ support */ 21*651b1cf9SStefano Zampini PetscBool donotstash; 22*651b1cf9SStefano Zampini 23*651b1cf9SStefano Zampini /* COO */ 245fbaff96SJunchao Zhang Mat cooMat; /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */ 255fbaff96SJunchao Zhang HYPRE_Int *diagJ, *offdJ; /* Allocated by hypre, but we take the ownership away, so we need to free them on our own */ 265fbaff96SJunchao Zhang PetscInt *diag; /* Diagonal pointers (i.e., SeqAIJ->diag[]) on device, allocated by hypre_TAlloc(). */ 275fbaff96SJunchao Zhang HYPRE_MemoryLocation memType; 2863c07aadSStefano Zampini } Mat_HYPRE; 2963c07aadSStefano Zampini 3063c07aadSStefano Zampini #endif 31