1 /* Siconos is a program dedicated to modeling, simulation and control
2  * of non smooth dynamical systems.
3  *
4  * Copyright 2021 INRIA.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17 */
18 
19 #ifndef SiconosLAPACKE_H
20 #define SiconosLAPACKE_H
21 
22 // IWYU pragma: private, include "SiconosLapack.h"
23 //#include "SiconosBlas.h"
24 #include <stdlib.h>
25 #include <assert.h>
26 #include <stdio.h>
27 
28 // -------- Headers and routines naming conventions for the different Lapack implementations --------
29 
30 // --- Intel MKL Header ---
31 #if defined(HAS_MKL_LAPACKE)
32 #include <mkl_lapacke.h>
33 #else
34 // Standard lapacke header
35 #include <lapacke.h>
36 #endif
37 
38 // Name of the routines
39 #define LAPACK_NAME(N) LAPACKE_##N
40 
41 #define LA_TRANS 'T'
42 #define LA_NOTRANS 'N'
43 #define LA_UP 'U'
44 #define LA_LO 'L'
45 #define LA_NONUNIT 'N'
46 #define LA_UNIT 'U'
47 
48 #define INTEGER(X) X
49 #define INTEGERP(X) X
50 #define CHAR(X) X
51 
52 #ifndef lapack_int
53 #define lapack_int int
54 #endif
55 
56 // --- DGESVD ---
57 #if defined(HAS_LAPACK_dgesvd)
58 #define WRAP_DGESVD(F,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,INFO)      \
59   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12)
60 #else
61 #define WRAP_DGESVD(F,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,INFO)      \
62   fprintf(stderr, "Your lapack version misses dgesvd function.\n");
63 #endif
64 
65 // --- DGETRS ---
66 #define WRAP_DGETRS(F,A1,A2,A3,A4,A5,A6,A7,A8,INFO)   \
67   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7,A8)
68 
69 // --- DPOTRS ---
70 #define WRAP_DPOTRS(F,A1,A2,A3,A4,A5,A6,A7,INFO) \
71   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7)
72 
73 // --- DSYTRS ---
74 #define WRAP_DSYTRS(F,A1,A2,A3,A4,A5,A6,A7,A8,INFO) \
75   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7,A8)
76 
77 
78 // --- DGESV ---
79 #define WRAP_DGESV(F,A1,A2,A3,A4,A5,A6,A7,INFO)   \
80   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7)
81 
82 // --- DPOSV ---
83 #define WRAP_DPOSV(F,A1,A2,A3,A4,A5,A6,A7,INFO) \
84   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7)
85 
86 // --- DGELS ---
87 #if defined(HAS_LAPACK_dgels)
88 #define WRAP_DGELS(F,A1,A2,A3,A4,A5,A6,A7,A8,INFO)    \
89   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7,A8)
90 #else
91 #define WRAP_DGELS(F,A1,A2,A3,A4,A5,A6,A7,A8,INFO)                      \
92   fprintf(stderr, "Your lapack version misses dgels function.\n");
93 #endif
94 
95 // --- DGETRI ---
96 #define WRAP_DGETRI(F,A1,A2,A3,A4,INFO)         \
97   INFO = F(CblasColMajor,A1,A2,A3,A4)
98 
99 
100 // --- DGETRF ---
101 #define WRAP_DGETRF(F,A1,A2,A3,A4,A5,INFO)  \
102   INFO = F(CblasColMajor,A1,A2,A3,A4,A5)
103 
104 // --- DPOTRF ---
105 #define WRAP_DPOTRF(F,A1,A2,A3,A4,INFO)  \
106   INFO = F(CblasColMajor,A1,A2,A3,A4)
107 
108 // --- DSYTRF ---
109 #define WRAP_DSYTRF(F,A1,A2,A3,A4,A5,INFO)      \
110   INFO = F(CblasColMajor,A1,A2,A3,A4,A5)
111 
112 // --- DTRTRS ---
113 #if defined(HAS_LAPACK_dtrtrs)
114 #define WRAP_DTRTRS(F,A1,A2,A3,A4,A5,A6,A7,A8,A9,INFO)  \
115   INFO = F(CblasColMajor,A1,A2,A3,A4,A5,A6,A7,A8,A9)
116 #else
117 #define WRAP_DTRTRS(F,A1,A2,A3,A4,A5,A6,A7,A8,A9,INFO)                \
118   fprintf(stderr, "Your lapack version misses dtrtrs function.\n");
119 #endif
120 
121 #endif // SICONOSLAPACKE_H
122