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 //-- dgetrs --------------------------------------------------------------------
16 void
17 LAPACK_DECL(dgesvj)(const char *JOBA,
18 const char *JOBU,
19 const char *JOBV,
20 const INTEGER *M,
21 const INTEGER *N,
22 DOUBLE *A,
23 const INTEGER *LDA,
24 DOUBLE *SVA,
25 const INTEGER *MV,
26 DOUBLE *V,
27 const INTEGER *LDV,
28 DOUBLE *WORK,
29 const INTEGER *LWORK,
30 INTEGER *INFO)
31 {
32 DEBUG_FLENS_LAPACK("dgesvj");
33 //
34 // Test the input parameters so that we pass LAPACK error checks
35 //
36 const bool lsvec = (*JOBU=='U');
37 const bool uctol = (*JOBU=='C');
38 const bool rsvec = (*JOBV=='V');
39 const bool applv = (*JOBV=='A');
40 const bool upper = (*JOBA=='U');
41 const bool lower = (*JOBA=='L');
42
43 *INFO = 0;
44 if (!(upper || lower || *JOBA=='G')) {
45 *INFO = -1;
46 } else if (!(lsvec || uctol || *JOBU=='N')) {
47 *INFO = -2;
48 } else if (!(rsvec || applv || *JOBV=='N')) {
49 *INFO = -3;
50 } else if (*M<0) {
51 *INFO = -4;
52 } else if ((*N<0) || (*N>*M)) {
53 *INFO = -5;
54 } else if (*LDA<std::max(INTEGER(1), *M)) {
55 *INFO = -7;
56 } else if (*MV<INTEGER(0)) {
57 *INFO = -9;
58 } else if ((rsvec && *LDV<*N) || (applv && *LDV<*MV)) {
59 *INFO = -11;
60 } else if (uctol && (*WORK<=DOUBLE(1))) {
61 *INFO = -12;
62 } else if (*LWORK<std::max(*M+*N,INTEGER(6))) {
63 *INFO = -13;
64 }
65
66 if (*INFO!=0) {
67 *INFO = -(*INFO);
68 LAPACK_ERROR("DGESVJ", INFO);
69 *INFO = -(*INFO);
70 return;
71 }
72
73 //
74 // Call FLENS implementation
75 //
76 INTEGER mv = 0;
77
78 if (*JOBV=='A') {
79 mv = *MV;
80 }
81 if (*JOBV=='V') {
82 mv = *N;
83 }
84
85 SVJ::TypeA typeA = SVJ::TypeA(*JOBA);
86 SVJ::JobU jobU = SVJ::JobU(*JOBU);
87 SVJ::JobV jobV = SVJ::JobV(*JOBV);
88 DGeMatrixView _A = DFSView(*M, *N, A, *LDA);
89 DDenseVectorView _sva = DArrayView(*N, SVA, INTEGER(1));
90 DGeMatrixView _V = DFSView(mv, *N, V, *LDV);
91 DDenseVectorView _work = DArrayView(*LWORK, WORK, INTEGER(1));
92
93 *INFO = svj(typeA, jobU, jobV, _A, _sva, _V, _work);
94
95 if (*INFO<0) {
96 *INFO = -(*INFO);
97 LAPACK_ERROR("DGESVJ", INFO);
98 *INFO = -(*INFO);
99 return;
100 }
101 }
102
103 } // extern "C"
104
105 } } // 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 //-- dgetrs --------------------------------------------------------------------
16 void
17 LAPACK_DECL(dgesvj)(const char *JOBA,
18 const char *JOBU,
19 const char *JOBV,
20 const INTEGER *M,
21 const INTEGER *N,
22 DOUBLE *A,
23 const INTEGER *LDA,
24 DOUBLE *SVA,
25 const INTEGER *MV,
26 DOUBLE *V,
27 const INTEGER *LDV,
28 DOUBLE *WORK,
29 const INTEGER *LWORK,
30 INTEGER *INFO)
31 {
32 DEBUG_FLENS_LAPACK("dgesvj");
33 //
34 // Test the input parameters so that we pass LAPACK error checks
35 //
36 const bool lsvec = (*JOBU=='U');
37 const bool uctol = (*JOBU=='C');
38 const bool rsvec = (*JOBV=='V');
39 const bool applv = (*JOBV=='A');
40 const bool upper = (*JOBA=='U');
41 const bool lower = (*JOBA=='L');
42
43 *INFO = 0;
44 if (!(upper || lower || *JOBA=='G')) {
45 *INFO = -1;
46 } else if (!(lsvec || uctol || *JOBU=='N')) {
47 *INFO = -2;
48 } else if (!(rsvec || applv || *JOBV=='N')) {
49 *INFO = -3;
50 } else if (*M<0) {
51 *INFO = -4;
52 } else if ((*N<0) || (*N>*M)) {
53 *INFO = -5;
54 } else if (*LDA<std::max(INTEGER(1), *M)) {
55 *INFO = -7;
56 } else if (*MV<INTEGER(0)) {
57 *INFO = -9;
58 } else if ((rsvec && *LDV<*N) || (applv && *LDV<*MV)) {
59 *INFO = -11;
60 } else if (uctol && (*WORK<=DOUBLE(1))) {
61 *INFO = -12;
62 } else if (*LWORK<std::max(*M+*N,INTEGER(6))) {
63 *INFO = -13;
64 }
65
66 if (*INFO!=0) {
67 *INFO = -(*INFO);
68 LAPACK_ERROR("DGESVJ", INFO);
69 *INFO = -(*INFO);
70 return;
71 }
72
73 //
74 // Call FLENS implementation
75 //
76 INTEGER mv = 0;
77
78 if (*JOBV=='A') {
79 mv = *MV;
80 }
81 if (*JOBV=='V') {
82 mv = *N;
83 }
84
85 SVJ::TypeA typeA = SVJ::TypeA(*JOBA);
86 SVJ::JobU jobU = SVJ::JobU(*JOBU);
87 SVJ::JobV jobV = SVJ::JobV(*JOBV);
88 DGeMatrixView _A = DFSView(*M, *N, A, *LDA);
89 DDenseVectorView _sva = DArrayView(*N, SVA, INTEGER(1));
90 DGeMatrixView _V = DFSView(mv, *N, V, *LDV);
91 DDenseVectorView _work = DArrayView(*LWORK, WORK, INTEGER(1));
92
93 *INFO = svj(typeA, jobU, jobV, _A, _sva, _V, _work);
94
95 if (*INFO<0) {
96 *INFO = -(*INFO);
97 LAPACK_ERROR("DGESVJ", INFO);
98 *INFO = -(*INFO);
99 return;
100 }
101 }
102
103 } // extern "C"
104
105 } } // namespace lapack, flens