169 SUBROUTINE dchkpb( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
170 $ THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
171 $ XACT, WORK, RWORK, IWORK, NOUT )
179 INTEGER , NN, NNB, NNS, NOUT
180 DOUBLE PRECISION THRESH
184 INTEGER ( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
185 DOUBLE PRECISION A( * ), AFAC( * ), AINV( * ), B( * ),
192 DOUBLE PRECISION , ZERO
193 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
194 INTEGER NTYPES, NTESTS
195 parameter( ntypes = 8, ntests = 7 )
201 CHARACTER , PACKIT,
TYPE, UPLO, XTYPE
203 INTEGER I, I1, I2, IKD, IMAT, IN, INB, INFO, IOFF,
204 $ irhs, iuplo, iw, izero, k, kd, kl, koff, ku,
205 $ lda, ldab, mode, n, nb, nerrs, nfail, nimat,
207 DOUBLE PRECISION AINVNM, ANORM, CNDNUM, RCOND, RCONDC
210 INTEGER ISEED( 4 ), ISEEDY( 4 ), KDVAL( NBW )
211 DOUBLE PRECISION RESULT( NTESTS )
214 DOUBLE PRECISION DGET06, DLANGE, DLANSB
215 EXTERNAL DGET06, DLANGE, DLANSB
232 COMMON / infoc / infot, nunit, ok, lerr
233 COMMON / srnamc / srnamt
236 DATA iseedy / 1988, 1989, 1990, 1991 /
242 path( 1: 1 ) =
'Double precision'
248 iseed( i ) = iseedy( i )
254 $
CALL derrpo( path, nout )
268 NKD = MAX( 1, MIN( N, 4 ) )
273 KDVAL( 2 ) = N + ( N+1 ) / 4
274 KDVAL( 3 ) = ( 3*N-1 ) / 4
275 KDVAL( 4 ) = ( N+1 ) / 4
290.EQ.
IF( IUPLO1 ) THEN
292 KOFF = MAX( 1, KD+2-N )
299 DO 60 IMAT = 1, NIMAT
303.NOT.
IF( DOTYPE( IMAT ) )
308.GE..AND..LE.
ZEROT = IMAT2 IMAT4
309.AND..LT.
IF( ZEROT NIMAT-1 )
312.NOT..OR..NOT.
IF( ZEROT DOTYPE( 1 ) ) THEN
317 CALL DLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM,
318 $ MODE, CNDNUM, DIST )
321 CALL DLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
322 $ CNDNUM, ANORM, KD, KD, PACKIT,
323 $ A( KOFF ), LDAB, WORK, INFO )
328 CALL ALAERH( PATH, 'dlatms', INFO, 0, UPLO, N,
329 $ N, KD, KD, -1, IMAT, NFAIL, NERRS,
333.GT.
ELSE IF( IZERO0 ) THEN
339.EQ.
IF( IUPLO1 ) THEN
340 IOFF = ( IZERO-1 )*LDAB + KD + 1
341 CALL DCOPY( IZERO-I1, WORK( IW ), 1,
342 $ A( IOFF-IZERO+I1 ), 1 )
344 CALL DCOPY( I2-IZERO+1, WORK( IW ), 1,
345 $ A( IOFF ), MAX( LDAB-1, 1 ) )
347 IOFF = ( I1-1 )*LDAB + 1
348 CALL DCOPY( IZERO-I1, WORK( IW ), 1,
349 $ A( IOFF+IZERO-I1 ),
351 IOFF = ( IZERO-1 )*LDAB + 1
353 CALL DCOPY( I2-IZERO+1, WORK( IW ), 1,
365.EQ.
ELSE IF( IMAT3 ) THEN
374 DO 20 I = 1, MIN( 2*KD+1, N )
378 I1 = MAX( IZERO-KD, 1 )
379 I2 = MIN( IZERO+KD, N )
381.EQ.
IF( IUPLO1 ) THEN
382 IOFF = ( IZERO-1 )*LDAB + KD + 1
383 CALL DSWAP( IZERO-I1, A( IOFF-IZERO+I1 ), 1,
386 CALL DSWAP( I2-IZERO+1, A( IOFF ),
387 $ MAX( LDAB-1, 1 ), WORK( IW ), 1 )
389 IOFF = ( I1-1 )*LDAB + 1
390 CALL DSWAP( IZERO-I1, A( IOFF+IZERO-I1 ),
391 $ MAX( LDAB-1, 1 ), WORK( IW ), 1 )
392 IOFF = ( IZERO-1 )*LDAB + 1
394 CALL DSWAP( I2-IZERO+1, A( IOFF ), 1,
408 CALL DLACPY( 'full
', KD+1, N, A, LDAB, AFAC, LDAB )
410 CALL DPBTRF( UPLO, N, KD, AFAC, LDAB, INFO )
414.NE.
IF( INFOIZERO ) THEN
415 CALL ALAERH( PATH, 'dpbtrf', INFO, IZERO, UPLO,
416 $ N, N, KD, KD, NB, IMAT, NFAIL,
430 CALL DLACPY( 'full
', KD+1, N, AFAC, LDAB, AINV,
432 CALL DPBT01( UPLO, N, KD, A, LDAB, AINV, LDAB,
433 $ RWORK, RESULT( 1 ) )
437.GE.
IF( RESULT( 1 )THRESH ) THEN
438.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
439 $ CALL ALAHD( NOUT, PATH )
440 WRITE( NOUT, FMT = 9999 )UPLO, N, KD, NB, IMAT,
454 CALL DLASET( 'full
', N, N, ZERO, ONE, AINV, LDA )
456 CALL DPBTRS( UPLO, N, KD, N, AFAC, LDAB, AINV, LDA,
461 ANORM = DLANSB( '1
', UPLO, N, KD, A, LDAB, RWORK )
462 AINVNM = DLANGE( '1
', N, N, AINV, LDA, RWORK )
463.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
466 RCONDC = ( ONE / ANORM ) / AINVNM
476 CALL DLARHS( PATH, XTYPE, UPLO, ' ', N, N, KD,
477 $ KD, NRHS, A, LDAB, XACT, LDA, B,
479 CALL DLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
482 CALL DPBTRS( UPLO, N, KD, NRHS, AFAC, LDAB, X,
488 $ CALL ALAERH( PATH, 'dpbtrs', INFO, 0, UPLO,
489 $ N, N, KD, KD, NRHS, IMAT, NFAIL,
492 CALL DLACPY( 'full
', N, NRHS, B, LDA, WORK,
494 CALL DPBT02( UPLO, N, KD, NRHS, A, LDAB, X, LDA,
495 $ WORK, LDA, RWORK, RESULT( 2 ) )
500 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
507 CALL DPBRFS( UPLO, N, KD, NRHS, A, LDAB, AFAC,
508 $ LDAB, B, LDA, X, LDA, RWORK,
509 $ RWORK( NRHS+1 ), WORK, IWORK,
515 $ CALL ALAERH( PATH, 'dpbrfs', INFO, 0, UPLO,
516 $ N, N, KD, KD, NRHS, IMAT, NFAIL,
519 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
521 CALL DPBT05( UPLO, N, KD, NRHS, A, LDAB, B, LDA,
522 $ X, LDA, XACT, LDA, RWORK,
523 $ RWORK( NRHS+1 ), RESULT( 5 ) )
529.GE.
IF( RESULT( K )THRESH ) THEN
530.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
531 $ CALL ALAHD( NOUT, PATH )
532 WRITE( NOUT, FMT = 9998 )UPLO, N, KD,
533 $ NRHS, IMAT, K, RESULT( K )
544 CALL DPBCON( UPLO, N, KD, AFAC, LDAB, ANORM, RCOND,
545 $ WORK, IWORK, INFO )
550 $ CALL ALAERH( PATH, 'dpbcon', INFO, 0, UPLO, N,
551 $ N, KD, KD, -1, IMAT, NFAIL, NERRS,
554 RESULT( 7 ) = DGET06( RCOND, RCONDC )
558.GE.
IF( RESULT( 7 )THRESH ) THEN
559.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
560 $ CALL ALAHD( NOUT, PATH )
561 WRITE( NOUT, FMT = 9997 )UPLO, N, KD, IMAT, 7,
574 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
576 9999 FORMAT( ' uplo=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nb=
', I4,
577 $ ',
type ', I2, ', test
', I2, ', ratio=
', G12.5 )
578 9998 FORMAT( ' uplo=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nrhs=
', I3,
579 $ ',
type ', I2, ', test(
', I2, ') =
', G12.5 )
580 9997 FORMAT( ' uplo=
''', A1, ''', n=
', I5, ', kd=
', I5, ',
', 10X,
581 $ ' type ', I2, ', test(
', I2, ') =
', 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 alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine alahd(iounit, path)
ALAHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine dpbtrs(uplo, n, kd, nrhs, ab, ldab, b, ldb, info)
DPBTRS
subroutine dpbcon(uplo, n, kd, ab, ldab, anorm, rcond, work, iwork, info)
DPBCON
subroutine dpbrfs(uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, ferr, berr, work, iwork, info)
DPBRFS
subroutine dpbtrf(uplo, n, kd, ab, ldab, info)
DPBTRF
subroutine dswap(n, dx, incx, dy, incy)
DSWAP
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
subroutine dpbt05(uplo, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
DPBT05
subroutine dpbt02(uplo, n, kd, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
DPBT02
subroutine dchkpb(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
DCHKPB
subroutine dpbt01(uplo, n, kd, a, lda, afac, ldafac, rwork, resid)
DPBT01
subroutine dlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
DLATB4
subroutine derrpo(path, nunit)
DERRPO
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