200 SUBROUTINE sspgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ,
202 $ LWORK, IWORK, LIWORK, INFO )
210 INTEGER INFO, ITYPE, LDZ, LIWORK, LWORK, N
214 REAL AP( * ), BP( * ), W( * ), WORK( * ),
221 LOGICAL LQUERY, UPPER, WANTZ
223 INTEGER J, LIWMIN, LWMIN, NEIG
228 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 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 sspgvd(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, iwork, liwork, info)
SSPGVD
subroutine stpmv(uplo, trans, diag, n, ap, x, incx)
STPMV
subroutine stpsv(uplo, trans, diag, n, ap, x, incx)
STPSV