203 SUBROUTINE sgebrd( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
211 INTEGER INFO, LDA, LWORK, M, N
214 REAL A( LDA, * ), D( * ), E( * ), TAUP( * ),
215 $ tauq( * ), work( * )
222 parameter( one = 1.0e+0 )
226 INTEGER I, IINFO, J, LDWRKX, LDWRKY, LWKOPT, MINMN, NB,
244 nb =
max( 1, ilaenv( 1,
'SGEBRD'' ', m, n,
246 work( 1 ) = real( lwkopt )
247 lquery = ( lwork.EQ.-1 )
250 ELSE IF( n.LT.0 )
THEN
252 ELSE IF( lda.LT.
max( 1, m ) )
THEN
254 ELSE IF( lwork.LT.
max( 1, m, n ) .AND. .NOT.lquery )
THEN
258 CALL xerbla(
'SGEBRD', -info )
260 ELSE IF( lquery )
THEN
267 IF( minmn.EQ.0 )
THEN
276 IF( nb.GT.1 .AND. nb.LT.minmn )
THEN
280 nx =
max( nb, ilaenv( 3,
'SGEBRD', '
', M, N, -1, -1 ) )
284.LT.
IF( NXMINMN ) THEN
286.LT.
IF( LWORKWS ) THEN
291 NBMIN = ILAENV( 2, 'sgebrd', ' ', M, N, -1, -1 )
292.GE.
IF( LWORK( M+N )*NBMIN ) THEN
304 DO 30 I = 1, MINMN - NX, NB
310 CALL SLABRD( M-I+1, N-I+1, NB, A( I, I ), LDA, D( I ), E( I ),
311 $ TAUQ( I ), TAUP( I ), WORK, LDWRKX,
312 $ WORK( LDWRKX*NB+1 ), LDWRKY )
317 CALL SGEMM( 'no transpose
', 'transpose
', M-I-NB+1, N-I-NB+1,
318 $ NB, -ONE, A( I+NB, I ), LDA,
319 $ WORK( LDWRKX*NB+NB+1 ), LDWRKY, ONE,
320 $ A( I+NB, I+NB ), LDA )
321 CALL SGEMM( 'no transpose
', 'no transpose
', M-I-NB+1, N-I-NB+1,
322 $ NB, -ONE, WORK( NB+1 ), LDWRKX, A( I, I+NB ), LDA,
323 $ ONE, A( I+NB, I+NB ), LDA )
328 DO 10 J = I, I + NB - 1
333 DO 20 J = I, I + NB - 1
342 CALL SGEBD2( M-I+1, N-I+1, A( I, I ), LDA, D( I ), E( I ),
343 $ TAUQ( I ), TAUP( I ), WORK, IINFO )
subroutine xerbla(srname, info)
XERBLA
subroutine sgebrd(m, n, a, lda, d, e, tauq, taup, work, lwork, info)
SGEBRD
subroutine sgebd2(m, n, a, lda, d, e, tauq, taup, work, info)
SGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm.
subroutine slabrd(m, n, nb, a, lda, d, e, tauq, taup, x, ldx, y, ldy)
SLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form.
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM