1: #pragma once 3: #include <petsc/private/petschypre.h> 4: #include <petscistypes.h> 5: #include <petscvec.h> 6: #include <HYPRE_IJ_mv.h> 7: #include <_hypre_IJ_mv.h> 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; 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);