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 A( lda, * ), V( * ),
185 $ tau( * ), work( * )
192 parameter( zero = ( 0.0e+0, 0.0e+0 ),
193 $ one = ( 1.0e+0, 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 ) = conjg( a( ofdpos-i, st+i ) )
243 a( ofdpos-i, st+i ) = zero
245 ctmp = conjg( a( ofdpos, st ) )
246 CALL clarfg( lm, ctmp, v( vpos+1 ), 1,
248 a( ofdpos, st ) = ctmp
251 CALL clarfy( uplo, lm, v( vpos ), 1,
252 $ conjg( tau( taupos ) ),
253 $ a( dpos, st ), lda-1, work)
256 IF( ttype.EQ.3 )
THEN 259 CALL clarfy( uplo, lm, v( vpos ), 1,
260 $ conjg( tau( taupos ) ),
261 $ a( dpos, st ), lda-1, work)
264 IF( ttype.EQ.2 )
THEN 270 CALL clarfx(
'Left', ln, lm, v( vpos ),
271 $ conjg( 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 $ conjg( a( dpos-nb-i, j1+i ) )
286 a( dpos-nb-i, j1+i ) = zero
288 ctmp = conjg( a( dpos-nb, j1 ) )
289 CALL clarfg( lm, ctmp, v( vpos+1 ), 1, tau( taupos ) )
290 a( dpos-nb, j1 ) = ctmp
292 CALL clarfx(
'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 clarfg( lm, a( ofdpos, st-1 ), v( vpos+1 ), 1,
323 CALL clarfy( uplo, lm, v( vpos ), 1,
324 $ conjg( tau( taupos ) ),
325 $ a( dpos, st ), lda-1, work)
329 IF( ttype.EQ.3 )
THEN 332 CALL clarfy( uplo, lm, v( vpos ), 1,
333 $ conjg( tau( taupos ) ),
334 $ a( dpos, st ), lda-1, work)
338 IF( ttype.EQ.2 )
THEN 345 CALL clarfx(
'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 clarfg( lm, a( dpos+nb, st ), v( vpos+1 ), 1,
365 CALL clarfx(
'Left', lm, ln-1, v( vpos ),
366 $ conjg( tau( taupos ) ),
367 $ a( dpos+nb-1, st+1 ), lda-1, work)
subroutine chb2st_kernels(UPLO, WANTZ, TTYPE, ST, ED, SWEEP, N, NB, IB, A, LDA, V, TAU, LDVT, WORK)
CHB2ST_KERNELS
subroutine clarfx(SIDE, M, N, V, TAU, C, LDC, WORK)
CLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the ...
subroutine clarfg(N, ALPHA, X, INCX, TAU)
CLARFG generates an elementary reflector (Householder matrix).
subroutine clarfy(UPLO, N, V, INCV, TAU, C, LDC, WORK)
CLARFY