xref: /petsc/src/mat/impls/aij/seq/aijmkl/aijmkl.h (revision fa244810169cd10ca47776202d374031b5e2a351)
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 
8dfff0f24SRichard Tran Mills /* Have to redefine MKL_Complex16 and MKL_Complex8 as PetscScalar for the complex number cases.
9dfff0f24SRichard Tran Mills  * This works fine with a C99 compiler -- still need to verify that this works with C89.
10dfff0f24SRichard Tran Mills  * Note: These definitions need to occur BEFORE including MKL headers. */
11dfff0f24SRichard Tran Mills #define MKL_Complex16 PetscScalar
12dfff0f24SRichard Tran Mills #define MKL_Complex8 PetscScalar
13dfff0f24SRichard 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 
28902e40abSKarl Rupp /* Note: MKL releases prior to the end of 2014 do not have a const-correct interface -> ugly casts necessary.
29902e40abSKarl Rupp          Does not apply to mkl_sparse_x_*()-routines, because these have been introduced later. */
30a84739b8SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
31a84739b8SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
32902e40abSKarl 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)
33a84739b8SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
34902e40abSKarl 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)
35a84739b8SRichard Tran Mills # endif
36a84739b8SRichard Tran Mills #else
37a84739b8SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
38902e40abSKarl 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)
39a84739b8SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
40902e40abSKarl 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)
41a84739b8SRichard Tran Mills # endif
42a84739b8SRichard Tran Mills #endif
43df555b71SRichard Tran Mills 
44df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
45df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
46*fa244810SBarry Smith #   define mkl_sparse_x_create_csr mkl_sparse_s_create_csr
47df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
48*fa244810SBarry Smith #   define mkl_sparse_x_create_csr mkl_sparse_d_create_csr
49df555b71SRichard Tran Mills # endif
50df555b71SRichard Tran Mills #else
51df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
52*fa244810SBarry Smith #   define mkl_sparse_x_create_csr mkl_sparse_c_create_csr
53df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
54*fa244810SBarry Smith #   define mkl_sparse_x_create_csr mkl_sparse_z_create_csr
55df555b71SRichard Tran Mills # endif
56df555b71SRichard Tran Mills #endif
57df555b71SRichard Tran Mills 
58df555b71SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
59df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
60*fa244810SBarry Smith #   define mkl_sparse_x_mv mkl_sparse_s_mv
61df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
62*fa244810SBarry Smith #   define mkl_sparse_x_mv mkl_sparse_d_mv
63df555b71SRichard Tran Mills # endif
64df555b71SRichard Tran Mills #else
65df555b71SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
66*fa244810SBarry Smith #   define mkl_sparse_x_mv mkl_sparse_c_mv
67df555b71SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
68*fa244810SBarry Smith #   define mkl_sparse_x_mv mkl_sparse_z_mv
69df555b71SRichard Tran Mills # endif
70df555b71SRichard Tran Mills #endif
7119afcda9SRichard Tran Mills 
7219afcda9SRichard Tran Mills #if !defined(PETSC_USE_COMPLEX)
7319afcda9SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
74*fa244810SBarry Smith #   define mkl_sparse_x_export_csr mkl_sparse_s_export_csr
7519afcda9SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
76*fa244810SBarry Smith #   define mkl_sparse_x_export_csr mkl_sparse_d_export_csr
7719afcda9SRichard Tran Mills # endif
7819afcda9SRichard Tran Mills #else
7919afcda9SRichard Tran Mills # if defined(PETSC_USE_REAL_SINGLE)
80*fa244810SBarry Smith #   define mkl_sparse_x_export_csr mkl_sparse_c_export_csr
8119afcda9SRichard Tran Mills # elif defined(PETSC_USE_REAL_DOUBLE)
82*fa244810SBarry Smith #   define mkl_sparse_x_export_csr mkl_sparse_z_export_csr
8319afcda9SRichard Tran Mills # endif
8419afcda9SRichard Tran Mills #endif
85