1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
#define STR(x) #x
#define STRING(x) STR(x) #include <flens/lapack/interface/include/config.h> namespace flens { namespace lapack { extern "C" { //-- dgels --------------------------------------------------------------------- void LAPACK_DECL(dgels)(const char *TRANS, const INTEGER *M, const INTEGER *N, const INTEGER *NRHS, DOUBLE *A, const INTEGER *LDA, DOUBLE *B, const INTEGER *LDB, DOUBLE *WORK, const INTEGER *LWORK, INTEGER *INFO) { std::cerr << "dgels" << std::endl; // // Test the input parameters so that we pass LAPACK error checks // const bool lQuery = (*LWORK==0); const INTEGER mn = std::min(*M, *N); *INFO = 0; if (*TRANS!='N' && *TRANS!='T' && *TRANS!='C') { *INFO = -1; } else if (*M<0) { *INFO = -2; } else if (*N<0) { *INFO = -3; } else if (*NRHS<0) { *INFO = -4; } else if (*LDA<std::max(INTEGER(1), *M)) { *INFO = -6; } else if (*LDB<flens::max(INTEGER(1), *M, *N)) { *INFO = -8; } else if (*LWORK<std::max(INTEGER(1), mn+std::max(mn, *NRHS)) && !lQuery) { *INFO = -10; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("DGELS", INFO); *INFO = -(*INFO); return; } // // Call FLENS implementation // Transpose trans = convertTo<Transpose>(*TRANS); DGeMatrixView _A = DFSView(*M, *N, A, *LDA); const INTEGER numRowsB = std::max(*M,*N); DGeMatrixView _B = DFSView(numRowsB, *NRHS, B, *LDB); DDenseVectorView _WORK = DArrayView(*LWORK, WORK, 1); ls(trans, _A, _B, _WORK); } //-- zgels --------------------------------------------------------------------- void LAPACK_DECL(zgels)(const char *TRANS, const INTEGER *M, const INTEGER *N, const INTEGER *NRHS, DOUBLE_COMPLEX *A, const INTEGER *LDA, DOUBLE_COMPLEX *B, const INTEGER *LDB, DOUBLE_COMPLEX *WORK, const INTEGER *LWORK, INTEGER *INFO) { // // Test the input parameters so that we pass LAPACK error checks // const bool lQuery = (*LWORK==0); const INTEGER mn = std::min(*M, *N); *INFO = 0; if (*TRANS!='N' && *TRANS!='T' && *TRANS!='C') { *INFO = -1; } else if (*M<0) { *INFO = -2; } else if (*N<0) { *INFO = -3; } else if (*NRHS<0) { *INFO = -4; } else if (*LDA<std::max(INTEGER(1), *M)) { *INFO = -6; } else if (*LDB<flens::max(INTEGER(1), *M, *N)) { *INFO = -8; } else if (*LWORK<std::max(INTEGER(1), mn+std::max(mn, *NRHS)) && !lQuery) { *INFO = -10; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("ZGELS", INFO); *INFO = -(*INFO); return; } // // Call FLENS implementation // auto zA = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(A); auto zB = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(B); auto zWORK = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(WORK); Transpose trans = convertTo<Transpose>(*TRANS); ZGeMatrixView _A = ZFSView(*M, *N, zA, *LDA); const INTEGER numRowsB = std::max(*M,*N); ZGeMatrixView _B = ZFSView(numRowsB, *NRHS, zB, *LDB); ZDenseVectorView _WORK = ZArrayView(*LWORK, zWORK, 1); ls(trans, _A, _B, _WORK); } } // extern "C" } } // namespace lapack, flens |