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