169 SUBROUTINE dgehrd( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
177 INTEGER ihi, ilo, info, lda, lwork, n
180 DOUBLE PRECISION a( lda, * ), tau( * ), work( * )
187 parameter( nbmax = 64, ldt = nbmax+1 )
188 DOUBLE PRECISION zero, one
189 parameter( zero = 0.0d+0,
194 INTEGER i, ib, iinfo, iws,
j, ldwork, lwkopt, nb,
199 DOUBLE PRECISION t( ldt, nbmax )
217 nb = min( nbmax,
ilaenv( 1,
'DGEHRD',
' ', n, ilo, ihi, -1 ) )
220 lquery = ( lwork.EQ.-1 )
223 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, n ) )
THEN
225 ELSE IF( ihi.LT.min( ilo, n ) .OR. ihi.GT.n )
THEN
227 ELSE IF( lda.LT.max( 1, n ) )
THEN
229 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
233 CALL
xerbla(
'DGEHRD', -info )
235 ELSE IF( lquery )
THEN
244 DO 20 i = max( 1, ihi ), n - 1
258 nb = min( nbmax,
ilaenv( 1,
'DGEHRD',
' ', n, ilo, ihi, -1 ) )
261 IF( nb.GT.1 .AND. nb.LT.nh )
THEN
266 nx = max( nb,
ilaenv( 3,
'DGEHRD',
' ', n, ilo, ihi, -1 ) )
272 IF( lwork.LT.iws )
THEN
278 nbmin = max( 2,
ilaenv( 2,
'DGEHRD',
' ', n, ilo, ihi,
280 IF( lwork.GE.n*nbmin )
THEN
290 IF( nb.LT.nbmin .OR. nb.GE.nh )
THEN
300 DO 40 i = ilo, ihi - 1 - nx, nb
301 ib = min( nb, ihi-i )
307 CALL
dlahr2( ihi, i, ib, a( 1, i ), lda, tau( i ), t, ldt,
314 ei = a( i+ib, i+ib-1 )
315 a( i+ib, i+ib-1 ) = one
316 CALL
dgemm(
'No transpose',
'Transpose',
318 $ ib, -one, work, ldwork, a( i+ib, i ), lda, one,
319 $ a( 1, i+ib ), lda )
320 a( i+ib, i+ib-1 ) = ei
325 CALL
dtrmm(
'Right',
'Lower',
'Transpose',
327 $ one, a( i+1, i ), lda, work, ldwork )
329 CALL
daxpy( i, -one, work( ldwork*
j+1 ), 1,
336 CALL
dlarfb(
'Left',
'Transpose',
'Forward',
338 $ ihi-i, n-i-ib+1, ib, a( i+1, i ), lda, t, ldt,
339 $ a( i+1, i+ib ), lda, work, ldwork )
345 CALL
dgehd2( n, i, ihi, a, lda, tau, work, iinfo )
subroutine dgehrd(N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO)
DGEHRD
subroutine dgehd2(N, ILO, IHI, A, LDA, TAU, WORK, INFO)
DGEHD2 reduces a general square matrix to upper Hessenberg form using an unblocked algorithm...
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dlarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
DLARFB applies a block reflector or its transpose to a general rectangular matrix.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlahr2(N, K, NB, A, LDA, TAU, T, LDT, Y, LDY)
DLAHR2 reduces the specified number of first columns of a general rectangular matrix A so that elemen...
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real j
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM