148 SUBROUTINE chptrd( UPLO, N, AP, D, E, TAU, INFO )
160 COMPLEX AP( * ), TAU( * )
166 COMPLEX ONE, ZERO, HALF
167 parameter( one = ( 1.0e+0, 0.0e+0 ),
168 $ zero = ( 0.0e+0, 0.0e+0 ),
169 $ half = ( 0.5e+0, 0.0e+0 ) )
173 INTEGER I, I1, I1I1, II
182 EXTERNAL lsame, cdotc
192 upper = lsame( uplo,
'U' )
193 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
195 ELSE IF( n.LT.0 )
THEN
199 CALL xerbla(
'CHPTRD', -info )
213 i1 = n*( n-1 ) / 2 + 1
214 ap( i1+n-1 ) = real( ap( i1+n-1 ) )
215 DO 10 i = n - 1, 1, -1
221 CALL clarfg( i, alpha, ap( i1 ), 1, taui )
222 e( i ) = real( alpha )
224 IF( taui.NE.zero )
THEN
232 CALL chpmv( uplo, i, taui, ap, ap( i1 ), 1, zero, tau,
237 alpha = -half*taui*cdotc( i, tau, 1, ap( i1 ), 1 )
238 CALL caxpy( i, alpha, ap( i1 ), 1, tau, 1 )
243 CALL chpr2( uplo, i, -one, ap( i1 ), 1, tau, 1, ap )
246 ap( i1+i-1 ) = e( i )
247 d( i+1 ) = real( ap( i1+i ) )
251 d( 1 ) = real( ap( 1 ) )
258 ap( 1 ) = real( ap( 1 ) )
260 i1i1 = ii + n - i + 1
266 CALL clarfg( n-i, alpha, ap( ii+2 ), 1, taui )
267 e( i ) = real( alpha )
269 IF( taui.NE.zero )
THEN
277 CALL chpmv( uplo, n-i, taui, ap( i1i1 ), ap( ii+1 ),
279 $ zero, tau( i ), 1 )
283 alpha = -half*taui*cdotc( n-i, tau( i ), 1,
286 CALL caxpy( n-i, alpha, ap( ii+1 ), 1, tau( i ), 1 )
291 CALL chpr2( uplo, n-i, -one, ap( ii+1 ), 1, tau( i ),
297 d( i ) = real( ap( ii ) )
301 d( n ) = real( ap( ii ) )
subroutine chpmv(uplo, n, alpha, ap, x, incx, beta, y, incy)
CHPMV
subroutine chpr2(uplo, n, alpha, x, incx, y, incy, ap)
CHPR2
subroutine clarfg(n, alpha, x, incx, tau)
CLARFG generates an elementary reflector (Householder matrix).