170 $ ST, ED, SWEEP, N, NB, IB,
171 $ A, LDA, V, TAU, LDVT, WORK)
182 INTEGER TTYPE, ST, ED, SWEEP, N, NB, IB, LDA, LDVT
185 COMPLEX*16 A( LDA, * ), V( * ),
186 $ TAU( * ), WORK( * )
193 PARAMETER ( ZERO = ( 0.0d+0, 0.0d+0 ),
194 $ one = ( 1.0d+0, 0.0d+0 ) )
198 INTEGER I, J1, J2, LM, LN, VPOS, TAUPOS,
199 $ dpos, ofdpos, ajeter
206 INTRINSIC dconjg, mod
215 upper = lsame( uplo,
'U' )
231 vpos = mod( sweep-1, 2 ) * n + st
232 taupos = mod( sweep-1, 2 ) * n + st
234 vpos = mod( sweep-1, 2 ) * n + st
235 taupos = mod( sweep-1, 2 ) * n + st
238 IF( ttype.EQ.1 )
THEN
243 v( vpos+i ) = dconjg( a( ofdpos-i, st+i ) )
244 a( ofdpos-i, st+i ) = zero
246 ctmp = dconjg( a( ofdpos, st ) )
247 CALL zlarfg( lm, ctmp, v( vpos+1 ), 1,
249 a( ofdpos, st ) = ctmp
252 CALL zlarfy( uplo, lm, v( vpos ), 1,
253 $ dconjg( tau( taupos ) ),
254 $ a( dpos, st ), lda-1, work)
257 IF( ttype.EQ.3 )
THEN
260 CALL zlarfy( uplo, lm, v( vpos ), 1,
261 $ dconjg( tau( taupos ) ),
262 $ a( dpos, st ), lda-1, work)
265 IF( ttype.EQ.2 )
THEN
271 CALL zlarfx(
'Left', ln, lm, v( vpos ),
272 $ dconjg( tau( taupos ) ),
273 $ a( dpos-nb, j1 ), lda-1, work)
276 vpos = mod( sweep-1, 2 ) * n + j1
277 taupos = mod( sweep-1, 2 ) * n + j1
279 vpos = mod( sweep-1, 2 ) * n + j1
280 taupos = mod( sweep-1, 2 ) * n + j1
286 $ dconjg( a( dpos-nb-i, j1+i ) )
287 a( dpos-nb-i, j1+i ) = zero
289 ctmp = dconjg( a( dpos-nb, j1 ) )
290 CALL zlarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
291 a( dpos-nb, j1 ) = ctmp
293 CALL zlarfx(
'Right', ln-1, lm, v( vpos ),
295 $ a( dpos-nb+1, j1 ), lda-1, work)
304 vpos = mod( sweep-1, 2 ) * n + st
305 taupos = mod( sweep-1, 2 ) * n + st
307 vpos = mod( sweep-1, 2 ) * n + st
308 taupos = mod( sweep-1, 2 ) * n + st
311 IF( ttype.EQ.1 )
THEN
316 v( vpos+i ) = a( ofdpos+i, st-1 )
317 a( ofdpos+i, st-1 ) = zero
319 CALL zlarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
324 CALL zlarfy( uplo, lm, v( vpos ), 1,
325 $ dconjg( tau( taupos ) ),
326 $ a( dpos, st ), lda-1, work)
330 IF( ttype.EQ.3 )
THEN
333 CALL zlarfy( uplo, lm, v( vpos ), 1,
334 $ dconjg( tau( taupos ) ),
335 $ a( dpos, st ), lda-1, work)
339 IF( ttype.EQ.2 )
THEN
346 CALL zlarfx(
'Right', lm, ln, v( vpos ),
347 $ tau( taupos ), a( dpos+nb, st ),
351 vpos = mod( sweep-1, 2 ) * n + j1
352 taupos = mod( sweep-1, 2 ) * n + j1
354 vpos = mod( sweep-1, 2 ) * n + j1
355 taupos = mod( sweep-1, 2 ) * n + j1
360 v( vpos+i ) = a( dpos+nb+i, st )
361 a( dpos+nb+i, st ) = zero
363 CALL zlarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
366 CALL zlarfx(
'Left', lm, ln-1, v( vpos ),
367 $ dconjg( tau( taupos ) ),
368 $ a( dpos+nb-1, st+1 ), lda-1, work)
subroutine zhb2st_kernels(uplo, wantz, ttype, st, ed, sweep, n, nb, ib, a, lda, v, tau, ldvt, work)
ZHB2ST_KERNELS
subroutine zlarfg(n, alpha, x, incx, tau)
ZLARFG generates an elementary reflector (Householder matrix).
subroutine zlarfx(side, m, n, v, tau, c, ldc, work)
ZLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the ...
subroutine zlarfy(uplo, n, v, incv, tau, c, ldc, work)
ZLARFY