161 SUBROUTINE ssbtrd( VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ,
170 INTEGER INFO, KD, LDAB, LDQ,
173 REAL AB( LDAB, * ), D( * ), E( * ), Q( LDQ, * ),
181 parameter( zero = 0.0e+0, one = 1.0e+0 )
184 LOGICAL INITQ, UPPER, WANTQ
185 INTEGER I, I2, IBL, INCA, INCX, IQAEND, IQB, IQEND, J,
186 $ j1, j1end, j1inc, j2, jend, jin, jinc, k, kd1,
187 $ kdm1, kdn, l, last, lend, nq, nr, nrt
205 initq = lsame( vect,
'V' )
206 wantq = initq .OR. lsame( vect, 'u
' )
207 UPPER = LSAME( UPLO, 'u
' )
214.NOT..AND..NOT.
IF( WANTQ LSAME( VECT, 'n
' ) ) THEN
216.NOT..AND..NOT.
ELSE IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
218.LT.
ELSE IF( N0 ) THEN
220.LT.
ELSE IF( KD0 ) THEN
222.LT.
ELSE IF( LDABKD1 ) THEN
224.LT..AND.
ELSE IF( LDQMAX( 1, N ) WANTQ ) THEN
228 CALL XERBLA( 'ssbtrd', -INFO )
240 $ CALL SLASET( 'full
', N, N, ZERO, ONE, Q, LDQ )
264 DO 80 K = KDN + 1, 2, -1
273 CALL SLARGV( NR, AB( 1, J1-1 ), INCA, WORK( J1 ),
274 $ KD1, D( J1 ), KD1 )
282.GE.
IF( NR2*KD-1 ) THEN
284 CALL SLARTV( NR, AB( L+1, J1-1 ), INCA,
285 $ AB( L, J1 ), INCA, D( J1 ),
290 JEND = J1 + ( NR-1 )*KD1
291 DO 20 JINC = J1, JEND, KD1
292 CALL SROT( KDM1, AB( 2, JINC-1 ), 1,
293 $ AB( 1, JINC ), 1, D( JINC ),
301.LE.
IF( KN-I+1 ) THEN
306 CALL SLARTG( AB( KD-K+3, I+K-2 ),
307 $ AB( KD-K+2, I+K-1 ), D( I+K-1 ),
308 $ WORK( I+K-1 ), TEMP )
309 AB( KD-K+3, I+K-2 ) = TEMP
313 CALL SROT( K-3, AB( KD-K+4, I+K-2 ), 1,
314 $ AB( KD-K+3, I+K-1 ), 1, D( I+K-1 ),
325 $ CALL SLAR2V( NR, AB( KD1, J1-1 ), AB( KD1, J1 ),
326 $ AB( KD, J1 ), INCA, D( J1 ),
332.LT.
IF( 2*KD-1NR ) THEN
344 $ CALL SLARTV( NRT, AB( KD-L, J1+L ), INCA,
345 $ AB( KD-L+1, J1+L ), INCA,
346 $ D( J1 ), WORK( J1 ), KD1 )
349 J1END = J1 + KD1*( NR-2 )
350.GE.
IF( J1ENDJ1 ) THEN
351 DO 40 JIN = J1, J1END, KD1
352 CALL SROT( KD-1, AB( KD-1, JIN+1 ), INCX,
353 $ AB( KD, JIN+1 ), INCX,
354 $ D( JIN ), WORK( JIN ) )
357 LEND = MIN( KDM1, N-J2 )
360 $ CALL SROT( LEND, AB( KD-1, LAST+1 ), INCX,
361 $ AB( KD, LAST+1 ), INCX, D( LAST ),
375 IQEND = MAX( IQEND, J2 )
379 $ IQAEND = IQAEND + KD
380 IQAEND = MIN( IQAEND, IQEND )
381 DO 50 J = J1, J2, KD1
384 IQB = MAX( 1, J-IBL )
385 NQ = 1 + IQAEND - IQB
386 IQAEND = MIN( IQAEND+KD, IQEND )
387 CALL SROT( NQ, Q( IQB, J-1 ), 1, Q( IQB, J ),
388 $ 1, D( J ), WORK( J ) )
392 DO 60 J = J1, J2, KD1
393 CALL SROT( N, Q( 1, J-1 ), 1, Q( 1, J ), 1,
394 $ D( J ), WORK( J ) )
400.GT.
IF( J2+KDNN ) THEN
408 DO 70 J = J1, J2, KD1
413 WORK( J+KD ) = WORK( J )*AB( 1, J+KD )
414 AB( 1, J+KD ) = D( J )*AB( 1, J+KD )
425 E( I ) = AB( KD, I+1 )
439 D( I ) = AB( KD1, I )
456 DO 200 K = KDN + 1, 2, -1
465 CALL SLARGV( NR, AB( KD1, J1-KD1 ), INCA,
466 $ WORK( J1 ), KD1, D( J1 ), KD1 )
474.GT.
IF( NR2*KD-1 ) THEN
476 CALL SLARTV( NR, AB( KD1-L, J1-KD1+L ), INCA,
477 $ AB( KD1-L+1, J1-KD1+L ), INCA,
478 $ D( J1 ), WORK( J1 ), KD1 )
481 JEND = J1 + KD1*( NR-1 )
482 DO 140 JINC = J1, JEND, KD1
483 CALL SROT( KDM1, AB( KD, JINC-KD ), INCX,
484 $ AB( KD1, JINC-KD ), INCX,
485 $ D( JINC ), WORK( JINC ) )
492.LE.
IF( KN-I+1 ) THEN
497 CALL SLARTG( AB( K-1, I ), AB( K, I ),
498 $ D( I+K-1 ), WORK( I+K-1 ), TEMP )
503 CALL SROT( K-3, AB( K-2, I+1 ), LDAB-1,
504 $ AB( K-1, I+1 ), LDAB-1, D( I+K-1 ),
515 $ CALL SLAR2V( NR, AB( 1, J1-1 ), AB( 1, J1 ),
516 $ AB( 2, J1-1 ), INCA, D( J1 ),
526.GT.
IF( NR2*KD-1 ) THEN
534 $ CALL SLARTV( NRT, AB( L+2, J1-1 ), INCA,
535 $ AB( L+1, J1 ), INCA, D( J1 ),
539 J1END = J1 + KD1*( NR-2 )
540.GE.
IF( J1ENDJ1 ) THEN
541 DO 160 J1INC = J1, J1END, KD1
542 CALL SROT( KDM1, AB( 3, J1INC-1 ), 1,
543 $ AB( 2, J1INC ), 1, D( J1INC ),
547 LEND = MIN( KDM1, N-J2 )
550 $ CALL SROT( LEND, AB( 3, LAST-1 ), 1,
551 $ AB( 2, LAST ), 1, D( LAST ),
567 IQEND = MAX( IQEND, J2 )
571 $ IQAEND = IQAEND + KD
572 IQAEND = MIN( IQAEND, IQEND )
573 DO 170 J = J1, J2, KD1
576 IQB = MAX( 1, J-IBL )
577 NQ = 1 + IQAEND - IQB
578 IQAEND = MIN( IQAEND+KD, IQEND )
579 CALL SROT( NQ, Q( IQB, J-1 ), 1, Q( IQB, J ),
580 $ 1, D( J ), WORK( J ) )
584 DO 180 J = J1, J2, KD1
585 CALL SROT( N, Q( 1, J-1 ), 1, Q( 1, J ), 1,
586 $ D( J ), WORK( J ) )
591.GT.
IF( J2+KDNN ) THEN
599 DO 190 J = J1, J2, KD1
604 WORK( J+KD ) = WORK( J )*AB( KD1, J )
605 AB( KD1, J ) = D( J )*AB( KD1, J )
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slartg(f, g, c, s, r)
SLARTG generates a plane rotation with real cosine and real sine.
subroutine xerbla(srname, info)
XERBLA
subroutine slar2v(n, x, y, z, incx, c, s, incc)
SLAR2V applies a vector of plane rotations with real cosines and real sines from both sides to a sequ...
subroutine slargv(n, x, incx, y, incy, c, incc)
SLARGV generates a vector of plane rotations with real cosines and real sines.
subroutine slartv(n, x, incx, y, incy, c, s, incc)
SLARTV applies a vector of plane rotations with real cosines and real sines to the elements of a pair...
subroutine ssbtrd(vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)
SSBTRD
subroutine srot(n, sx, incx, sy, incy, c, s)
SROT