40{
43
44 LAPACK_dgesvd( &jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt,
45 work, &lwork, &info );
46 if( info < 0 ) {
47 info = info - 1;
48 }
61 double* a_t = NULL;
62 double* u_t = NULL;
63 double* vt_t = NULL;
64
65 if( lda < n ) {
66 info = -7;
68 return info;
69 }
70 if( ldu < ncols_u ) {
71 info = -10;
73 return info;
74 }
75 if( ldvt < ncols_vt ) {
76 info = -12;
78 return info;
79 }
80
81 if( lwork == -1 ) {
82 LAPACK_dgesvd( &jobu, &jobvt, &m, &n, a, &lda_t, s, u, &ldu_t, vt,
83 &ldvt_t, work, &lwork, &info );
84 return (info < 0) ? (info - 1) : info;
85 }
86
88 if( a_t == NULL ) {
90 goto exit_level_0;
91 }
93 u_t = (double*)
95 if( u_t == NULL ) {
97 goto exit_level_1;
98 }
99 }
101 vt_t = (double*)
103 if( vt_t == NULL ) {
105 goto exit_level_2;
106 }
107 }
108
110
111 LAPACK_dgesvd( &jobu, &jobvt, &m, &n, a_t, &lda_t, s, u_t, &ldu_t, vt_t,
112 &ldvt_t, work, &lwork, &info );
113 if( info < 0 ) {
114 info = info - 1;
115 }
116
120 u, ldu );
121 }
124 ldvt );
125 }
126
129 }
130exit_level_2:
133 }
134exit_level_1:
136exit_level_0:
139 }
140 } else {
141 info = -1;
143 }
144 return info;
145}
#define LAPACK_dgesvd(...)
#define LAPACKE_malloc(size)
#define LAPACK_TRANSPOSE_MEMORY_ERROR
lapack_logical LAPACKE_lsame(char ca, char cb)
void LAPACKE_xerbla(const char *name, lapack_int info)
void LAPACKE_dge_trans(int matrix_layout, lapack_int m, lapack_int n, const double *in, lapack_int ldin, double *out, lapack_int ldout)