161 SUBROUTINE sdrvpo( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
162 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
163 $ RWORK, IWORK, NOUT )
171 INTEGER NMAX, NN, NOUT, NRHS
176 INTEGER IWORK( * ), NVAL( * )
177 REAL A( * ), AFAC( * ), ASAV( * ), B( * ),
178 $ bsav( * ), rwork( * ), s( * ), work( * ),
186 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
188 parameter( ntypes = 9 )
190 parameter( ntests = 6 )
193 LOGICAL EQUIL, NOFACT, PREFAC, ZEROT
194 CHARACTER DIST, EQUED, FACT,
TYPE, UPLO, XTYPE
196 INTEGER I, IEQUED, IFACT, IMAT
198 $ nerrs, nfact, nfail, nimat, nrun, nt
199 REAL , AMAX, ANORM, CNDNUM, RCOND, RCONDC,
203 CHARACTER EQUEDS( 2 ), FACTS( 3 ), UPLOS( 2 )
204 INTEGER ISEED( 4 ), ISEEDY( 4 )
210 EXTERNAL lsame, sget06, slansy
227 COMMON / infoc / infot, nunit, ok, lerr
228 COMMON / srnamc / srnamt
231 DATA iseedy / 1988, 1989, 1990, 1991 /
232 DATA uplos /
'U',
'L' /
233 DATA facts /
'F',
'N', 'e
' /
234 DATA EQUEDS / 'n
', 'y
' /
240 PATH( 1: 1 ) = 'single precision
'
246 ISEED( I ) = ISEEDY( I )
252 $ CALL SERRVX( PATH, NOUT )
260 CALL XLAENV( 2, NBMIN )
272 DO 120 IMAT = 1, NIMAT
276.NOT.
IF( DOTYPE( IMAT ) )
281.GE..AND..LE.
ZEROT = IMAT3 IMAT5
282.AND..LT.
IF( ZEROT NIMAT-2 )
288 UPLO = UPLOS( IUPLO )
293 CALL SLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
297 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
298 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
304 CALL ALAERH( PATH, 'slatms', INFO, 0, UPLO, N, N, -1,
305 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
315.EQ.
ELSE IF( IMAT4 ) THEN
320 IOFF = ( IZERO-1 )*LDA
324.EQ.
IF( IUPLO1 ) THEN
325 DO 20 I = 1, IZERO - 1
335 DO 40 I = 1, IZERO - 1
350 CALL SLACPY( UPLO, N, N, A, LDA, ASAV, LDA )
353 EQUED = EQUEDS( IEQUED )
354.EQ.
IF( IEQUED1 ) THEN
360 DO 90 IFACT = 1, NFACT
361 FACT = FACTS( IFACT )
362 PREFAC = LSAME( FACT, 'f
' )
363 NOFACT = LSAME( FACT, 'n
' )
364 EQUIL = LSAME( FACT, 'e
' )
371.NOT.
ELSE IF( LSAME( FACT, 'n
' ) ) THEN
378 CALL SLACPY( UPLO, N, N, ASAV, LDA, AFAC, LDA )
379.OR..GT.
IF( EQUIL IEQUED1 ) THEN
384 CALL SPOEQU( N, AFAC, LDA, S, SCOND, AMAX,
386.EQ..AND..GT.
IF( INFO0 N0 ) THEN
392 CALL SLAQSY( UPLO, N, AFAC, LDA, S, SCOND,
405 ANORM = SLANSY( '1
', UPLO, N, AFAC, LDA, RWORK )
409 CALL SPOTRF( UPLO, N, AFAC, LDA, INFO )
413 CALL SLACPY( UPLO, N, N, AFAC, LDA, A, LDA )
414 CALL SPOTRI( UPLO, N, A, LDA, INFO )
418 AINVNM = SLANSY( '1
', UPLO, N, A, LDA, RWORK )
419.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
422 RCONDC = ( ONE / ANORM ) / AINVNM
428 CALL SLACPY( UPLO, N, N, ASAV, LDA, A, LDA )
433 CALL SLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
434 $ NRHS, A, LDA, XACT, LDA, B, LDA,
437 CALL SLACPY( 'full
', N, NRHS, B, LDA, BSAV, LDA )
446 CALL SLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
447 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
450 CALL SPOSV( UPLO, N, NRHS, AFAC, LDA, X, LDA,
455.NE.
IF( INFOIZERO ) THEN
456 CALL ALAERH( PATH, 'sposv ', INFO, IZERO,
457 $ UPLO, N, N, -1, -1, NRHS, IMAT,
458 $ NFAIL, NERRS, NOUT )
460.NE.
ELSE IF( INFO0 ) THEN
467 CALL SPOT01( UPLO, N, A, LDA, AFAC, LDA, RWORK,
472 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK,
474 CALL SPOT02( UPLO, N, NRHS, A, LDA, X, LDA,
475 $ WORK, LDA, RWORK, RESULT( 2 ) )
479 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
487.GE.
IF( RESULT( K )THRESH ) THEN
488.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
489 $ CALL ALADHD( NOUT, PATH )
490 WRITE( NOUT, FMT = 9999 )'sposv ', UPLO,
491 $ N, IMAT, K, RESULT( K )
502 $ CALL SLASET( UPLO, N, N, ZERO, ZERO, AFAC, LDA )
503 CALL SLASET( 'full
', N, NRHS, ZERO, ZERO, X, LDA )
504.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
509 CALL SLAQSY( UPLO, N, A, LDA, S, SCOND, AMAX,
517 CALL SPOSVX( FACT, UPLO, N, NRHS, A, LDA, AFAC,
518 $ LDA, EQUED, S, B, LDA, X, LDA, RCOND,
519 $ RWORK, RWORK( NRHS+1 ), WORK, IWORK,
524.NE.
IF( INFOIZERO ) THEN
525 CALL ALAERH( PATH, 'sposvx', INFO, IZERO,
526 $ FACT // UPLO, N, N, -1, -1, NRHS,
527 $ IMAT, NFAIL, NERRS, NOUT )
532.NOT.
IF( PREFAC ) THEN
537 CALL SPOT01( UPLO, N, A, LDA, AFAC, LDA,
538 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) )
546 CALL SLACPY( 'full
', N, NRHS, BSAV, LDA, WORK,
548 CALL SPOT02( UPLO, N, NRHS, ASAV, LDA, X, LDA,
549 $ WORK, LDA, RWORK( 2*NRHS+1 ),
554.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
556 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
557 $ RCONDC, RESULT( 3 ) )
559 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
560 $ ROLDC, RESULT( 3 ) )
566 CALL SPOT05( UPLO, N, NRHS, ASAV, LDA, B, LDA,
567 $ X, LDA, XACT, LDA, RWORK,
568 $ RWORK( NRHS+1 ), RESULT( 4 ) )
576 RESULT( 6 ) = SGET06( RCOND, RCONDC )
582.GE.
IF( RESULT( K )THRESH ) THEN
583.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
584 $ CALL ALADHD( NOUT, PATH )
586 WRITE( NOUT, FMT = 9997 )'sposvx', FACT,
587 $ UPLO, N, EQUED, IMAT, K, RESULT( K )
589 WRITE( NOUT, FMT = 9998 )'sposvx', FACT,
590 $ UPLO, N, IMAT, K, RESULT( K )
604 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
606 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I1,
607 $ ', test(
', I1, ')=
', G12.5 )
608 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n=
', I5,
609 $ ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
610 9997 FORMAT( 1X, A, ', fact=
''', A1, '''''', A1, '''', I5,
611 $ ', 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 xlaenv(ispec, nvalue)
XLAENV
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 spoequ(n, a, lda, s, scond, amax, info)
SPOEQU
subroutine spotri(uplo, n, a, lda, info)
SPOTRI
subroutine spotrf(uplo, n, a, lda, info)
SPOTRF
subroutine sposv(uplo, n, nrhs, a, lda, b, ldb, info)
SPOSV computes the solution to system of linear equations A * X = B for PO matrices
subroutine sposvx(fact, uplo, n, nrhs, a, lda, af, ldaf, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SPOSVX computes the solution to system of linear equations A * X = B for PO matrices
subroutine slaqsy(uplo, n, a, lda, s, scond, amax, equed)
SLAQSY scales a symmetric/Hermitian matrix, using scaling factors computed by spoequ.
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine spot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
SPOT02
subroutine serrvx(path, nunit)
SERRVX
subroutine spot05(uplo, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SPOT05
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4
subroutine spot01(uplo, n, a, lda, afac, ldafac, rwork, resid)
SPOT01
subroutine sdrvpo(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, asav, b, bsav, x, xact, s, work, rwork, iwork, nout)
SDRVPO