16524c165SJacob Faibussowitsch #ifndef _MHYPRE_H 263c07aadSStefano Zampini #define _MHYPRE_H 363c07aadSStefano Zampini 458968eb6SStefano Zampini #include <petscsys.h> 5*a32e9c99SJunchao Zhang #include <petscmat.h> 66ea7df73SStefano Zampini #include <../src/vec/vec/impls/hypre/vhyp.h> 763c07aadSStefano Zampini #include <HYPRE_IJ_mv.h> 863c07aadSStefano Zampini 963c07aadSStefano Zampini typedef struct { 1063c07aadSStefano Zampini HYPRE_IJMatrix ij; 116ea7df73SStefano Zampini VecHYPRE_IJVector x; 126ea7df73SStefano Zampini VecHYPRE_IJVector b; 1363c07aadSStefano Zampini MPI_Comm comm; 14978814f1SStefano Zampini PetscBool inner_free; 155fbaff96SJunchao Zhang 16651b1cf9SStefano Zampini /* MatGetArray_HYPRE */ 17651b1cf9SStefano Zampini void *array; 18651b1cf9SStefano Zampini PetscInt array_size; 19651b1cf9SStefano Zampini PetscBool array_available; 20651b1cf9SStefano Zampini 21651b1cf9SStefano Zampini /* MatSetOption_ support */ 22651b1cf9SStefano Zampini PetscBool donotstash; 23651b1cf9SStefano Zampini 2406977982Sstefanozampini /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */ 2506977982Sstefanozampini Mat cooMat; 2606977982Sstefanozampini PetscBool cooMatAttached; 27*a32e9c99SJunchao Zhang 28*a32e9c99SJunchao Zhang /* helper array storing row ids on device, used in MatZeroRows */ 29*a32e9c99SJunchao Zhang PetscInt *rows_d; 3063c07aadSStefano Zampini } Mat_HYPRE; 3163c07aadSStefano Zampini 32*a32e9c99SJunchao Zhang PETSC_INTERN PetscErrorCode MatZeroRows_CUDA(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag); 33*a32e9c99SJunchao Zhang PETSC_INTERN PetscErrorCode MatZeroRows_HIP(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag); 34*a32e9c99SJunchao Zhang PETSC_INTERN PetscErrorCode MatZeroRows_Kokkos(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag); 35*a32e9c99SJunchao Zhang 3663c07aadSStefano Zampini #endif 37