3838 At this moment, this routine is redirected to GESVD.
3939*/
4040
41+ extern void xerbla_ (const char * srname , const integer * info , ftnlen srname_len );
42+ extern int lapack_sgesvd (char * jobu , char * jobvt , integer * m , integer * n , real * a , integer * lda ,
43+ real * s , real * u , integer * ldu , real * vt , integer * ldvt , real * work ,
44+ integer * lwork , integer * info );
45+ extern int lapack_dgesvd (char * jobu , char * jobvt , integer * m , integer * n , doublereal * a ,
46+ integer * lda , doublereal * s , doublereal * u , integer * ldu , doublereal * vt ,
47+ integer * ldvt , doublereal * work , integer * lwork , integer * info );
48+
4149#define LAPACK_gesdd_real (prefix ) \
4250 void F77_##prefix##gesdd( \
4351 char *jobz, integer *m, integer *n, PREFIX2LAPACK_TYPEDEF(prefix) * buff_A, \
5563 PREFIX2LAPACK_TYPEDEF(prefix) * buff_w, integer * lwork, \
5664 PREFIX2LAPACK_REALDEF(prefix) * buff_r, integer * buff_i, integer * info)
5765
58- #define LAPACK_gesdd_real_body (prefix ) \
59- \
60- F77_ ##prefix##gesvd(jobu, jobv, m, n, buff_A, ldim_A, buff_s, buff_U, ldim_U, buff_Vh, \
61- ldim_Vh, buff_w, lwork, info);
66+ #define LAPACK_gesdd_real_body (prefix ) \
67+ \
68+ lapack_ ##prefix##gesvd(jobu, jobv, m, n, buff_A, ldim_A, buff_s, buff_U, ldim_U, buff_Vh, \
69+ ldim_Vh, buff_w, lwork, info);
6270
6371#define LAPACK_gesdd_complex_body (prefix ) \
6472 char jobu[1], jobv[1]; \
@@ -158,11 +166,13 @@ LAPACK_gesdd_real(d)
158166 if (* m < FLA_SVD_SMALL_SIZE_THRESH2 && * n < FLA_SVD_SMALL_SIZE_THRESH2 )
159167 {
160168 /* Path for small sizes making use of optimized DGESVD */
169+ integer i__1 ;
161170 char jobu [1 ], jobv [1 ];
162171 doublereal anrm ;
163172 extern doublereal dlange_ (char * norm , integer * m , integer * n ,
164173 doublereal * a , integer * lda , doublereal * work );
165174
175+ * info = 0 ;
166176 if (lsame_ (jobz , "O" , 1 , 1 ))
167177 {
168178 if (* m >= * n )
@@ -211,6 +221,8 @@ LAPACK_gesdd_real(d)
211221 {
212222 /* If the info is set to a negative value, it means that the
213223 * input parameters are invalid, so return. */
224+ i__1 = - (* info );
225+ xerbla_ ("DGESDD" , & i__1 , (ftnlen )6 );
214226 AOCL_DTL_TRACE_LOG_EXIT
215227 return ;
216228 }
@@ -232,6 +244,16 @@ LAPACK_gesdd_real(d)
232244 * info += 1 ;
233245 }
234246 }
247+
248+ if (* info < 0 )
249+ {
250+ /* If the info is set to a negative value, it means that the
251+ * input parameters are invalid, so return. */
252+ i__1 = - (* info );
253+ xerbla_ ("DGESDD" , & i__1 , (ftnlen )6 );
254+ AOCL_DTL_TRACE_LOG_EXIT
255+ return ;
256+ }
235257 }
236258 else
237259 {
0 commit comments