xref: /petsc/src/mat/impls/hypre/mhypre.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
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