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, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
32: PETSC_INTERN PetscErrorCode MatZeroRows_HIP(PetscInt, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
33: PETSC_INTERN PetscErrorCode MatZeroRows_Kokkos(PetscInt, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
35: // Cast entries in PetscInt a[] to HYPRE_Int b[] on device
36: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_CUDA(PetscInt, const PetscInt *, HYPRE_Int *);
37: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_HIP(PetscInt, const PetscInt *, HYPRE_Int *);
38: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_Kokkos(PetscInt, const PetscInt *, HYPRE_Int *);
40: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_CUDA(size_t, void **);
41: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_HIP(size_t, void **);
42: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_Kokkos(size_t, void **);
44: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_CUDA(void *);
45: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_HIP(void *);
46: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_Kokkos(void *);