168 $ ST, ED, SWEEP, N, NB, IB,
169 $ A, LDA, V, TAU, LDVT, WORK)
180 INTEGER TTYPE, ST, ED, SWEEP, N, NB, IB, LDA, LDVT
183 DOUBLE PRECISION A( LDA, * ), V( * ),
184 $ TAU( * ), WORK( * )
190 DOUBLE PRECISION ZERO, ONE
191 PARAMETER ( ZERO = 0.0d+0,
196 INTEGER I, J1, J2, LM, LN, VPOS, TAUPOS,
197 $ dpos, ofdpos, ajeter
198 DOUBLE PRECISION CTMP
213 upper = lsame( uplo,
'U' )
229 vpos = mod( sweep-1, 2 ) * n + st
230 taupos = mod( sweep-1, 2 ) * n + st
232 vpos = mod( sweep-1, 2 ) * n + st
233 taupos = mod( sweep-1, 2 ) * n + st
236 IF( ttype.EQ.1 )
THEN
241 v( vpos+i ) = ( a( ofdpos-i, st+i ) )
242 a( ofdpos-i, st+i ) = zero
244 ctmp = ( a( ofdpos, st ) )
245 CALL dlarfg( lm, ctmp, v( vpos+1 ), 1,
247 a( ofdpos, st ) = ctmp
250 CALL dlarfy( uplo, lm, v( vpos ), 1,
252 $ a( dpos, st ), lda-1, work)
255 IF( ttype.EQ.3 )
THEN
258 CALL dlarfy( uplo, lm, v( vpos ), 1,
260 $ a( dpos, st ), lda-1, work)
263 IF( ttype.EQ.2 )
THEN
269 CALL dlarfx(
'Left', ln, lm, v( vpos ),
271 $ a( dpos-nb, j1 ), lda-1, work)
274 vpos = mod( sweep-1, 2 ) * n + j1
275 taupos = mod( sweep-1, 2 ) * n + j1
277 vpos = mod( sweep-1, 2 ) * n + j1
278 taupos = mod( sweep-1, 2 ) * n + j1
284 $ ( a( dpos-nb-i, j1+i ) )
285 a( dpos-nb-i, j1+i ) = zero
287 ctmp = ( a( dpos-nb, j1 ) )
288 CALL dlarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
289 a( dpos-nb, j1 ) = ctmp
291 CALL dlarfx(
'Right', ln-1, lm, v( vpos ),
293 $ a( dpos-nb+1, j1 ), lda-1, work)
302 vpos = mod( sweep-1, 2 ) * n + st
303 taupos = mod( sweep-1, 2 ) * n + st
305 vpos = mod( sweep-1, 2 ) * n + st
306 taupos = mod( sweep-1, 2 ) * n + st
309 IF( ttype.EQ.1 )
THEN
314 v( vpos+i ) = a( ofdpos+i, st-1 )
315 a( ofdpos+i, st-1 ) = zero
317 CALL dlarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
322 CALL dlarfy( uplo, lm, v( vpos ), 1,
324 $ a( dpos, st ), lda-1, work)
328 IF( ttype.EQ.3 )
THEN
331 CALL dlarfy( uplo, lm, v( vpos ), 1,
333 $ a( dpos, st ), lda-1, work)
337 IF( ttype.EQ.2 )
THEN
344 CALL dlarfx(
'Right', lm, ln, v( vpos ),
345 $ tau( taupos ), a( dpos+nb, st ),
349 vpos = mod( sweep-1, 2 ) * n + j1
350 taupos = mod( sweep-1, 2 ) * n + j1
352 vpos = mod( sweep-1, 2 ) * n + j1
353 taupos = mod( sweep-1, 2 ) * n + j1
358 v( vpos+i ) = a( dpos+nb+i, st )
359 a( dpos+nb+i, st ) = zero
361 CALL dlarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
364 CALL dlarfx(
'Left', lm, ln-1, v( vpos ),
366 $ 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 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
subroutine dlarfg(N, ALPHA, X, INCX, TAU)
DLARFG generates an elementary reflector (Householder matrix).