12 #ifndef MFEM_HYPRE_PARCSR_HPP
13 #define MFEM_HYPRE_PARCSR_HPP
15 #include "../config/config.hpp"
22 #include "../general/mem_manager.hpp"
23 #include "_hypre_parcsr_mv.h"
27 #if MFEM_HYPRE_VERSION < 21600
29 #define HYPRE_MPI_BIG_INT HYPRE_MPI_INT
36 #if MFEM_HYPRE_VERSION < 21400
38 #define mfem_hypre_TAlloc(type, size) hypre_TAlloc(type, size)
39 #define mfem_hypre_CTAlloc(type, size) hypre_CTAlloc(type, size)
40 #define mfem_hypre_TFree(ptr) hypre_TFree(ptr)
42 #define mfem_hypre_TAlloc_host(type, size) hypre_TAlloc(type, size)
43 #define mfem_hypre_CTAlloc_host(type, size) hypre_CTAlloc(type, size)
44 #define mfem_hypre_TFree_host(ptr) hypre_TFree(ptr)
46 #else // MFEM_HYPRE_VERSION >= 21400
48 #define mfem_hypre_TAlloc(type, size) \
49 hypre_TAlloc(type, size, HYPRE_MEMORY_DEVICE)
50 #define mfem_hypre_CTAlloc(type, size) \
51 hypre_CTAlloc(type, size, HYPRE_MEMORY_DEVICE)
52 #define mfem_hypre_TFree(ptr) hypre_TFree(ptr, HYPRE_MEMORY_DEVICE)
54 #define mfem_hypre_TAlloc_host(type, size) \
55 hypre_TAlloc(type, size, HYPRE_MEMORY_HOST)
56 #define mfem_hypre_CTAlloc_host(type, size) \
57 hypre_CTAlloc(type, size, HYPRE_MEMORY_HOST)
58 #define mfem_hypre_TFree_host(ptr) hypre_TFree(ptr, HYPRE_MEMORY_HOST)
90 #endif // #if MFEM_HYPRE_VERSION < 21400
110 void hypre_ParCSRMatrixEliminateAXB(hypre_ParCSRMatrix *A,
111 HYPRE_Int num_rowscols_to_elim,
112 HYPRE_Int *rowscols_to_elim,
119 void hypre_ParCSRMatrixEliminateAAe(hypre_ParCSRMatrix *A,
120 hypre_ParCSRMatrix **Ae,
121 HYPRE_Int num_rowscols_to_elim,
122 HYPRE_Int *rowscols_to_elim,
123 int ignore_rows = 0);
127 void hypre_ParCSRMatrixEliminateRows(hypre_ParCSRMatrix *A,
128 HYPRE_Int num_rows_to_elim,
129 const HYPRE_Int *rows_to_elim);
137 void hypre_ParCSRMatrixSplit(hypre_ParCSRMatrix *A,
138 HYPRE_Int nr, HYPRE_Int nc,
139 hypre_ParCSRMatrix **blocks,
140 int interleaved_rows,
int interleaved_cols);
142 typedef int HYPRE_Bool;
143 #define HYPRE_MPI_BOOL MPI_INT
146 void hypre_CSRMatrixAbsMatvec(hypre_CSRMatrix *A,
153 void hypre_CSRMatrixAbsMatvecT(hypre_CSRMatrix *A,
160 void hypre_ParCSRMatrixAbsMatvec(hypre_ParCSRMatrix *A,
167 void hypre_ParCSRMatrixAbsMatvecT(hypre_ParCSRMatrix *A,
175 void hypre_CSRMatrixBooleanMatvec(hypre_CSRMatrix *A,
183 void hypre_CSRMatrixBooleanMatvecT(hypre_CSRMatrix *A,
189 hypre_ParCSRCommHandle *
190 hypre_ParCSRCommHandleCreate_bool(HYPRE_Int job,
191 hypre_ParCSRCommPkg *comm_pkg,
192 HYPRE_Bool *send_data,
193 HYPRE_Bool *recv_data);
197 void hypre_ParCSRMatrixBooleanMatvec(hypre_ParCSRMatrix *A,
205 void hypre_ParCSRMatrixBooleanMatvecT(hypre_ParCSRMatrix *A,
214 hypre_CSRMatrixSum(hypre_CSRMatrix *A,
218 #if MFEM_HYPRE_VERSION >= 22200
221 inline hypre_CSRMatrix *hypre_CSRMatrixAdd(hypre_CSRMatrix *A,
224 return ::hypre_CSRMatrixAdd(1.0, A, 1.0, B);
233 hypre_ParCSRMatrixAdd(hypre_ParCSRMatrix *A,
234 hypre_ParCSRMatrix *B);
241 hypre_ParCSRMatrixSum(hypre_ParCSRMatrix *A,
243 hypre_ParCSRMatrix *B);
247 hypre_CSRMatrixSetConstantValues(hypre_CSRMatrix *A,
248 HYPRE_Complex value);
252 hypre_ParCSRMatrixSetConstantValues(hypre_ParCSRMatrix *A,
253 HYPRE_Complex value);
259 #endif // MFEM_USE_MPI