Actual source code: mhypre.h
1: #pragma once
3: #include <petscsys.h>
4: #include <petscmat.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;
15: /* MatGetArray_HYPRE */
16: void *array;
17: PetscInt array_size;
18: PetscBool array_available;
20: /* MatSetOption_ support */
21: PetscBool donotstash;
23: /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */
24: Mat cooMat;
25: PetscBool cooMatAttached;
27: /* helper array storing row ids on device, used in MatZeroRows */
28: PetscInt *rows_d;
29: } Mat_HYPRE;
31: PETSC_INTERN PetscErrorCode MatZeroRows_CUDA(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag);
32: PETSC_INTERN PetscErrorCode MatZeroRows_HIP(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag);
33: PETSC_INTERN PetscErrorCode MatZeroRows_Kokkos(PetscInt n, const PetscInt *rows, const HYPRE_Int *i, const HYPRE_Int *j, HYPRE_Complex *a, HYPRE_Complex diag);