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