153 SUBROUTINE sdrvsy_rk( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
154 $ NMAX, A, AFAC, E, AINV, B, X, XACT, WORK,
155 $ RWORK, IWORK, NOUT )
163 INTEGER NMAX, NN, NOUT, NRHS
168 INTEGER IWORK( * ), NVAL( * )
169 REAL A( * ), AFAC( * ), AINV( * ), B( * ), E( * ),
170 $ rwork( * ), work( * ), x( * ), xact( * )
177 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
178 INTEGER NTYPES, NTESTS
179 parameter( ntypes = 10, ntests = 3 )
181 parameter( nfact = 2 )
185 CHARACTER DIST, FACT,
TYPE, UPLO, XTYPE
186 CHARACTER*3 PATH, MATPATH
187 INTEGER I, I1, I2, IFACT, , IN, INFO, IOFF, IUPLO,
188 $ izero, j, k, kl, ku, lda, lwork, mode, n,
189 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt
190 REAL AINVNM, ANORM, CNDNUM, RCONDC
193 CHARACTER FACTS( NFACT ), UPLOS( 2 )
194 INTEGER ISEED( 4 ), ISEEDY( 4 )
195 REAL RESULT( NTESTS )
212 COMMON / infoc / infot, nunit, ok, lerr
213 COMMON / srnamc / srnamt
219 DATA iseedy / 1988, 1989, 1990, 1991 /
220 DATA uplos /
'U',
'L' / , facts /
'F',
'N' /
228 path( 1: 1 ) =
'Single precision'
233 matpath( 1: 1 ) =
'Single precision'
234 matpath( 2: 3 ) =
'SY'
240 iseed( i ) = iseedy( i )
242 lwork =
max( 2*nmax, nmax*nrhs )
247 $
CALL serrvx( path, nout )
268 DO 170 imat = 1, nimat
272 IF( .NOT.dotype( imat ) )
277 zerot = imat.GE.3 .AND. imat.LE.6
278 IF( zerot .AND. n.LT.imat-2 )
284 uplo = uplos( iuplo )
291 CALL slatb4( matpath, imat, n, n,
TYPE, kl, ku, anorm,
292 $ mode, cndnum, dist )
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 )
318 ELSE IF( imat.EQ.4 )
THEN
328 IF( iuplo.EQ.1 )
THEN
329 ioff = ( izero-1 )*lda
330 DO 20 i = 1, izero - 1
340 DO 40 i = 1, izero - 1
351 IF( iuplo.EQ.1 )
THEN
381 DO 150 ifact = 1, nfact
385 fact = facts( ifact )
394 ELSE IF( ifact.EQ.1 )
THEN
398 anorm = slansy(
'1', uplo, n, a, lda, rwork )
402 CALL slacpy( uplo, n, n, a, lda, afac, lda )
403 CALL ssytrf_rk( uplo, n, afac, lda, e, iwork, work,
408 CALL slacpy( uplo, n, n, afac, lda, ainv, lda )
409 lwork = (n+nb+1)*(nb+3)
414 CALL ssytri_3( uplo, n, ainv, lda, e, iwork,
415 $ work, lwork, info )
416 ainvnm = slansy(
'1', uplo, n, ainv, lda, rwork )
420 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
423 rcondc = ( one / anorm ) / ainvnm
430 CALL slarhs( matpath, xtype, uplo,
' ', n, n, kl, ku,
431 $ nrhs, a, lda, xact, lda, b, lda, iseed,
437.EQ.
IF( IFACT2 ) THEN
438 CALL SLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
439 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
445 CALL SSYSV_RK( UPLO, N, NRHS, AFAC, LDA, E, IWORK,
446 $ X, LDA, WORK, LWORK, INFO )
454.LT.
IF( IWORK( K )0 ) THEN
455.NE.
IF( IWORK( K )-K ) THEN
459.NE.
ELSE IF( IWORK( K )K ) THEN
468 CALL ALAERH( PATH, 'ssysv_rk', INFO, K, UPLO,
469 $ N, N, -1, -1, NRHS, IMAT, NFAIL,
472.NE.
ELSE IF( INFO0 ) THEN
479 CALL SSYT01_3( UPLO, N, A, LDA, AFAC, LDA, E,
480 $ IWORK, AINV, LDA, RWORK,
485 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
486 CALL SPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
487 $ LDA, RWORK, RESULT( 2 ) )
492 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
500.GE.
IF( RESULT( K )THRESH ) THEN
501.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
502 $ CALL ALADHD( NOUT, PATH )
503 WRITE( NOUT, FMT = 9999 )'ssysv_rk', UPLO,
504 $ N, IMAT, K, RESULT( K )
520 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
522 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I2,
523 $ ', test
', I2, ', ratio =
', G12.5 )
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 sdrvsy_rk(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, e, ainv, b, x, xact, work, rwork, iwork, nout)
SDRVSY_RK
subroutine ssysv_rk(uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info)
SSYSV_RK computes the solution to system of linear equations A * X = B for SY matrices