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 *);