164 SUBROUTINE sdrvpp( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
165 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
166 $ RWORK, IWORK, NOUT )
174 INTEGER NMAX, NN, NOUT, NRHS
179 INTEGER IWORK( * ), NVAL( * )
180 REAL A( * ), AFAC( * ), ASAV( * ), B( * ),
181 $ bsav( * ), rwork( * ), s( * ), work( * ),
189 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
191 parameter( ntypes = 9 )
193 parameter( ntests = 6 )
196 LOGICAL EQUIL, NOFACT, PREFAC, ZEROT
197 CHARACTER DIST, EQUED, FACT, PACKIT,
TYPE, UPLO, XTYPE
199 INTEGER I, IEQUED, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
200 $ izero, k, k1, kl, ku, lda, mode, n, nerrs,
201 $ nfact, nfail, nimat, npp, nrun, nt
202 REAL AINVNM, AMAX, ANORM, CNDNUM, RCOND, RCONDC,
206 CHARACTER EQUEDS( 2 ), FACTS( 3 ), PACKS( 2 ), UPLOS( 2 )
207 INTEGER ISEED( 4 ), ISEEDY( 4 )
208 REAL RESULT( NTESTS )
213 EXTERNAL lsame, sget06, slansp
227 COMMON / infoc / infot, nunit, ok, lerr
228 COMMON / srnamc / srnamt
234 DATA iseedy / 1988, 1989, 1990, 1991 /
235 DATA uplos /
'U',
'L' / , facts /
'F',
'N',
'E' / ,
236 $ packs /
'C',
'R' / , equeds /
'N',
'Y' /
242 path( 1: 1 ) =
'Single precision'
248 iseed( i ) = iseedy( i )
254 $
CALL serrvx( path, nout )
268 DO 130 imat = 1, nimat
272 IF( .NOT.dotype( imat ) )
277 zerot = imat.GE.3 .AND. imat.LE.5
278 IF( zerot .AND. n.LT.imat-2 )
284 uplo = uplos( iuplo )
285 packit = packs( iuplo )
290 CALL slatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
292 rcondc = one / cndnum
295 CALL slatms( n, n, dist, iseed,
TYPE, rwork, mode,
296 $ cndnum, anorm, kl, ku, packit, a, lda, work,
302 CALL alaerh( path,
'SLATMS', info, 0, uplo, n, n, -1,
303 $ -1, -1, imat, nfail, nerrs, nout )
313 ELSE IF( imat.EQ.4 )
THEN
321 IF( iuplo.EQ.1 )
THEN
322 ioff = ( izero-1 )*izero / 2
323 DO 20 i = 1, izero - 1
333 DO 40 i = 1, izero - 1
348 CALL scopy( npp, a, 1, asav, 1 )
351 equed = equeds( iequed )
352 IF( iequed.EQ.1 )
THEN
358 DO 100 ifact = 1, nfact
359 fact = facts( ifact )
360 prefac = lsame( fact,
'F' )
361 nofact = lsame( fact,
'N' )
362 equil = lsame( fact,
'E' )
369 ELSE IF( .NOT.lsame( fact,
'N' ) )
THEN
376 CALL scopy( npp, asav, 1, afac, 1 )
377 IF( equil .OR. iequed.GT.1 )
THEN
382 CALL sppequ( uplo, n, afac, s, scond, amax,
384 IF( info.EQ.0 .AND. n.GT.0 )
THEN
390 CALL slaqsp( uplo, n, afac, s, scond,
403 anorm = slansp(
'1', uplo, n, afac, rwork )
407 CALL spptrf( uplo, n, afac, info )
411 CALL scopy( npp, afac, 1, a, 1 )
412 CALL spptri( uplo, n, a, info )
416 ainvnm = slansp(
'1', uplo, n, a, rwork )
417 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
420 rcondc = ( one / anorm ) / ainvnm
426 CALL scopy( npp, asav, 1, a, 1 )
431 CALL slarhs( path, xtype, uplo,
' ', n, n, kl, ku,
432 $ nrhs, a, lda, xact, lda, b, lda,
435 CALL slacpy( 'full
', N, NRHS, B, LDA, BSAV, LDA )
444 CALL SCOPY( NPP, A, 1, AFAC, 1 )
445 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
448 CALL SPPSV( UPLO, N, NRHS, AFAC, X, LDA, INFO )
452.NE.
IF( INFOIZERO ) THEN
453 CALL ALAERH( PATH, 'sppsv ', INFO, IZERO,
454 $ UPLO, N, N, -1, -1, NRHS, IMAT,
455 $ NFAIL, NERRS, NOUT )
457.NE.
ELSE IF( INFO0 ) THEN
464 CALL SPPT01( UPLO, N, A, AFAC, RWORK,
469 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK,
471 CALL SPPT02( UPLO, N, NRHS, A, X, LDA, WORK,
472 $ LDA, RWORK, RESULT( 2 ) )
476 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
484.GE.
IF( RESULT( K )THRESH ) THEN
485.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
486 $ CALL ALADHD( NOUT, PATH )
487 WRITE( NOUT, FMT = 9999 )'sppsv ', UPLO,
488 $ N, IMAT, K, RESULT( K )
498.NOT..AND..GT.
IF( PREFAC NPP0 )
499 $ CALL SLASET( 'full
', NPP, 1, ZERO, ZERO, AFAC,
501 CALL SLASET( 'full
', N, NRHS, ZERO, ZERO, X, LDA )
502.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
507 CALL SLAQSP( UPLO, N, A, S, SCOND, AMAX, EQUED )
514 CALL SPPSVX( FACT, UPLO, N, NRHS, A, AFAC, EQUED,
515 $ S, B, LDA, X, LDA, RCOND, RWORK,
516 $ RWORK( NRHS+1 ), WORK, IWORK, INFO )
520.NE.
IF( INFOIZERO ) THEN
521 CALL ALAERH( PATH, 'sppsvx', INFO, IZERO,
522 $ FACT // UPLO, N, N, -1, -1, NRHS,
523 $ IMAT, NFAIL, NERRS, NOUT )
528.NOT.
IF( PREFAC ) THEN
533 CALL SPPT01( UPLO, N, A, AFAC,
534 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) )
542 CALL SLACPY( 'full
', N, NRHS, BSAV, LDA, WORK,
544 CALL SPPT02( UPLO, N, NRHS, ASAV, X, LDA, WORK,
545 $ LDA, RWORK( 2*NRHS+1 ),
550.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
552 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
553 $ RCONDC, RESULT( 3 ) )
555 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
556 $ ROLDC, RESULT( 3 ) )
562 CALL SPPT05( UPLO, N, NRHS, ASAV, B, LDA, X,
563 $ LDA, XACT, LDA, RWORK,
564 $ RWORK( NRHS+1 ), RESULT( 4 ) )
572 RESULT( 6 ) = SGET06( RCOND, RCONDC )
578.GE.
IF( RESULT( K )THRESH ) THEN
579.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
580 $ CALL ALADHD( NOUT, PATH )
582 WRITE( NOUT, FMT = 9997 )'sppsvx', FACT,
583 $ UPLO, N, EQUED, IMAT, K, RESULT( K )
585 WRITE( NOUT, FMT = 9998 )'sppsvx', FACT,
586 $ UPLO, N, IMAT, K, RESULT( K )
601 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
603 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =', i5,
', type ', i1,
604 $
', test(', i1,
')=', g12.5 )
605 9998
FORMAT( 1x, a,
', FACT=''', a1,
''', UPLO=''', a1,
''', N='
606 $
', type ', i1,
', test(', i1,
')=', g12.5 )
607 9997
FORMAT( 1x, a,
', FACT=''', a1,
''', UPLO=''', a1,
''', N=', i5,
608 $
', EQUED=''', a1,
''', type ', i1,
', test(', i1,
')=',
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 slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine slaqsp(uplo, n, ap, s, scond, amax, equed)
SLAQSP scales a symmetric/Hermitian matrix in packed storage, using scaling factors computed by sppeq...
subroutine spptrf(uplo, n, ap, info)
SPPTRF
subroutine spptri(uplo, n, ap, info)
SPPTRI
subroutine sppequ(uplo, n, ap, s, scond, amax, info)
SPPEQU
subroutine sppsvx(fact, uplo, n, nrhs, ap, afp, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SPPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine sppsv(uplo, n, nrhs, ap, b, ldb, info)
SPPSV computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine serrvx(path, nunit)
SERRVX
subroutine sppt05(uplo, n, nrhs, ap, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SPPT05
subroutine sdrvpp(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, asav, b, bsav, x, xact, s, work, rwork, iwork, nout)
SDRVPP
subroutine sppt01(uplo, n, a, afac, rwork, resid)
SPPT01
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine sppt02(uplo, n, nrhs, a, x, ldx, b, ldb, rwork, resid)
SPPT02
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4