111 COMPLEX*16 ALPHA, TAU
120 DOUBLE PRECISION TWO, ONE, ZERO
121 parameter( two = 2.0d+0, one = 1.0d+0, zero = 0.0d+0 )
125 DOUBLE PRECISION ALPHI, ALPHR, BETA, BIGNUM, SMLNUM, XNORM
129 DOUBLE PRECISION DLAMCH, DLAPY3, DLAPY2, DZNRM2
131 EXTERNAL dlamch, dlapy3, dlapy2, dznrm2, zladiv
134 INTRINSIC abs, dble, dcmplx, dimag, sign
146 xnorm = dznrm2( n-1, x, incx )
147 alphr = dble( alpha )
148 alphi = dimag( alpha )
150 IF( xnorm.EQ.zero )
THEN
154 IF( alphi.EQ.zero )
THEN
155 IF( alphr.GE.zero )
THEN
165 x( 1 + (j-1)*incx ) = zero
171 xnorm = dlapy2( alphr, alphi )
172 tau = dcmplx( one - alphr / xnorm, -alphi / xnorm )
174 x( 1 + (j-1)*incx ) = zero
182 beta = sign( dlapy3( alphr, alphi, xnorm ), alphr )
183 smlnum = dlamch(
'S' ) / dlamch(
'E' )
184 bignum = one / smlnum
187 IF( abs( beta ).LT.smlnum )
THEN
193 CALL zdscal( n-1, bignum, x, incx )
197 IF( (abs( beta ).LT.smlnum) .AND. (knt .LT. 20) )
202 xnorm = dznrm2( n-1, x, incx )
203 alpha = dcmplx( alphr, alphi )
204 beta = sign( dlapy3( alphr, alphi, xnorm ), alphr )
208 IF( beta.LT.zero )
THEN
212 alphr = alphi * (alphi/dble( alpha ))
213 alphr = alphr + xnorm * (xnorm/dble( alpha ))
214 tau = dcmplx( alphr/beta, -alphi/beta )
215 alpha = dcmplx( -alphr, alphi )
217 alpha = zladiv( dcmplx( one ), alpha )
219 IF ( abs(tau).LE.smlnum )
THEN
228 alphr = dble( savealpha )
229 alphi = dimag( savealpha )
230 IF( alphi.EQ.zero )
THEN
231 IF( alphr.GE.zero )
THEN
236 x( 1 + (j-1)*incx ) = zero
238 beta = dble( -savealpha )
241 xnorm = dlapy2( alphr, alphi )
242 tau = dcmplx( one - alphr / xnorm, -alphi / xnorm )
244 x( 1 + (j-1)*incx ) = zero
253 CALL zscal( n-1, alpha, x, incx )
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL
subroutine zlarfgp(N, ALPHA, X, INCX, TAU)
ZLARFGP generates an elementary reflector (Householder matrix) with non-negative beta.