205 SUBROUTINE dgebrd( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
214 INTEGER INFO, LDA, LWORK, M, N
217 DOUBLE PRECISION A( lda, * ), D( * ), E( * ), TAUP( * ),
218 $ tauq( * ), work( * )
225 parameter( one = 1.0d+0 )
229 INTEGER I, IINFO, J, LDWRKX, LDWRKY, LWKOPT, MINMN, NB,
237 INTRINSIC dble, max, min
248 nb = max( 1, ilaenv( 1,
'DGEBRD',
' ', m, n, -1, -1 ) )
250 work( 1 ) = dble( lwkopt )
251 lquery = ( lwork.EQ.-1 )
254 ELSE IF( n.LT.0 )
THEN 256 ELSE IF( lda.LT.max( 1, m ) )
THEN 258 ELSE IF( lwork.LT.max( 1, m, n ) .AND. .NOT.lquery )
THEN 262 CALL xerbla(
'DGEBRD', -info )
264 ELSE IF( lquery )
THEN 271 IF( minmn.EQ.0 )
THEN 280 IF( nb.GT.1 .AND. nb.LT.minmn )
THEN 284 nx = max( nb, ilaenv( 3,
'DGEBRD',
' ', m, n, -1, -1 ) )
288 IF( nx.LT.minmn )
THEN 290 IF( lwork.LT.ws )
THEN 295 nbmin = ilaenv( 2,
'DGEBRD',
' ', m, n, -1, -1 )
296 IF( lwork.GE.( m+n )*nbmin )
THEN 308 DO 30 i = 1, minmn - nx, nb
314 CALL dlabrd( m-i+1, n-i+1, nb, a( i, i ), lda, d( i ), e( i ),
315 $ tauq( i ), taup( i ), work, ldwrkx,
316 $ work( ldwrkx*nb+1 ), ldwrky )
321 CALL dgemm(
'No transpose',
'Transpose', m-i-nb+1, n-i-nb+1,
322 $ nb, -one, a( i+nb, i ), lda,
323 $ work( ldwrkx*nb+nb+1 ), ldwrky, one,
324 $ a( i+nb, i+nb ), lda )
325 CALL dgemm(
'No transpose',
'No transpose', m-i-nb+1, n-i-nb+1,
326 $ nb, -one, work( nb+1 ), ldwrkx, a( i, i+nb ), lda,
327 $ one, a( i+nb, i+nb ), lda )
332 DO 10 j = i, i + nb - 1
337 DO 20 j = i, i + nb - 1
346 CALL dgebd2( m-i+1, n-i+1, a( i, i ), lda, d( i ), e( i ),
347 $ tauq( i ), taup( i ), work, iinfo )
subroutine dgebrd(M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK, INFO)
DGEBRD
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dgebd2(M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO)
DGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm.
subroutine dlabrd(M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, LDY)
DLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form.
subroutine xerbla(SRNAME, INFO)
XERBLA