1*a4963045SJacob Faibussowitsch #pragma once 24a2a386eSRichard Tran Mills /* 34a2a386eSRichard Tran Mills Wrappers for mkl_cspblas_ routines. 44a2a386eSRichard Tran Mills A more elegant way to do this would be to use an approach like that used in petsclbaslapack_mangle.h, 54a2a386eSRichard Tran Mills but since the MKL sparse BLAS routines are not going to be as widely used, and because 64a2a386eSRichard Tran Mills we don't have to worry about Fortran name mangling, this seems OK for now. 74a2a386eSRichard Tran Mills */ 84a2a386eSRichard Tran Mills 9dfff0f24SRichard Tran Mills /* Have to redefine MKL_Complex16 and MKL_Complex8 as PetscScalar for the complex number cases. 10dfff0f24SRichard Tran Mills * This works fine with a C99 compiler -- still need to verify that this works with C89. 11dfff0f24SRichard Tran Mills * Note: These definitions need to occur BEFORE including MKL headers. */ 12dfff0f24SRichard Tran Mills #define MKL_Complex16 PetscScalar 13dfff0f24SRichard Tran Mills #define MKL_Complex8 PetscScalar 14dfff0f24SRichard Tran Mills 154a2a386eSRichard Tran Mills #if !defined(PETSC_USE_COMPLEX) 164a2a386eSRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 174a2a386eSRichard Tran Mills #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_scsrgemv(transa, m, a, ia, ja, x, y) 184a2a386eSRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 194a2a386eSRichard Tran Mills #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_dcsrgemv(transa, m, a, ia, ja, x, y) 204a2a386eSRichard Tran Mills #endif 214a2a386eSRichard Tran Mills #else 224a2a386eSRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 234a2a386eSRichard Tran Mills #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_ccsrgemv(transa, m, a, ia, ja, x, y) 244a2a386eSRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 254a2a386eSRichard Tran Mills #define mkl_cspblas_xcsrgemv(transa, m, a, ia, ja, x, y) mkl_cspblas_zcsrgemv(transa, m, a, ia, ja, x, y) 264a2a386eSRichard Tran Mills #endif 274a2a386eSRichard Tran Mills #endif 28a84739b8SRichard Tran Mills 29902e40abSKarl Rupp /* Note: MKL releases prior to the end of 2014 do not have a const-correct interface -> ugly casts necessary. 30902e40abSKarl Rupp Does not apply to mkl_sparse_x_*()-routines, because these have been introduced later. */ 31a84739b8SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX) 32a84739b8SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 33902e40abSKarl Rupp #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_scsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y) 34a84739b8SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 35902e40abSKarl Rupp #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_dcsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y) 36a84739b8SRichard Tran Mills #endif 37a84739b8SRichard Tran Mills #else 38a84739b8SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 39902e40abSKarl Rupp #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_ccsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y) 40a84739b8SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 41902e40abSKarl Rupp #define mkl_xcsrmv(transa, m, k, alpha, matdescra, val, indx, pntrb, pntre, x, beta, y) mkl_zcsrmv(transa, m, k, alpha, matdescra, (MatScalar *)val, (PetscInt *)indx, (PetscInt *)pntrb, (PetscInt *)pntre, (PetscScalar *)x, beta, y) 42a84739b8SRichard Tran Mills #endif 43a84739b8SRichard Tran Mills #endif 44df555b71SRichard Tran Mills 45df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX) 46df555b71SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 47fa244810SBarry Smith #define mkl_sparse_x_create_csr mkl_sparse_s_create_csr 48df555b71SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 49fa244810SBarry Smith #define mkl_sparse_x_create_csr mkl_sparse_d_create_csr 50df555b71SRichard Tran Mills #endif 51df555b71SRichard Tran Mills #else 52df555b71SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 53fa244810SBarry Smith #define mkl_sparse_x_create_csr mkl_sparse_c_create_csr 54df555b71SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 55fa244810SBarry Smith #define mkl_sparse_x_create_csr mkl_sparse_z_create_csr 56df555b71SRichard Tran Mills #endif 57df555b71SRichard Tran Mills #endif 58df555b71SRichard Tran Mills 59df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX) 60df555b71SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 61fa244810SBarry Smith #define mkl_sparse_x_mv mkl_sparse_s_mv 62df555b71SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 63fa244810SBarry Smith #define mkl_sparse_x_mv mkl_sparse_d_mv 64df555b71SRichard Tran Mills #endif 65df555b71SRichard Tran Mills #else 66df555b71SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 67fa244810SBarry Smith #define mkl_sparse_x_mv mkl_sparse_c_mv 68df555b71SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 69fa244810SBarry Smith #define mkl_sparse_x_mv mkl_sparse_z_mv 70df555b71SRichard Tran Mills #endif 71df555b71SRichard Tran Mills #endif 7219afcda9SRichard Tran Mills 7319afcda9SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX) 7419afcda9SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 75fa244810SBarry Smith #define mkl_sparse_x_export_csr mkl_sparse_s_export_csr 7619afcda9SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 77fa244810SBarry Smith #define mkl_sparse_x_export_csr mkl_sparse_d_export_csr 7819afcda9SRichard Tran Mills #endif 7919afcda9SRichard Tran Mills #else 8019afcda9SRichard Tran Mills #if defined(PETSC_USE_REAL_SINGLE) 81fa244810SBarry Smith #define mkl_sparse_x_export_csr mkl_sparse_c_export_csr 8219afcda9SRichard Tran Mills #elif defined(PETSC_USE_REAL_DOUBLE) 83fa244810SBarry Smith #define mkl_sparse_x_export_csr mkl_sparse_z_export_csr 8419afcda9SRichard Tran Mills #endif 8519afcda9SRichard Tran Mills #endif 86