xref: /petsc/src/mat/impls/aij/seq/aijmkl/aijmkl.h (revision e8a2a7c33427d47ed96daa6bcd483a005df1dcb7)
1 /*
2   Wrappers for mkl_cspblas_ routines.
3   A more elegant way to do this would be to use an approach like that used in petsclbaslapack_mangle.h,
4   but since the MKL sparse BLAS routines are not going to be as widely used, and because
5   we don't have to worry about Fortran name mangling, this seems OK for now.
6 */
7 
8 #if !defined(PETSC_USE_COMPLEX)
9 # if defined(PETSC_USE_REAL_SINGLE)
10 #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_scsrgemv(transa,m,a,ia,ja,x,y)
11 # elif defined(PETSC_USE_REAL_DOUBLE)
12 #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_dcsrgemv(transa,m,a,ia,ja,x,y)
13 # endif
14 #else
15 # if defined(PETSC_USE_REAL_SINGLE)
16 #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_ccsrgemv(transa,m,a,ia,ja,x,y)
17 # elif defined(PETSC_USE_REAL_DOUBLE)
18 #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_zcsrgemv(transa,m,a,ia,ja,x,y)
19 # endif
20 #endif
21 
22 #if !defined(PETSC_USE_COMPLEX)
23 # if defined(PETSC_USE_REAL_SINGLE)
24 #   define mkl_xcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y) mkl_scsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y)
25 # elif defined(PETSC_USE_REAL_DOUBLE)
26 #   define mkl_xcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y) mkl_dcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y)
27 # endif
28 #else
29 # if defined(PETSC_USE_REAL_SINGLE)
30 #   define mkl_xcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y) mkl_ccsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y)
31 # elif defined(PETSC_USE_REAL_DOUBLE)
32 #   define mkl_xcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y) mkl_zcsrmv(transa,m,k,alpha,matdescra,val,indx,pntrb,pntre,x,beta,y)
33 # endif
34 #endif
35 
36 #if !defined(PETSC_USE_COMPLEX)
37 # if defined(PETSC_USE_REAL_SINGLE)
38 #   define mkl_sparse_x_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values) mkl_sparse_s_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values)
39 # elif defined(PETSC_USE_REAL_DOUBLE)
40 #   define mkl_sparse_x_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values) mkl_sparse_d_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values)
41 # endif
42 #else
43 # if defined(PETSC_USE_REAL_SINGLE)
44 #   define mkl_sparse_x_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values) mkl_sparse_c_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values)
45 # elif defined(PETSC_USE_REAL_DOUBLE)
46 #   define mkl_sparse_x_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values) mkl_sparse_z_create_csr(A,indexing,rows,cols,rows_start,rows_end,col_indx,values)
47 # endif
48 #endif
49 
50 #if !defined(PETSC_USE_COMPLEX)
51 # if defined(PETSC_USE_REAL_SINGLE)
52 #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_s_mv(operation,alpha,A,descr,x,beta,y)
53 # elif defined(PETSC_USE_REAL_DOUBLE)
54 #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_d_mv(operation,alpha,A,descr,x,beta,y)
55 # endif
56 #else
57 # if defined(PETSC_USE_REAL_SINGLE)
58 #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_c_mv(operation,alpha,A,descr,x,beta,y)
59 # elif defined(PETSC_USE_REAL_DOUBLE)
60 #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_z_mv(operation,alpha,A,descr,x,beta,y)
61 # endif
62 #endif
63