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