#define MKL_Complex16 PetscScalar
#define MKL_Complex8 PetscScalar

#if !defined(PETSC_USE_COMPLEX)
# if defined(PETSC_USE_REAL_SINGLE)
#   define mkl_sparse_x_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values) mkl_sparse_s_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values)
# elif defined(PETSC_USE_REAL_DOUBLE)
#   define mkl_sparse_x_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values) mkl_sparse_d_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values)
# endif
#else
# if defined(PETSC_USE_REAL_SINGLE)
#   define mkl_sparse_x_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values) mkl_sparse_c_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values)
# elif defined(PETSC_USE_REAL_DOUBLE)
#   define mkl_sparse_x_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values) mkl_sparse_z_create_bsr(A,indexing,block_layout,rows,cols,block_size,rows_start,rows_end,col_indx,values)
# endif
#endif

#if !defined(PETSC_USE_COMPLEX)
# if defined(PETSC_USE_REAL_SINGLE)
#   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_s_mv(operation,alpha,A,descr,x,beta,y)
# elif defined(PETSC_USE_REAL_DOUBLE)
#   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_d_mv(operation,alpha,A,descr,x,beta,y)
# endif
#else
# if defined(PETSC_USE_REAL_SINGLE)
#   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_c_mv(operation,alpha,A,descr,x,beta,y)
# elif defined(PETSC_USE_REAL_DOUBLE)
#   define mkl_sparse_x_mv(operation,alpha,A,descr,x,beta,y) mkl_sparse_z_mv(operation,alpha,A,descr,x,beta,y)
# endif
#endif
