202 SUBROUTINE sspgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,
203 $ LWORK, IWORK, LIWORK, INFO )
211 INTEGER INFO, ITYPE, LDZ, LIWORK, LWORK, N
215 REAL AP( * ), BP( * ), W( * ), WORK( * ),
222 LOGICAL LQUERY, UPPER, WANTZ
224 INTEGER J, LIWMIN, LWMIN, NEIG
229 EXTERNAL lsame, sroundup_lwork
241 wantz = lsame( jobz,
'V' )
242 upper = lsame( uplo,
'U' )
243 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
246 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
248 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
250 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
252 ELSE IF( n.LT.0 )
THEN
254 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
265 lwmin = 1 + 6*n + 2*n**2
271 work( 1 ) = sroundup_lwork(lwmin)
273 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
275 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
281 CALL xerbla(
'SSPGVD', -info )
283 ELSE IF( lquery )
THEN
294 CALL spptrf( uplo, n, bp, info )
302 CALL sspgst( itype, uplo, n, ap, bp, info )
303 CALL sspevd( jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork,
305 lwmin = int( max( real( lwmin ), real( work( 1 ) ) ) )
306 liwmin = int( max( real( liwmin ), real( iwork( 1 ) ) ) )
315 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
327 CALL stpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
331 ELSE IF( itype.EQ.3 )
THEN
343 CALL stpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
349 work( 1 ) = sroundup_lwork(lwmin)
subroutine xerbla(srname, info)
subroutine sspevd(jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info)
SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sspgst(itype, uplo, n, ap, bp, info)
SSPGST
subroutine sspgvd(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, iwork, liwork, info)
SSPGVD
subroutine spptrf(uplo, n, ap, info)
SPPTRF
subroutine stpmv(uplo, trans, diag, n, ap, x, incx)
STPMV
subroutine stpsv(uplo, trans, diag, n, ap, x, incx)
STPSV