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 DOUBLE PRECISION A( LDA, * ), V( * ),
186 $ TAU( * ), WORK( * )
192 DOUBLE PRECISION ZERO, ONE
193 PARAMETER ( ZERO = 0.0d+0,
198 INTEGER I, J1, J2, LM, LN, VPOS, TAUPOS,
199 $ dpos, ofdpos, ajeter
200 DOUBLE PRECISION CTMP
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 ) = ( a( ofdpos-i, st+i ) )
244 a( ofdpos-i, st+i ) = zero
246 ctmp = ( a( ofdpos, st ) )
247 CALL dlarfg( lm, ctmp, v( vpos+1 ), 1,
249 a( ofdpos, st ) = ctmp
252 CALL dlarfy( uplo, lm, v( vpos ), 1,
254 $ a( dpos, st ), lda-1, work)
257 IF( ttype.EQ.3 )
THEN
260 CALL dlarfy( uplo, lm, v( vpos ), 1,
262 $ a( dpos, st ), lda-1, work)
265 IF( ttype.EQ.2 )
THEN
271 CALL dlarfx(
'Left', ln, lm, v( vpos ),
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 $ ( a( dpos-nb-i, j1+i ) )
287 a( dpos-nb-i, j1+i ) = zero
289 ctmp = ( a( dpos-nb, j1 ) )
290 CALL dlarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
291 a( dpos-nb, j1 ) = ctmp
293 CALL dlarfx(
'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 dlarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
324 CALL dlarfy( uplo, lm, v( vpos ), 1,
326 $ a( dpos, st ), lda-1, work)
330 IF( ttype.EQ.3 )
THEN
333 CALL dlarfy( uplo, lm, v( vpos ), 1,
335 $ a( dpos, st ), lda-1, work)
339 IF( ttype.EQ.2 )
THEN
346 CALL dlarfx(
'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 dlarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
366 CALL dlarfx(
'Left', lm, ln-1, v( vpos ),
368 $ a( dpos+nb-1, st+1 ), lda-1, work)
subroutine dsb2st_kernels(uplo, wantz, ttype, st, ed, sweep, n, nb, ib, a, lda, v, tau, ldvt, work)
DSB2ST_KERNELS
subroutine dlarfg(n, alpha, x, incx, tau)
DLARFG generates an elementary reflector (Householder matrix).
subroutine dlarfx(side, m, n, v, tau, c, ldc, work)
DLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the ...
subroutine dlarfy(uplo, n, v, incv, tau, c, ldc, work)
DLARFY