225 SUBROUTINE ssbgvd( JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W,
226 $ Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO )
234 INTEGER INFO, KA, KB, LDAB, LDBB, LDZ, LIWORK, LWORK, N
238 REAL AB( ldab, * ), BB( ldbb, * ), W( * ),
239 $ work( * ), z( ldz, * )
246 parameter( one = 1.0e+0, zero = 0.0e+0 )
249 LOGICAL LQUERY, UPPER, WANTZ
251 INTEGER IINFO, INDE, INDWK2, INDWRK, LIWMIN, LLWRK2,
266 wantz = lsame( jobz,
'V' )
267 upper = lsame( uplo,
'U' )
268 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
274 ELSE IF( wantz )
THEN 276 lwmin = 1 + 5*n + 2*n**2
282 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 284 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 286 ELSE IF( n.LT.0 )
THEN 288 ELSE IF( ka.LT.0 )
THEN 290 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN 292 ELSE IF( ldab.LT.ka+1 )
THEN 294 ELSE IF( ldbb.LT.kb+1 )
THEN 296 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 304 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 306 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 312 CALL xerbla(
'SSBGVD', -info )
314 ELSE IF( lquery )
THEN 325 CALL spbstf( uplo, n, kb, bb, ldbb, info )
335 indwk2 = indwrk + n*n
336 llwrk2 = lwork - indwk2 + 1
337 CALL ssbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, z, ldz,
347 CALL ssbtrd( vect, uplo, n, ka, ab, ldab, w, work( inde ), z, ldz,
348 $ work( indwrk ), iinfo )
352 IF( .NOT.wantz )
THEN 353 CALL ssterf( n, w, work( inde ), info )
355 CALL sstedc(
'I', n, w, work( inde ), work( indwrk ), n,
356 $ work( indwk2 ), llwrk2, iwork, liwork, info )
357 CALL sgemm(
'N',
'N', n, n, n, one, z, ldz, work( indwrk ), n,
358 $ zero, work( indwk2 ), n )
359 CALL slacpy(
'A', n, n, work( indwk2 ), n, z, ldz )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine spbstf(UPLO, N, KD, AB, LDAB, INFO)
SPBSTF
subroutine sstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
SSTEDC
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine ssbtrd(VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, INFO)
SSBTRD
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine ssbgst(VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, X, LDX, WORK, INFO)
SSBGST
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine ssbgvd(JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
SSBGVD