xref: /petsc/src/mat/impls/aij/seq/seqcusparse/cusparsematimpl.h (revision 6e111a19f6677190c8cb13236301fcb65e0e3d3b)
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 };
28 
29 struct Mat_SeqAIJCUSPARSE {
30   GPU_Matrix_Ifc*   mat; /* pointer to the matrix on the GPU */
31   CUSPARRAY*        tempvec; /*pointer to a workvector to which we can copy the relevant indices of a vector we want to multiply */
32   PetscInt          nonzerorow; /* number of nonzero rows ... used in the flop calculations */
33   MatCUSPARSEStorageFormat format;   /* the storage format for the matrix on the device */
34 };
35 
36 extern PetscErrorCode MatCUSPARSECopyToGPU(Mat);
37 /* extern PetscErrorCode MatGetFactor_seqaij_cusparse(Mat,MatFactorType,Mat*); */
38 /* extern PetscErrorCode MatFactorGetSolverPackage_seqaij_cusparse(Mat,const MatSolverPackage *); */
39 /* extern PetscErrorCode MatCUSPARSECopyFromGPU(Mat, CUSPMATRIX *); */
40 #endif
41