Actual source code: mhypre.h
1: #pragma once
3: #include <petscmat.h>
4: #include <../src/vec/vec/impls/hypre/vhyp.h>
5: #include <HYPRE_IJ_mv.h>
7: typedef struct {
8: HYPRE_IJMatrix ij;
9: VecHYPRE_IJVector x;
10: VecHYPRE_IJVector b;
11: MPI_Comm comm;
12: PetscBool inner_free;
14: /* MatGetArray_HYPRE */
15: void *array;
16: PetscInt array_size;
17: PetscBool array_available;
19: /* MatSetOption_ support */
20: PetscBool donotstash;
22: /* An agent matrix which does the MatSetValuesCOO() job for IJMatrix */
23: Mat cooMat;
24: PetscBool cooMatAttached;
26: /* helper array storing row ids on device, used in MatZeroRows */
27: PetscInt *rows_d;
28: } Mat_HYPRE;
30: PETSC_INTERN PetscErrorCode MatZeroRows_CUDA(PetscInt, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
31: PETSC_INTERN PetscErrorCode MatZeroRows_HIP(PetscInt, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
32: PETSC_INTERN PetscErrorCode MatZeroRows_Kokkos(PetscInt, const PetscInt *, const HYPRE_Int *, const HYPRE_Int *, HYPRE_Complex *, HYPRE_Complex);
34: // Cast entries in PetscInt a[] to HYPRE_Int b[] on device
35: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_CUDA(PetscInt, const PetscInt *, HYPRE_Int *);
36: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_HIP(PetscInt, const PetscInt *, HYPRE_Int *);
37: PETSC_INTERN PetscErrorCode PetscHypreIntCastArray_Kokkos(PetscInt, const PetscInt *, HYPRE_Int *);
39: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_CUDA(size_t, void **);
40: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_HIP(size_t, void **);
41: PETSC_INTERN PetscErrorCode MatHypreDeviceMalloc_Kokkos(size_t, void **);
43: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_CUDA(void *);
44: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_HIP(void *);
45: PETSC_INTERN PetscErrorCode MatHypreDeviceFree_Kokkos(void *);