xref: /petsc/src/mat/impls/aij/seq/seqcusparse/cusparsematimpl.h (revision 978fe32243d9c5fe191a2c59e66093f308b6d890)
1 #if !defined(__CUSPARSEMATIMPL)
2 #define __CUSPARSEMATIMPL
3 
4 #include <../src/vec/vec/impls/seq/seqcusp/cuspvecimpl.h>
5 
6 #include <cusparse_v2.h>
7 
8 /* New Way */
9 #include "tx_sparse_interface.h"
10 
11 #include <algorithm>
12 #include <vector>
13 #include <string>
14 #include <thrust/sort.h>
15 #include <thrust/fill.h>
16 
17 /* Single instance of the cusparse handle for the class. */
18 cusparseHandle_t MAT_cusparseHandle=0;
19 
20 MatCUSPARSEStorageFormat cusparseMatSolveStorageFormat=MAT_CUSPARSE_CSR;
21 
22 struct Mat_SeqAIJCUSPARSETriFactors {
23   GPU_Matrix_Ifc           *loTriFactorPtr; /* pointer for lower triangular (factored matrix) on GPU */
24   GPU_Matrix_Ifc           *upTriFactorPtr; /* pointer for upper triangular (factored matrix) on GPU */
25   CUSPARRAY                *tempvec;
26   MatCUSPARSEStorageFormat format;   /* the storage format for the matrix on the device */
27   PetscBool hasTranspose; /* boolean describing whether a transpose has been built or not */
28 };
29 
30 struct Mat_SeqAIJCUSPARSE {
31   GPU_Matrix_Ifc           *mat; /* pointer to the matrix on the GPU */
32   CUSPARRAY                *tempvec; /*pointer to a workvector to which we can copy the relevant indices of a vector we want to multiply */
33   PetscInt                 nonzerorow; /* number of nonzero rows ... used in the flop calculations */
34   MatCUSPARSEStorageFormat format;   /* the storage format for the matrix on the device */
35   PetscBool hasTranspose; /* boolean describing whether a transpose has been built or not */
36 };
37 
38 extern PetscErrorCode MatCUSPARSECopyToGPU(Mat);
39 /* extern PetscErrorCode MatGetFactor_seqaij_cusparse(Mat,MatFactorType,Mat*); */
40 /* extern PetscErrorCode MatFactorGetSolverPackage_seqaij_cusparse(Mat,const MatSolverPackage *); */
41 /* extern PetscErrorCode MatCUSPARSECopyFromGPU(Mat, CUSPMATRIX *); */
42 #endif
43