153 SUBROUTINE sdrvsy( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
154 $ A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK,
163 INTEGER NMAX, NN, NOUT, NRHS
168 INTEGER IWORK( * ), NVAL( * )
169 REAL A( * ), AFAC( * ), AINV( * ), B( * ),
170 $ rwork( * ), work( * ), x( * ), xact( * )
177 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
178 INTEGER NTYPES, NTESTS
179 parameter( ntypes = 10, ntests = 6 )
181 parameter( nfact = 2 )
185 CHARACTER , EQUED, FACT,
TYPE, UPLO, XTYPE
187 INTEGER I, I1, I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
188 $ izero, j, k, k1, kl, ku, lda, lwork, mode, n,
189 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt,
191 REAL AINVNM, ANORM, CNDNUM, RCOND, RCONDC,
195 CHARACTER FACTS( NFACT ), UPLOS( 2 )
196 INTEGER ISEED( 4 ), ISEEDY( 4 )
197 REAL RESULT( NTESTS ), BERR( NRHS ),
198 $ errbnds_n( nrhs, 3 ), errbnds_c( nrhs, 3 )
202 EXTERNAL SGET06, SLANSY
216 COMMON / infoc / infot, nunit, ok, lerr
217 COMMON / srnamc / srnamt
223 DATA iseedy / 1988, 1989, 1990, 1991 /
224 DATA uplos /
'U', 'l
' / , FACTS / 'f
', 'n
' /
230 PATH( 1: 1 ) = 'single precision
'
236 ISEED( I ) = ISEEDY( I )
238 LWORK = MAX( 2*NMAX, NMAX*NRHS )
243 $ CALL SERRVX( PATH, NOUT )
251 CALL XLAENV( 2, NBMIN )
263 DO 170 IMAT = 1, NIMAT
267.NOT.
IF( DOTYPE( IMAT ) )
272.GE..AND..LE.
ZEROT = IMAT3 IMAT6
273.AND..LT.
IF( ZEROT NIMAT-2 )
279 UPLO = UPLOS( IUPLO )
284 CALL SLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
288 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
289 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
295 CALL ALAERH( PATH, 'slatms', INFO, 0, UPLO, N, N, -1,
296 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
306.EQ.
ELSE IF( IMAT4 ) THEN
316.EQ.
IF( IUPLO1 ) THEN
317 IOFF = ( IZERO-1 )*LDA
318 DO 20 I = 1, IZERO - 1
328 DO 40 I = 1, IZERO - 1
339.EQ.
IF( IUPLO1 ) THEN
367 DO 150 IFACT = 1, NFACT
371 FACT = FACTS( IFACT )
381.EQ.
ELSE IF( IFACT1 ) THEN
385 ANORM = SLANSY( '1
', UPLO, N, A, LDA, RWORK )
389 CALL SLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
390 CALL SSYTRF( UPLO, N, AFAC, LDA, IWORK, WORK,
395 CALL SLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
396 LWORK = (N+NB+1)*(NB+3)
397 CALL SSYTRI2( UPLO, N, AINV, LDA, IWORK, WORK,
399 AINVNM = SLANSY( '1
', UPLO, N, AINV, LDA, RWORK )
403.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
406 RCONDC = ( ONE / ANORM ) / AINVNM
413 CALL SLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
414 $ NRHS, A, LDA, XACT, LDA, B, LDA, ISEED,
420.EQ.
IF( IFACT2 ) THEN
421 CALL SLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
422 CALL SLACPY( 'full', n, nrhs, b, lda, x, lda
427 CALL ssysv( uplo, n, nrhs, afac, lda, iwork, x,
428 $ lda, work, lwork, info )
436 IF( iwork( k ).LT.0 )
THEN
437 IF( iwork( k ).NE.-k )
THEN
441 ELSE IF( iwork( k ).NE.k )
THEN
450 CALL alaerh( path,
'SSYSV ', info, k, uplo, n,
451 $ n, -1, -1, nrhs, imat, nfail,
454 ELSE IF( info.NE.0 )
THEN
461 CALL ssyt01( uplo, n, a, lda, afac, lda, iwork,
462 $ ainv, lda, rwork, result( 1 ) )
466 CALL slacpy(
'Full', n, nrhs, b, lda, work, lda )
467 CALL spot02( uplo, n, nrhs, a, lda, x, lda, work,
468 $ lda, rwork, result( 2 ) )
472 CALL sget04( n, nrhs, x, lda, xact, lda, rcondc,
480 IF( result( k ).GE.thresh )
THEN
481 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
482 $
CALL aladhd( nout, path )
483 WRITE( nout, fmt = 9999 )
'SSYSV ', uplo, n,
484 $ imat, k, result( k )
495 $
CALL slaset( uplo, n, n, zero, zero, afac, lda )
502 CALL ssysvx( fact, uplo, n, nrhs, a, lda, afac, lda,
503 $ iwork, b, lda, x, lda, rcond, rwork,
504 $ rwork( nrhs+1 ), work, lwork,
505 $ iwork( n+1 ), info )
513 IF( iwork( k ).LT.0 )
THEN
514 IF( iwork( k ).NE.-k )
THEN
518 ELSE IF( iwork( k ).NE.k )
THEN
527 CALL alaerh( path,
'SSYSVX', info, k, fact // uplo,
528 $ n, n, -1, -1, nrhs, imat, nfail,
534 IF( ifact.GE.2 )
THEN
539 CALL ssyt01( uplo, n, a, lda, afac, lda, iwork,
540 $ ainv, lda, rwork( 2*nrhs+1 ),
549 CALL slacpy(
'Full', n, nrhs, b, lda, work, lda )
550 CALL spot02( uplo, n, nrhs, a, lda, x, lda, work,
551 $ lda, rwork( 2*nrhs+1 ), result( 2 ) )
555 CALL sget04( n, nrhs, x, lda, xact, lda, rcondc,
560 CALL spot05( uplo, n, nrhs, a, lda, b, lda, x, lda,
561 $ xact, lda, rwork, rwork( nrhs+1 ),
570 result( 6 ) = sget06( rcond, rcondc )
576 IF( result( k ).GE.thresh )
THEN
577 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
578 $
CALL aladhd( nout, path )
579 WRITE( nout, fmt = 9998 )
'SSYSVX', fact, uplo,
580 $ n, imat, k, result( k )
591 $
CALL slaset( uplo, n, n, zero, zero, afac, lda )
592 CALL slaset(
'Full', n, nrhs, zero, zero, x, lda )
600 CALL ssysvxx( fact, uplo, n, nrhs, a, lda, afac,
601 $ lda, iwork, equed, work( n+1 ), b, lda, x,
602 $ lda, rcond, rpvgrw_svxx, berr, n_err_bnds,
603 $ errbnds_n, errbnds_c, 0, zero, work,
604 $ iwork( n+1 ), info )
612 IF( iwork( k ).LT.0 )
THEN
613 IF( iwork( k ).NE.-k )
THEN
617 ELSE IF( iwork( k ).NE.k )
THEN
625 IF( info.NE.k .AND. info.LE.n )
THEN
626 CALL alaerh( path,
'SSYSVXX', info, k,
627 $ fact // uplo, n, n, -1, -1, nrhs, imat, nfail,
633 IF( ifact.GE.2 )
THEN
638 CALL ssyt01( uplo, n, a, lda, afac, lda, iwork,
649 CALL spot02( uplo, n, nrhs, a, lda, x
650 $ lda, rwork( 2*nrhs+1 ), result( 2 ) )
654 CALL sget04( n, nrhs, x, lda, xact, lda, rcondc,
659 CALL spot05( uplo, n, nrhs, a, lda, b, lda, x, lda,
660 $ xact, lda, rwork, rwork( nrhs+1 ),
669 result( 6 ) = sget06( rcond, rcondc )
675 IF( result( k ).GE.thresh )
THEN
676 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
677 $
CALL aladhd( nout, path )
678 WRITE( nout, fmt = 9998 )
'SSYSVXX',
679 $ fact, uplo, n, imat, k,
694 CALL alasvm( path, nout, nfail, nrun, nerrs )
701 9999
FORMAT( 1x, a,
', UPLO=''', a1,
''', N =', i5,
', type ', i2,
702 $ ', test
', I2, ', ratio =
', G12.5 )
703 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n =
', I5,
704 $ ',
type ', I2, ', test
', I2, ', ratio =
', G12.5 )
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 ssytri2(uplo, n, a, lda, ipiv, work, lwork, info)
SSYTRI2
subroutine ssytrf(uplo, n, a, lda, ipiv, work, lwork, info)
SSYTRF
subroutine ssysv(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
SSYSV computes the solution to system of linear equations A * X = B for SY matrices
subroutine ssysvxx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info)
SSYSVXX
subroutine ssysvx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, lwork, iwork, info)
SSYSVX computes the solution to system of linear equations A * X = B for SY matrices
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 sdrvsy(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
SDRVSY
subroutine sebchvxx(thresh, path)
SEBCHVXX
subroutine ssyt01(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
SSYT01
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