168 $ ST, ED, SWEEP, N, NB, IB,
169 $ A, LDA, V, TAU, LDVT, WORK)
181 INTEGER TTYPE, ST, ED, SWEEP, N, NB, IB, LDA, LDVT
184 COMPLEX*16 A( lda, * ), V( * ),
185 $ tau( * ), work( * )
192 parameter( zero = ( 0.0d+0, 0.0d+0 ),
193 $ one = ( 1.0d+0, 0.0d+0 ) )
197 INTEGER I, J1, J2, LM, LN, VPOS, TAUPOS,
198 $ dpos, ofdpos, ajeter
205 INTRINSIC dconjg, mod
214 upper = lsame( uplo,
'U' )
230 vpos = mod( sweep-1, 2 ) * n + st
231 taupos = mod( sweep-1, 2 ) * n + st
233 vpos = mod( sweep-1, 2 ) * n + st
234 taupos = mod( sweep-1, 2 ) * n + st
237 IF( ttype.EQ.1 )
THEN 242 v( vpos+i ) = dconjg( a( ofdpos-i, st+i ) )
243 a( ofdpos-i, st+i ) = zero
245 ctmp = dconjg( a( ofdpos, st ) )
246 CALL zlarfg( lm, ctmp, v( vpos+1 ), 1,
248 a( ofdpos, st ) = ctmp
251 CALL zlarfy( uplo, lm, v( vpos ), 1,
252 $ dconjg( tau( taupos ) ),
253 $ a( dpos, st ), lda-1, work)
256 IF( ttype.EQ.3 )
THEN 259 CALL zlarfy( uplo, lm, v( vpos ), 1,
260 $ dconjg( tau( taupos ) ),
261 $ a( dpos, st ), lda-1, work)
264 IF( ttype.EQ.2 )
THEN 270 CALL zlarfx(
'Left', ln, lm, v( vpos ),
271 $ dconjg( tau( taupos ) ),
272 $ a( dpos-nb, j1 ), lda-1, work)
275 vpos = mod( sweep-1, 2 ) * n + j1
276 taupos = mod( sweep-1, 2 ) * n + j1
278 vpos = mod( sweep-1, 2 ) * n + j1
279 taupos = mod( sweep-1, 2 ) * n + j1
285 $ dconjg( a( dpos-nb-i, j1+i ) )
286 a( dpos-nb-i, j1+i ) = zero
288 ctmp = dconjg( a( dpos-nb, j1 ) )
289 CALL zlarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
290 a( dpos-nb, j1 ) = ctmp
292 CALL zlarfx(
'Right', ln-1, lm, v( vpos ),
294 $ a( dpos-nb+1, j1 ), lda-1, work)
303 vpos = mod( sweep-1, 2 ) * n + st
304 taupos = mod( sweep-1, 2 ) * n + st
306 vpos = mod( sweep-1, 2 ) * n + st
307 taupos = mod( sweep-1, 2 ) * n + st
310 IF( ttype.EQ.1 )
THEN 315 v( vpos+i ) = a( ofdpos+i, st-1 )
316 a( ofdpos+i, st-1 ) = zero
318 CALL zlarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
323 CALL zlarfy( uplo, lm, v( vpos ), 1,
324 $ dconjg( tau( taupos ) ),
325 $ a( dpos, st ), lda-1, work)
329 IF( ttype.EQ.3 )
THEN 332 CALL zlarfy( uplo, lm, v( vpos ), 1,
333 $ dconjg( tau( taupos ) ),
334 $ a( dpos, st ), lda-1, work)
338 IF( ttype.EQ.2 )
THEN 345 CALL zlarfx(
'Right', lm, ln, v( vpos ),
346 $ tau( taupos ), a( dpos+nb, st ),
350 vpos = mod( sweep-1, 2 ) * n + j1
351 taupos = mod( sweep-1, 2 ) * n + j1
353 vpos = mod( sweep-1, 2 ) * n + j1
354 taupos = mod( sweep-1, 2 ) * n + j1
359 v( vpos+i ) = a( dpos+nb+i, st )
360 a( dpos+nb+i, st ) = zero
362 CALL zlarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
365 CALL zlarfx(
'Left', lm, ln-1, v( vpos ),
366 $ dconjg( tau( taupos ) ),
367 $ 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 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
subroutine zlarfg(N, ALPHA, X, INCX, TAU)
ZLARFG generates an elementary reflector (Householder matrix).