165 SUBROUTINE zchkpb( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
166 $ THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
167 $ XACT, WORK, RWORK, NOUT )
175 INTEGER NMAX, NN, NNB, , NOUT
176 DOUBLE PRECISION THRESH
180 INTEGER NBVAL( * ), NSVAL( * ), NVAL( * )
181 DOUBLE PRECISION RWORK( * )
182 COMPLEX*16 ( * ), AFAC( * ), AINV( * ), B( * ),
183 $ work( * ), x( * ), xact( * )
189 DOUBLE PRECISION ONE, ZERO
190 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
191 INTEGER NTYPES, NTESTS
192 parameter( ntypes = 8, ntests = 7 )
198 CHARACTER DIST, PACKIT,
TYPE, UPLO, XTYPE
200 INTEGER I, I1, I2, IKD, IMAT, , INB, INFO, IOFF,
201 $ irhs, iuplo, iw, izero, k, kd, kl, koff, ku,
202 $ lda, ldab, mode, n, nb, nerrs, nfail, nimat,
204 DOUBLE PRECISION AINVNM, ANORM, CNDNUM, RCOND, RCONDC
207 INTEGER ISEED( 4 ), ISEEDY( 4 ), KDVAL( NBW )
208 DOUBLE PRECISION RESULT( NTESTS )
211 DOUBLE PRECISION DGET06, ZLANGE, ZLANHB
212 EXTERNAL DGET06, ZLANGE, ZLANHB
221 INTRINSIC dcmplx,
max,
min
229 COMMON / infoc / infot, nunit, ok, lerr
230 COMMON / srnamc / srnamt
233 DATA iseedy / 1988, 1989, 1990, 1991 /
239 path( 1: 1 ) = 'zomplex precision
'
245 ISEED( I ) = ISEEDY( I )
251 $ CALL ZERRPO( PATH, NOUT )
264 NKD = MAX( 1, MIN( N, 4 ) )
269 KDVAL( 2 ) = N + ( N+1 ) / 4
270 KDVAL( 3 ) = ( 3*N-1 ) / 4
271 KDVAL( 4 ) = ( N+1 ) / 4
286.EQ.
IF( IUPLO1 ) THEN
288 KOFF = MAX( 1, KD+2-N )
295 DO 60 IMAT = 1, NIMAT
299.NOT.
IF( DOTYPE( IMAT ) )
304.GE..AND..LE.
ZEROT = IMAT2 IMAT4
305.AND..LT.
IF( ZEROT NIMAT-1 )
308.NOT..OR..NOT.
IF( ZEROT DOTYPE( 1 ) ) THEN
313 CALL ZLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM,
314 $ MODE, CNDNUM, DIST )
317 CALL ZLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
318 $ CNDNUM, ANORM, KD, KD, PACKIT,
319 $ A( KOFF ), LDAB, WORK, INFO )
324 CALL ALAERH( PATH, 'zlatms', INFO, 0, UPLO, N,
325 $ N, KD, KD, -1, IMAT, NFAIL, NERRS,
329.GT.
ELSE IF( IZERO0 ) THEN
335.EQ.
IF( IUPLO1 ) THEN
336 IOFF = ( IZERO-1 )*LDAB + KD + 1
337 CALL ZCOPY( IZERO-I1, WORK( IW ), 1,
338 $ A( IOFF-IZERO+I1 ), 1 )
340 CALL ZCOPY( I2-IZERO+1, WORK( IW ), 1,
341 $ A( IOFF ), MAX( LDAB-1, 1 ) )
343 IOFF = ( I1-1 )*LDAB + 1
344 CALL ZCOPY( IZERO-I1, WORK( IW ), 1,
345 $ A( IOFF+IZERO-I1 ),
347 IOFF = ( IZERO-1 )*LDAB + 1
349 CALL ZCOPY( I2-IZERO+1, WORK( IW ), 1,
361.EQ.
ELSE IF( IMAT3 ) THEN
370 DO 20 I = 1, MIN( 2*KD+1, N )
374 I1 = MAX( IZERO-KD, 1 )
375 I2 = MIN( IZERO+KD, N )
377.EQ.
IF( IUPLO1 ) THEN
378 IOFF = ( IZERO-1 )*LDAB + KD + 1
379 CALL ZSWAP( IZERO-I1, A( IOFF-IZERO+I1 ), 1,
382 CALL ZSWAP( I2-IZERO+1, A( IOFF ),
383 $ MAX( LDAB-1, 1 ), WORK( IW ), 1 )
385 IOFF = ( I1-1 )*LDAB + 1
386 CALL ZSWAP( IZERO-I1, A( IOFF+IZERO-I1 ),
387 $ MAX( LDAB-1, 1 ), WORK( IW ), 1 )
388 IOFF = ( IZERO-1 )*LDAB + 1
390 CALL ZSWAP( I2-IZERO+1, A( IOFF ), 1,
397.EQ.
IF( IUPLO1 ) THEN
398 CALL ZLAIPD( N, A( KD+1 ), LDAB, 0 )
400 CALL ZLAIPD( N, A( 1 ), LDAB, 0 )
412 CALL ZLACPY( 'full
', KD+1, N, A, LDAB, AFAC, LDAB )
414 CALL ZPBTRF( UPLO, N, KD, AFAC, LDAB, INFO )
418.NE.
IF( INFOIZERO ) THEN
419 CALL ALAERH( PATH, 'zpbtrf', INFO, IZERO, UPLO,
420 $ N, N, KD, KD, NB, IMAT, NFAIL,
434 CALL ZLACPY( 'full
', KD+1, N, AFAC, LDAB, AINV,
436 CALL ZPBT01( UPLO, N, KD, A, LDAB, AINV, LDAB,
437 $ RWORK, RESULT( 1 ) )
441.GE.
IF( RESULT( 1 )THRESH ) THEN
442.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
443 $ CALL ALAHD( NOUT, PATH )
444 WRITE( NOUT, FMT = 9999 )UPLO, N, KD, NB, IMAT,
458 CALL ZLASET( 'full
', N, N, DCMPLX( ZERO ),
459 $ DCMPLX( ONE ), AINV, LDA )
461 CALL ZPBTRS( UPLO, N, KD, N, AFAC, LDAB, AINV, LDA,
466 ANORM = ZLANHB( '1
', UPLO, N, KD, A, LDAB, RWORK )
467 AINVNM = ZLANGE( '1
', N, N, AINV, LDA, RWORK )
468.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
471 RCONDC = ( ONE / ANORM ) / AINVNM
481 CALL ZLARHS( PATH, XTYPE, UPLO, ' ', N, N, KD,
482 $ KD, NRHS, A, LDAB, XACT, LDA, B,
484 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
487 CALL ZPBTRS( UPLO, N, KD, NRHS, AFAC, LDAB, X,
493 $ CALL ALAERH( PATH, 'zpbtrs', INFO, 0, UPLO,
494 $ N, N, KD, KD, NRHS, IMAT, NFAIL,
497 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK,
499 CALL ZPBT02( UPLO, N, KD, NRHS, A, LDAB, X, LDA,
500 $ WORK, LDA, RWORK, RESULT( 2 ) )
505 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
512 CALL ZPBRFS( UPLO, N, KD, NRHS, A, LDAB, AFAC,
513 $ LDAB, B, LDA, X, LDA, RWORK,
514 $ RWORK( NRHS+1 ), WORK,
515 $ RWORK( 2*NRHS+1 ), INFO )
520 $ CALL ALAERH( PATH, 'zpbrfs', INFO, 0, UPLO,
521 $ N, N, KD, KD, NRHS, IMAT, NFAIL,
524 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
526 CALL ZPBT05( UPLO, N, KD, NRHS, A, LDAB, B, LDA,
527 $ X, LDA, XACT, LDA, RWORK,
528 $ RWORK( NRHS+1 ), RESULT( 5 ) )
534.GE.
IF( RESULT( K )THRESH ) THEN
535.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
536 $ CALL ALAHD( NOUT, PATH )
537 WRITE( NOUT, FMT = 9998 )UPLO, N, KD,
538 $ NRHS, IMAT, K, RESULT( K )
549 CALL ZPBCON( UPLO, N, KD, AFAC, LDAB, ANORM, RCOND,
550 $ WORK, RWORK, INFO )
555 $ CALL ALAERH( PATH, 'zpbcon', INFO, 0, UPLO, N,
556 $ N, KD, KD, -1, IMAT, NFAIL, NERRS,
559 RESULT( 7 ) = DGET06( RCOND, RCONDC )
563.GE.
IF( RESULT( 7 )THRESH ) THEN
564.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
565 $ CALL ALAHD( NOUT, PATH )
566 WRITE( NOUT, FMT = 9997 )UPLO, N, KD, IMAT, 7,
579 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
581 9999 FORMAT( ' uplo=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nb=
', I4,
582 $ ',
type ', I2, ', test
', I2, ', ratio=
', G12.5 )
583 9998 FORMAT( ' uplo=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nrhs=', i3,
584 $
', type ', i2,
', test(', i2,
') = ', g12.5 )
585 9997
FORMAT(
' UPLO=''', a1,
''', N=', i5,
', KD=', i5,
',', 10x,
586 $
' type ', i2,
', test(', i2,
') = ', g12.5 )
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 zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine zpbtrs(uplo, n, kd, nrhs, ab, ldab, b, ldb, info)
ZPBTRS
subroutine zpbtrf(uplo, n, kd, ab, ldab, info)
ZPBTRF
subroutine zpbcon(uplo, n, kd, ab, ldab, anorm, rcond, work, rwork, info)
ZPBCON
subroutine zpbrfs(uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZPBRFS
subroutine zswap(n, zx, incx, zy, incy)
ZSWAP
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
ZLARHS
subroutine zpbt05(uplo, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
ZPBT05
subroutine zerrpo(path, nunit)
ZERRPO
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zpbt01(uplo, n, kd, a, lda, afac, ldafac, rwork, resid)
ZPBT01
subroutine zpbt02(uplo, n, kd, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZPBT02
subroutine zchkpb(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, nout)
ZCHKPB
subroutine zlaipd(n, a, inda, vinda)
ZLAIPD
subroutine zlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
ZLATB4
subroutine zlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
ZLATMS