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