176 SUBROUTINE chetd2( UPLO, N, A, LDA, D, E, TAU, INFO )
189 COMPLEX A( lda, * ), TAU( * )
195 COMPLEX ONE, ZERO, HALF
196 parameter( one = ( 1.0e+0, 0.0e+0 ),
197 $ zero = ( 0.0e+0, 0.0e+0 ),
198 $ half = ( 0.5e+0, 0.0e+0 ) )
211 EXTERNAL lsame, cdotc
214 INTRINSIC max, min, real
221 upper = lsame( uplo,
'U' )
222 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
224 ELSE IF( n.LT.0 )
THEN
226 ELSE IF( lda.LT.max( 1, n ) )
THEN
230 CALL
xerbla(
'CHETD2', -info )
243 a( n, n ) =
REAL( A( N, N ) )
244 DO 10 i = n - 1, 1, -1
250 CALL
clarfg( i, alpha, a( 1, i+1 ), 1, taui )
253 IF( taui.NE.zero )
THEN
261 CALL
chemv( uplo, i, taui, a, lda, a( 1, i+1 ), 1, zero,
266 alpha = -half*taui*cdotc( i, tau, 1, a( 1, i+1 ), 1 )
267 CALL
caxpy( i, alpha, a( 1, i+1 ), 1, tau, 1 )
272 CALL
cher2( uplo, i, -one, a( 1, i+1 ), 1, tau, 1, a,
276 a( i, i ) =
REAL( A( I, I ) )
279 d( i+1 ) = a( i+1, i+1 )
287 a( 1, 1 ) =
REAL( A( 1, 1 ) )
294 CALL
clarfg( n-i, alpha, a( min( i+2, n ), i ), 1, taui )
297 IF( taui.NE.zero )
THEN
305 CALL
chemv( uplo, n-i, taui, a( i+1, i+1 ), lda,
306 $ a( i+1, i ), 1, zero, tau( i ), 1 )
310 alpha = -half*taui*cdotc( n-i, tau( i ), 1, a( i+1, i ),
312 CALL
caxpy( n-i, alpha, a( i+1, i ), 1, tau( i ), 1 )
317 CALL
cher2( uplo, n-i, -one, a( i+1, i ), 1, tau( i ), 1,
318 $ a( i+1, i+1 ), lda )
321 a( i+1, i+1 ) =
REAL( A( I+1, I+1 ) )
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine chemv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CHEMV
subroutine chetd2(UPLO, N, A, LDA, D, E, TAU, INFO)
CHETD2 reduces a Hermitian matrix to real symmetric tridiagonal form by an unitary similarity transfo...
subroutine clarfg(N, ALPHA, X, INCX, TAU)
CLARFG generates an elementary reflector (Householder matrix).
subroutine cher2(UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA)
CHER2