xref: /petsc/src/mat/impls/hypre/mhypre.h (revision 978814f1ffe028842bf651401e1d413e711a3534)
163c07aadSStefano Zampini 
263c07aadSStefano Zampini #if !defined(_MHYPRE_H)
363c07aadSStefano Zampini #define _MHYPRE_H
463c07aadSStefano Zampini 
563c07aadSStefano Zampini #include <HYPRE.h>
663c07aadSStefano Zampini #include <_hypre_IJ_mv.h>
763c07aadSStefano Zampini #include <HYPRE_IJ_mv.h>
863c07aadSStefano Zampini 
963c07aadSStefano Zampini typedef struct {
1063c07aadSStefano Zampini   HYPRE_IJMatrix ij;
1163c07aadSStefano Zampini   HYPRE_IJVector x;
1263c07aadSStefano Zampini   HYPRE_IJVector b;
1363c07aadSStefano Zampini   MPI_Comm       comm;
14*978814f1SStefano Zampini   PetscBool      inner_free;
1563c07aadSStefano Zampini } Mat_HYPRE;
1663c07aadSStefano Zampini 
1763c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode VecHYPRE_IJVectorCreate(Vec,HYPRE_IJVector*);
1863c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode VecHYPRE_IJVectorCopy(Vec,HYPRE_IJVector);
1963c07aadSStefano Zampini 
2063c07aadSStefano Zampini /*
2163c07aadSStefano Zampini     Replaces the address where the HYPRE vector points to its data with the address of
2263c07aadSStefano Zampini     PETSc's data. Saves the old address so it can be reset when we are finished with it.
2363c07aadSStefano Zampini     Allows users to get the data into a HYPRE vector without the cost of memcopies
2463c07aadSStefano Zampini */
2563c07aadSStefano Zampini #define HYPREReplacePointer(b,newvalue,savedvalue) { \
2663c07aadSStefano Zampini     hypre_ParVector *par_vector   = (hypre_ParVector*)hypre_IJVectorObject(((hypre_IJVector*)b)); \
2763c07aadSStefano Zampini     hypre_Vector    *local_vector = hypre_ParVectorLocalVector(par_vector); \
2863c07aadSStefano Zampini     savedvalue         = local_vector->data; \
2963c07aadSStefano Zampini     local_vector->data = newvalue;          \
3063c07aadSStefano Zampini }
3163c07aadSStefano Zampini 
3263c07aadSStefano Zampini 
3363c07aadSStefano Zampini #endif
34