1 //#define CXXBLAS_DEBUG_OUT(x)      std::cerr << x << std::endl;
 2 
 3 #define STR(x)      #x
 4 #define STRING(x)   STR(x)
 5 
 6 #define FLENS_DEFAULT_INDEXTYPE int
 7 
 8 #include <flens/lapack/interface/include/config.h>
 9 
10 
11 namespace flens { namespace lapack {
12 
13 extern "C" {
14 
15 //-- dgels ---------------------------------------------------------------------
16 void
17 LAPACK_DECL(dgels)(const char           *TRANS,
18                    const INTEGER        *M,
19                    const INTEGER        *N,
20                    const INTEGER        *NRHS,
21                    DOUBLE               *A,
22                    const INTEGER        *LDA,
23                    DOUBLE               *B,
24                    const INTEGER        *LDB,
25                    DOUBLE               *WORK,
26                    const INTEGER        *LWORK,
27                    INTEGER              *INFO)
28 {
29     DEBUG_FLENS_LAPACK("dgels");
30 //
31 //  Test the input parameters so that we pass LAPACK error checks
32 //
33     const bool lQuery = (*LWORK==0);
34     const INTEGER mn = std::min(*M, *N);
35 
36     *INFO = 0;
37     if (*TRANS!='N' && *TRANS!='T' && *TRANS!='C') {
38         *INFO = -1;
39     } else if (*M<0) {
40         *INFO = -2;
41     } else if (*N<0) {
42         *INFO = -3;
43     } else if (*NRHS<0) {
44         *INFO = -4;
45     } else if (*LDA<std::max(INTEGER(1), *M)) {
46         *INFO = -6;
47     } else if (*LDB<flens::max(INTEGER(1), *M, *N)) {
48         *INFO = -8;
49     } else if (*LWORK<std::max(INTEGER(1), mn+std::max(mn, *NRHS)) && !lQuery) {
50         *INFO = -10;
51     }
52     if (*INFO!=0) {
53         *INFO = -(*INFO);
54         LAPACK_ERROR("DGELS", INFO);
55         *INFO = -(*INFO);
56         return;
57     }
58 //
59 //  Call FLENS implementation
60 //
61     Transpose           trans  = getFlensLapackEnum<Transpose>(*TRANS);
62     DGeMatrixView       _A     = DFSView(*M, *N, A, *LDA);
63 
64     const INTEGER numRowsB = std::max(*M,*N);
65     DGeMatrixView       _B     = DFSView(numRowsB, *NRHS, B, *LDB);
66     DDenseVectorView    _WORK  = DArrayView(*LWORK, WORK, 1);
67 
68     ls(trans, _A, _B, _WORK);
69 
70 }
71 
72 // extern "C"
73 
74 } } // namespace lapack, flens