xref: /petsc/src/mat/impls/aij/seq/aijmkl/aijmkl.h (revision dfff0f2468538e45a4e9621dffcbf1a7c80bf219)
14a2a386eSRichard Tran Mills /*
24a2a386eSRichard Tran Mills   Wrappers for mkl_cspblas_ routines.
34a2a386eSRichard Tran Mills   A more elegant way to do this would be to use an approach like that used in petsclbaslapack_mangle.h,
44a2a386eSRichard Tran Mills   but since the MKL sparse BLAS routines are not going to be as widely used, and because
54a2a386eSRichard Tran Mills   we don't have to worry about Fortran name mangling, this seems OK for now.
64a2a386eSRichard Tran Mills */
74a2a386eSRichard Tran Mills 
8*dfff0f24SRichard Tran Mills /* Have to redefine MKL_Complex16 and MKL_Complex8 as PetscScalar for the complex number cases.
9*dfff0f24SRichard Tran Mills  * This works fine with a C99 compiler -- still need to verify that this works with C89.
10*dfff0f24SRichard Tran Mills  * Note: These definitions need to occur BEFORE including MKL headers. */
11*dfff0f24SRichard Tran Mills #define MKL_Complex16 PetscScalar
12*dfff0f24SRichard Tran Mills #define MKL_Complex8 PetscScalar
13*dfff0f24SRichard Tran Mills 
144a2a386eSRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
154a2a386eSRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
164a2a386eSRichard Tran Mills #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_scsrgemv(transa,m,a,ia,ja,x,y)
174a2a386eSRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
184a2a386eSRichard Tran Mills #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_dcsrgemv(transa,m,a,ia,ja,x,y)
194a2a386eSRichard Tran Mills # endif
204a2a386eSRichard Tran Mills #else
214a2a386eSRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
224a2a386eSRichard Tran Mills #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_ccsrgemv(transa,m,a,ia,ja,x,y)
234a2a386eSRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
244a2a386eSRichard Tran Mills #   define mkl_cspblas_xcsrgemv(transa,m,a,ia,ja,x,y) mkl_cspblas_zcsrgemv(transa,m,a,ia,ja,x,y)
254a2a386eSRichard Tran Mills # endif
264a2a386eSRichard Tran Mills #endif
27a84739b8SRichard Tran Mills 
28a84739b8SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
29a84739b8SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
30a84739b8SRichard Tran Mills #   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)
31a84739b8SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
32a84739b8SRichard Tran Mills #   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)
33a84739b8SRichard Tran Mills # endif
34a84739b8SRichard Tran Mills #else
35a84739b8SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
36a84739b8SRichard Tran Mills #   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)
37a84739b8SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
38a84739b8SRichard Tran Mills #   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)
39a84739b8SRichard Tran Mills # endif
40a84739b8SRichard Tran Mills #endif
41df555b71SRichard Tran Mills 
42df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
43df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
44df555b71SRichard Tran Mills #   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)
45df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
46df555b71SRichard Tran Mills #   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)
47df555b71SRichard Tran Mills # endif
48df555b71SRichard Tran Mills #else
49df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
50df555b71SRichard Tran Mills #   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)
51df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
52df555b71SRichard Tran Mills #   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)
53df555b71SRichard Tran Mills # endif
54df555b71SRichard Tran Mills #endif
55df555b71SRichard Tran Mills 
56df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
57df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
58df555b71SRichard Tran Mills #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_s_mv(operation,alpha,A,descr,x,beta,y)
59df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
60df555b71SRichard Tran Mills #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_d_mv(operation,alpha,A,descr,x,beta,y)
61df555b71SRichard Tran Mills # endif
62df555b71SRichard Tran Mills #else
63df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
64df555b71SRichard Tran Mills #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_c_mv(operation,alpha,A,descr,x,beta,y)
65df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
66df555b71SRichard Tran Mills #   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_z_mv(operation,alpha,A,descr,x,beta,y)
67df555b71SRichard Tran Mills # endif
68df555b71SRichard Tran Mills #endif
69