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
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