1 #pragma once 2 3 #include <petsc/private/petschypre.h> 4 #include <petscistypes.h> // PetscLayout 5 #include <petscvec.h> // Vec 6 #include <HYPRE_IJ_mv.h> 7 #include <_hypre_IJ_mv.h> 8 9 struct VecHYPRE_IJVector_ { 10 HYPRE_IJVector ij; 11 /* Support for push/pop of PETSc's Vec memory into a ParVector */ 12 Vec pvec; 13 HYPRE_Complex *hv; 14 PetscErrorCode (*restore)(Vec, PetscScalar **); 15 }; 16 typedef struct VecHYPRE_IJVector_ *VecHYPRE_IJVector; 17 18 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorCreate(PetscLayout, VecHYPRE_IJVector *); 19 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorDestroy(VecHYPRE_IJVector *); 20 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorCopy(Vec, VecHYPRE_IJVector); 21 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorPushVecRead(VecHYPRE_IJVector, Vec); 22 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorPushVecWrite(VecHYPRE_IJVector, Vec); 23 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorPushVec(VecHYPRE_IJVector, Vec); 24 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJVectorPopVec(VecHYPRE_IJVector); 25 PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode VecHYPRE_IJBindToCPU(VecHYPRE_IJVector, PetscBool); 26