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 |
#include <flens/lapack/interface/include/config.h>
namespace flens { namespace lapack { extern "C" { //-- dgeqrf -------------------------------------------------------------------- void LAPACK_DECL(dgeqrf)(const INTEGER *M, const INTEGER *N, DOUBLE *A, const INTEGER *LDA, DOUBLE *TAU, DOUBLE *WORK, const INTEGER *LWORK, INTEGER *INFO) { using std::max; using std::min; // // Test the input parameters so that we pass LAPACK error checks // bool lQuery = (*LWORK==-1); *INFO = 0; if (*M<0) { *INFO = -1; } else if (*N<0) { *INFO = -2; } else if (*LDA<std::max(INTEGER(1), *M)) { *INFO = -4; } else if ((*LWORK<max(INTEGER(1), *N)) && (!lQuery)) { *INFO = -7; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("DGEQRF", INFO); *INFO = -(*INFO); return; } // // Handle worksize query // if (lQuery) { // TODO: implement qrf_wsq ASSERT(0); } // // Call FLENS implementation // DGeMatrixView _A = DFSView(*M, *N, A, *LDA); DDenseVectorView _TAU = DArrayView(min(*M,*N), TAU, 1); DDenseVectorView _WORK = DArrayView(*LWORK, WORK, 1); qrf(_A, _TAU, _WORK); } //-- zgeqrf -------------------------------------------------------------------- void LAPACK_DECL(zgeqrf)(const INTEGER *M, const INTEGER *N, DOUBLE_COMPLEX *A, const INTEGER *LDA, DOUBLE_COMPLEX *TAU, DOUBLE_COMPLEX *WORK, const INTEGER *LWORK, INTEGER *INFO) { using std::max; using std::min; // // Test the input parameters so that we pass LAPACK error checks // bool lQuery = (*LWORK==-1); *INFO = 0; if (*M<0) { *INFO = -1; } else if (*N<0) { *INFO = -2; } else if (*LDA<std::max(INTEGER(1), *M)) { *INFO = -4; } else if ((*LWORK<max(INTEGER(1), *N)) && (!lQuery)) { *INFO = -7; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("ZGEQRF", INFO); *INFO = -(*INFO); return; } // // Handle worksize query // if (lQuery) { // TODO: implement qrf_wsq ASSERT(0); } // // Call FLENS implementation // auto zA = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(A); auto zTAU = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(TAU); auto zWORK = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(WORK); ZGeMatrixView _A = ZFSView(*M, *N, zA, *LDA); ZDenseVectorView _TAU = ZArrayView(min(*M,*N), zTAU, 1); ZDenseVectorView _WORK = ZArrayView(*LWORK, zWORK, 1); qrf(_A, _TAU, _WORK); } } // extern "C" } } // namespace lapack, flens |