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