12#ifndef MFEM_HYPRE_PARCSR_HPP
13#define MFEM_HYPRE_PARCSR_HPP
22#include <_hypre_parcsr_mv.h>
26#if MFEM_HYPRE_VERSION < 21600
28#define HYPRE_MPI_BIG_INT HYPRE_MPI_INT
35#if MFEM_HYPRE_VERSION < 21400
37#define mfem_hypre_TAlloc(type, size) hypre_TAlloc(type, size)
38#define mfem_hypre_CTAlloc(type, size) hypre_CTAlloc(type, size)
39#define mfem_hypre_TFree(ptr) hypre_TFree(ptr)
41#define mfem_hypre_TAlloc_host(type, size) hypre_TAlloc(type, size)
42#define mfem_hypre_CTAlloc_host(type, size) hypre_CTAlloc(type, size)
43#define mfem_hypre_TFree_host(ptr) hypre_TFree(ptr)
47#define mfem_hypre_TAlloc(type, size) \
48 hypre_TAlloc(type, size, mfem::GetHypreMemoryLocation())
49#define mfem_hypre_CTAlloc(type, size) \
50 hypre_CTAlloc(type, size, mfem::GetHypreMemoryLocation())
51#define mfem_hypre_TFree(ptr) hypre_TFree(ptr, mfem::GetHypreMemoryLocation())
53#define mfem_hypre_TAlloc_host(type, size) \
54 hypre_TAlloc(type, size, HYPRE_MEMORY_HOST)
55#define mfem_hypre_CTAlloc_host(type, size) \
56 hypre_CTAlloc(type, size, HYPRE_MEMORY_HOST)
57#define mfem_hypre_TFree_host(ptr) hypre_TFree(ptr, HYPRE_MEMORY_HOST)
109void hypre_ParCSRMatrixEliminateAXB(hypre_ParCSRMatrix *A,
110 HYPRE_Int num_rowscols_to_elim,
111 HYPRE_Int *rowscols_to_elim,
118void hypre_ParCSRMatrixEliminateAAe(hypre_ParCSRMatrix *A,
119 hypre_ParCSRMatrix **Ae,
120 HYPRE_Int num_rowscols_to_elim,
121 HYPRE_Int *rowscols_to_elim,
122 int ignore_rows = 0);
126void hypre_ParCSRMatrixEliminateRows(hypre_ParCSRMatrix *A,
127 HYPRE_Int num_rows_to_elim,
128 const HYPRE_Int *rows_to_elim);
136void hypre_ParCSRMatrixSplit(hypre_ParCSRMatrix *A,
137 HYPRE_Int nr, HYPRE_Int nc,
138 hypre_ParCSRMatrix **blocks,
139 int interleaved_rows,
int interleaved_cols);
141typedef int HYPRE_Bool;
142#define HYPRE_MPI_BOOL MPI_INT
145void hypre_CSRMatrixAbsMatvec(hypre_CSRMatrix *A,
152void hypre_CSRMatrixAbsMatvecT(hypre_CSRMatrix *A,
159void hypre_ParCSRMatrixAbsMatvec(hypre_ParCSRMatrix *A,
166void hypre_ParCSRMatrixAbsMatvecT(hypre_ParCSRMatrix *A,
174void hypre_CSRMatrixBooleanMatvec(hypre_CSRMatrix *A,
182void hypre_CSRMatrixBooleanMatvecT(hypre_CSRMatrix *A,
188hypre_ParCSRCommHandle *
189hypre_ParCSRCommHandleCreate_bool(HYPRE_Int job,
190 hypre_ParCSRCommPkg *comm_pkg,
191 HYPRE_Bool *send_data,
192 HYPRE_Bool *recv_data);
196void hypre_ParCSRMatrixBooleanMatvec(hypre_ParCSRMatrix *A,
204void hypre_ParCSRMatrixBooleanMatvecT(hypre_ParCSRMatrix *A,
213hypre_CSRMatrixSum(hypre_CSRMatrix *A,
217#if MFEM_HYPRE_VERSION >= 22200
220inline hypre_CSRMatrix *hypre_CSRMatrixAdd(hypre_CSRMatrix *A,
223 return ::hypre_CSRMatrixAdd(1.0, A, 1.0, B);
232hypre_ParCSRMatrixAdd(hypre_ParCSRMatrix *A,
233 hypre_ParCSRMatrix *B);
240hypre_ParCSRMatrixSum(hypre_ParCSRMatrix *A,
242 hypre_ParCSRMatrix *B);
246hypre_CSRMatrixSetConstantValues(hypre_CSRMatrix *A,
247 HYPRE_Complex value);
251hypre_ParCSRMatrixSetConstantValues(hypre_ParCSRMatrix *A,
252 HYPRE_Complex value);
Class used by MFEM to store pointers to host and/or device memory.