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 |
#define STR(x) #x
#define STRING(x) STR(x) #include <flens/lapack/interface/include/config.h> namespace flens { namespace lapack { extern "C" { //-- dlatrs -------------------------------------------------------------------- void LAPACK_DECL(dlatrs)(const char *UPLO, const char *TRANS, const char *DIAG, const char *NORMIN, const INTEGER *N, const DOUBLE *A, const INTEGER *LDA, DOUBLE *X, DOUBLE *SCALE, DOUBLE *CNORM, INTEGER *INFO) { // // Test the input parameters so that we pass LAPACK error checks // *INFO = 0; if (*UPLO!='U' && *UPLO!='L') { *INFO = -1; } else if (*TRANS!='N' && *TRANS!='C' && *TRANS!='T') { *INFO = -2; } else if (*DIAG!='N' && *DIAG!='U') { *INFO = -3; } else if (*NORMIN!='Y' && *NORMIN!='N') { *INFO = -4; } else if (*N<0) { *INFO = -5; } else if (*LDA<std::max(INTEGER(1), *N)) { *INFO = -7; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("DLATRS", INFO); *INFO = -(*INFO); return; } // // Call FLENS implementation // const bool normIn = (*NORMIN=='Y') ? true : false; Transpose trans = cxxblas::getCxxBlasEnum<Transpose>(*TRANS); Diag diag = cxxblas::getCxxBlasEnum<Diag>(*DIAG); StorageUpLo upLo = cxxblas::getCxxBlasEnum<StorageUpLo>(*UPLO); DConstTrMatrixView _A(DConstFSView(*N, *N, A, *LDA), upLo, diag); DDenseVectorView _X = DArrayView(*N, X, 1); DDenseVectorView _CNORM = DArrayView(*N, CNORM, 1); latrs(trans, normIn, _A, _X, *SCALE, _CNORM); } //-- zlatrs -------------------------------------------------------------------- void LAPACK_DECL(zlatrs)(const char *UPLO, const char *TRANS, const char *DIAG, const char *NORMIN, const INTEGER *N, const DOUBLE_COMPLEX *A, const INTEGER *LDA, DOUBLE_COMPLEX *X, DOUBLE *SCALE, DOUBLE *CNORM, INTEGER *INFO) { // // Test the input parameters so that we pass LAPACK error checks // *INFO = 0; if (*UPLO!='U' && *UPLO!='L') { *INFO = -1; } else if (*TRANS!='N' && *TRANS!='C' && *TRANS!='T') { *INFO = -2; } else if (*DIAG!='N' && *DIAG!='U') { *INFO = -3; } else if (*NORMIN!='Y' && *NORMIN!='N') { *INFO = -4; } else if (*N<0) { *INFO = -5; } else if (*LDA<std::max(INTEGER(1), *N)) { *INFO = -7; } if (*INFO!=0) { *INFO = -(*INFO); LAPACK_ERROR("ZLATRS", INFO); *INFO = -(*INFO); return; } // // Call FLENS implementation // const auto zA = reinterpret_cast<const CXX_DOUBLE_COMPLEX *>(A); auto zX = reinterpret_cast<CXX_DOUBLE_COMPLEX *>(X); const bool normIn = (*NORMIN=='Y') ? true : false; Transpose trans = cxxblas::getCxxBlasEnum<Transpose>(*TRANS); Diag diag = cxxblas::getCxxBlasEnum<Diag>(*DIAG); StorageUpLo upLo = cxxblas::getCxxBlasEnum<StorageUpLo>(*UPLO); ZConstTrMatrixView _A(ZConstFSView(*N, *N, zA, *LDA), upLo, diag); ZDenseVectorView _X = ZArrayView(*N, zX, 1); DDenseVectorView _CNORM = DArrayView(*N, CNORM, 1); latrs(trans, normIn, _A, _X, *SCALE, _CNORM); } } // extern "C" } } // namespace lapack, flens |