150 $ NMAX, A, AFAC, AINV, B, X, XACT, WORK,
151 $ RWORK, IWORK, NOUT )
159 INTEGER NMAX, NN, NOUT, NRHS
160 DOUBLE PRECISION THRESH
164 INTEGER IWORK( * ), NVAL( * )
165 DOUBLE PRECISION A( * ), AFAC( * ), AINV( * ), B( * ),
172 DOUBLE PRECISION ONE, ZERO
173 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
174 INTEGER NTYPES, NTESTS
175 parameter( ntypes = 10, ntests = 3 )
177 parameter( nfact = 2 )
181 CHARACTER DIST, FACT,
TYPE, UPLO, XTYPE
182 CHARACTER*3 PATH, MATPATH
183 INTEGER I, I1, I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
184 $ izero, j, k, kl, ku, lda, lwork, mode, n,
185 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt
186 DOUBLE PRECISION AINVNM, ANORM, CNDNUM, RCONDC
189 CHARACTER FACTS( NFACT ), UPLOS( 2 )
190 INTEGER ( 4 ), ISEEDY( 4 )
191 DOUBLE PRECISION RESULT( NTESTS )
194 DOUBLE PRECISION DLANSY
210 COMMON / infoc / infot, nunit, ok, lerr
211 COMMON / srnamc / srnamt
217 DATA iseedy / 1988, 1989, 1990, 1991 /
218 DATA uplos /
'U',
'L' / , facts /
'F',
'N' /
226 path( 1: 1 ) =
'Double precision'
231 matpath( 1: 1 ) =
'Double precision'
232 matpath( 2: 3 ) =
'SY'
238 iseed( i ) = iseedy( i )
240 lwork =
max( 2*nmax, nmax*nrhs )
245 $
CALL derrvx( path, nout )
266 DO 170 imat = 1, nimat
270 IF( .NOT.dotype( imat ) )
275 zerot = imat.GE.3 .AND. imat.LE.6
276 IF( zerot .AND. n.LT.imat-2 )
282 uplo = uplos( iuplo )
289 CALL dlatb4( matpath, imat, n, n,
TYPE, kl, ku, ,
290 $ mode, cndnum, dist )
295 CALL dlatms( n, n, dist, iseed,
TYPE, rwork, mode,
296 $ cndnum, anorm, kl, ku, uplo, a, lda, work,
302 CALL alaerh( path,
'DLATMS', info, 0, uplo, n, n, -1,
303 $ -1, -1, imat, nfail, nerrs, nout )
316 ELSE IF( imat.EQ.4 )
THEN
326 IF( iuplo.EQ.1 )
THEN
327 ioff = ( izero-1 )*lda
328 DO 20 i = 1, izero - 1
338 DO 40 i = 1, izero - 1
349 IF( iuplo.EQ.1 )
THEN
379 DO 150 ifact = 1, nfact
383 fact = facts( ifact )
393 ELSE IF( ifact.EQ.1 )
THEN
397 anorm = dlansy(
'1', uplo, n, a, lda, rwork )
401 CALL dlacpy( uplo, n, n, a, lda, afac, lda )
407 CALL dlacpy( uplo, n, n, afac, lda, ainv, lda )
408 lwork = (n+nb+1)*(nb+3)
411 ainvnm = dlansy(
'1', uplo, n, ainv, lda, rwork )
415 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
418 rcondc = ( one / anorm ) / ainvnm
425 CALL dlarhs( matpath, xtype, uplo,
' ', n, n, kl, ku,
426 $ nrhs, a, lda, xact, lda, b, lda, iseed,
432 IF( ifact.EQ.2 )
THEN
433 CALL dlacpy( uplo, n, n, a, lda, afac, lda )
434 CALL dlacpy( 'full
', N, NRHS, B, LDA, X, LDA )
440 CALL DSYSV_ROOK( UPLO, N, NRHS, AFAC, LDA, IWORK,
441 $ X, LDA, WORK, LWORK, INFO )
449.LT.
IF( IWORK( K )0 ) THEN
450.NE.
IF( IWORK( K )-K ) THEN
454.NE.
ELSE IF( IWORK( K )K ) THEN
463 CALL ALAERH( PATH, 'dsysv_rook', INFO, K, UPLO,
464 $ N, N, -1, -1, NRHS, IMAT, NFAIL,
467.NE.
ELSE IF( INFO0 ) THEN
474 CALL DSYT01_ROOK( UPLO, N, A, LDA, AFAC, LDA,
475 $ IWORK, AINV, LDA, RWORK,
480 CALL DLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
481 CALL DPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
482 $ LDA, RWORK, RESULT( 2 ) )
487 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
495.GE.
IF( RESULT( K )THRESH ) THEN
496.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
497 $ CALL ALADHD( NOUT, PATH )
499 $ N, IMAT, K, RESULT( K )
515 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
517 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I2,
518 $ ', test
', I2, ', ratio =
', G12.5 )
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
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 dsytrf_rook(uplo, n, a, lda, ipiv, work, lwork, info)
DSYTRF_ROOK
subroutine dsytri_rook(uplo, n, a, lda, ipiv, work, info)
DSYTRI_ROOK
subroutine dsysv_rook(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
DSYSV_ROOK computes the solution to system of linear equations A * X = B for SY matrices
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
subroutine ddrvsy_rook(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
DDRVSY_ROOK
subroutine derrvx(path, nunit)
DERRVX
subroutine dlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
DLATB4
subroutine dpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
DPOT02
subroutine dpot05(uplo, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
DPOT05
subroutine dsyt01_rook(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
DSYT01_ROOK
subroutine dget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
DGET04
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS