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 dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dgebrd(M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK, INFO)
DGEBRD
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.