167 SUBROUTINE dsb2st_kernels( UPLO, WANTZ, TTYPE,
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)
logical function lsame(CA, CB)
LSAME
subroutine dlarfg(N, ALPHA, X, INCX, TAU)
DLARFG generates an elementary reflector (Householder matrix).
subroutine dlarfy(UPLO, N, V, INCV, TAU, C, LDC, WORK)
DLARFY
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 ...