1*a4963045SJacob Faibussowitsch #pragma once 263c07aadSStefano Zampini 358968eb6SStefano Zampini #include <petscsys.h> 4a32e9c99SJunchao Zhang #include <petscmat.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 15651b1cf9SStefano Zampini /* MatGetArray_HYPRE */ 16651b1cf9SStefano Zampini void *array; 17651b1cf9SStefano Zampini PetscInt array_size; 18651b1cf9SStefano Zampini PetscBool array_available; 19651b1cf9SStefano Zampini 20651b1cf9SStefano Zampini /* MatSetOption_ support */ 21651b1cf9SStefano Zampini PetscBool donotstash; 22651b1cf9SStefano Zampini 2306977982Sstefanozampini /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */ 2406977982Sstefanozampini Mat cooMat; 2506977982Sstefanozampini PetscBool cooMatAttached; 26a32e9c99SJunchao Zhang 27a32e9c99SJunchao Zhang /* helper array storing row ids on device, used in MatZeroRows */ 28a32e9c99SJunchao Zhang PetscInt *rows_d; 2963c07aadSStefano Zampini } Mat_HYPRE; 3063c07aadSStefano Zampini 31a32e9c99SJunchao 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); 32a32e9c99SJunchao 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); 33a32e9c99SJunchao 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); 34