103 SUBROUTINE zlarfgp( N, ALPHA, X, INCX, TAU )
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 zlarfgp(N, ALPHA, X, INCX, TAU)
ZLARFGP generates an elementary reflector (Householder matrix) with non-negative beta.
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL