164 SUBROUTINE sgehrd( N, ILO, IHI, A, LDA, TAU, WORK, LWORK,
172 INTEGER IHI, ILO, INFO, LDA, LWORK, N
175 REAL A( LDA, * ), TAU( * ), WORK( * )
181 INTEGER NBMAX, LDT, TSIZE
182 parameter( nbmax = 64, ldt = nbmax+1,
183 $ tsize = ldt*nbmax )
185 parameter( zero = 0.0e+0,
190 INTEGER I, IB, IINFO, IWT, J, LDWORK, LWKOPT, NB,
205 EXTERNAL ilaenv, sroundup_lwork
212 lquery = ( lwork.EQ.-1 )
215 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, n ) )
THEN
217 ELSE IF( ihi.LT.min( ilo, n ) .OR. ihi.GT.n )
THEN
219 ELSE IF( lda.LT.max( 1, n ) )
THEN
221 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
233 nb = min( nbmax, ilaenv( 1,
'SGEHRD',
' ', n, ilo, ihi,
235 lwkopt = n*nb + tsize
237 work( 1 ) = sroundup_lwork( lwkopt )
241 CALL xerbla(
'SGEHRD', -info )
243 ELSE IF( lquery )
THEN
252 DO 20 i = max( 1, ihi ), n - 1
265 nb = min( nbmax, ilaenv( 1,
'SGEHRD',
' ', n, ilo, ihi, -1 ) )
267 IF( nb.GT.1 .AND. nb.LT.nh )
THEN
272 nx = max( nb, ilaenv( 3,
'SGEHRD',
' ', n, ilo, ihi, -1 ) )
277 IF( lwork.LT.lwkopt )
THEN
283 nbmin = max( 2, ilaenv( 2,
'SGEHRD',
' ', n, ilo, ihi,
285 IF( lwork.GE.(n*nbmin + tsize) )
THEN
286 nb = (lwork-tsize) / n
295 IF( nb.LT.nbmin .OR. nb.GE.nh )
THEN
306 DO 40 i = ilo, ihi - 1 - nx, nb
307 ib = min( nb, ihi-i )
313 CALL slahr2( ihi, i, ib, a( 1, i ), lda, tau( i ),
314 $ work( iwt ), ldt, work, ldwork )
320 ei = a( i+ib, i+ib-1 )
321 a( i+ib, i+ib-1 ) = one
322 CALL sgemm(
'No transpose',
'Transpose',
324 $ ib, -one, work, ldwork, a( i+ib, i ), lda, one,
325 $ a( 1, i+ib ), lda )
326 a( i+ib, i+ib-1 ) = ei
331 CALL strmm(
'Right',
'Lower',
'Transpose',
333 $ one, a( i+1, i ), lda, work, ldwork )
335 CALL saxpy( i, -one, work( ldwork*j+1 ), 1,
342 CALL slarfb(
'Left',
'Transpose',
'Forward',
344 $ ihi-i, n-i-ib+1, ib, a( i+1, i ), lda,
345 $ work( iwt ), ldt, a( i+1, i+ib ), lda,
352 CALL sgehd2( n, i, ihi, a, lda, tau, work, iinfo )
354 work( 1 ) = sroundup_lwork( lwkopt )
subroutine sgehd2(n, ilo, ihi, a, lda, tau, work, info)
SGEHD2 reduces a general square matrix to upper Hessenberg form using an unblocked algorithm.
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine slahr2(n, k, nb, a, lda, tau, t, ldt, y, ldy)
SLAHR2 reduces the specified number of first columns of a general rectangular matrix A so that elemen...
subroutine slarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
SLARFB applies a block reflector or its transpose to a general rectangular matrix.