168 SUBROUTINE ssb2st_kernels( UPLO, WANTZ, TTYPE,
169 $ ST, ED, SWEEP, N, NB, IB,
170 $ A, LDA, V, TAU, LDVT, WORK)
181 INTEGER ttype, st, ed, sweep, n, nb, ib, lda, ldvt
184 REAL a( lda, * ), v( * ),
185 $ tau( * ), work( * )
192 parameter( zero = 0.0e+0,
197 INTEGER i, j1, j2, lm, ln, vpos, taupos,
198 $ dpos, ofdpos, ajeter
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 ) = ( a( ofdpos-i, st+i ) )
243 a( ofdpos-i, st+i ) = zero
245 ctmp = ( a( ofdpos, st ) )
246 CALL slarfg( lm, ctmp, v( vpos+1 ), 1,
248 a( ofdpos, st ) = ctmp
251 CALL slarfy( uplo, lm, v( vpos ), 1,
253 $ a( dpos, st ), lda-1, work)
256 IF( ttype.EQ.3 )
THEN 259 CALL slarfy( uplo, lm, v( vpos ), 1,
261 $ a( dpos, st ), lda-1, work)
264 IF( ttype.EQ.2 )
THEN 270 CALL slarfx(
'Left', ln, lm, v( vpos ),
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 $ ( a( dpos-nb-i, j1+i ) )
286 a( dpos-nb-i, j1+i ) = zero
288 ctmp = ( a( dpos-nb, j1 ) )
289 CALL slarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
290 a( dpos-nb, j1 ) = ctmp
292 CALL slarfx(
'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 slarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
323 CALL slarfy( uplo, lm, v( vpos ), 1,
325 $ a( dpos, st ), lda-1, work)
329 IF( ttype.EQ.3 )
THEN 332 CALL slarfy( uplo, lm, v( vpos ), 1,
334 $ a( dpos, st ), lda-1, work)
338 IF( ttype.EQ.2 )
THEN 345 CALL slarfx(
'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 slarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
365 CALL slarfx(
'Left', lm, ln-1, v( vpos ),
367 $ a( dpos+nb-1, st+1 ), lda-1, work)
logical function lsame(CA, CB)
LSAME
subroutine slarfx(SIDE, M, N, V, TAU, C, LDC, WORK)
SLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the ...
subroutine slarfg(N, ALPHA, X, INCX, TAU)
SLARFG generates an elementary reflector (Householder matrix).
subroutine slarfy(UPLO, N, V, INCV, TAU, C, LDC, WORK)
SLARFY