188 SUBROUTINE cchkgb( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS,
189 $ NSVAL, THRESH, TSTERR, A, LA, AFAC, LAFAC, B,
190 $ X, XACT, WORK, RWORK, IWORK, NOUT )
198 INTEGER LA, LAFAC, NM, NN, NNB, NNS, NOUT
203 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NSVAL( * ),
206 COMPLEX A( * ), AFAC( * ), B( * ), WORK( * ), X( * ),
214 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
215 INTEGER NTYPES, NTESTS
216 parameter( ntypes = 8, ntests = 7 )
218 parameter( nbw = 4, ntran = 3 )
221 LOGICAL TRFCON, ZEROT
222 CHARACTER DIST, NORM, TRANS,
TYPE, XTYPE
224 INTEGER I, I1, I2, IKL, IKU, IM, IMAT, IN, INB, INFO,
225 $ ioff, irhs, itran, izero, j, k, kl, koff, ku,
226 $ lda, ldafac, ldb, m, mode, n, nb, nerrs, nfail,
227 $ nimat, nkl, nku, nrhs, nrun
228 REAL AINVNM, ANORM, ANORMI, ANORMO, CNDNUM, RCOND,
229 $ RCONDC, RCONDI, RCONDO
232 CHARACTER TRANSS( NTRAN )
233 INTEGER ISEED( 4 ), ISEEDY( 4 ), KLVAL( NBW ),
235 REAL RESULT( NTESTS )
238 REAL CLANGB, CLANGE, SGET06
239 EXTERNAL CLANGB, CLANGE, SGET06
256 COMMON / infoc / infot, nunit, ok, lerr
257 COMMON / srnamc / srnamt
260 DATA iseedy / 1988, 1989, 1990, 1991 / ,
261 $ transs / 'n
', 't
', 'c
' /
267 PATH( 1: 1 ) = 'Complex precision
'
273 ISEED( I ) = ISEEDY( I )
279 $ CALL CERRGE( PATH, NOUT )
294 KLVAL( 2 ) = M + ( M+1 ) / 4
298 KLVAL( 3 ) = ( 3*M-1 ) / 4
299 KLVAL( 4 ) = ( M+1 ) / 4
309 KUVAL( 2 ) = N + ( N+1 ) / 4
313 KUVAL( 3 ) = ( 3*N-1 ) / 4
314 KUVAL( 4 ) = ( N+1 ) / 4
325.LE..OR..LE.
IF( M0 N0 )
347 LDAFAC = 2*KL + KU + 1
348.GT..OR..GT.
IF( ( LDA*N )LA ( LDAFAC*N )LAFAC ) THEN
349.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
350 $ CALL ALAHD( NOUT, PATH )
351.GT.
IF( N*( KL+KU+1 )LA ) THEN
352 WRITE( NOUT, FMT = 9999 )LA, M, N, KL, KU,
356.GT.
IF( N*( 2*KL+KU+1 )LAFAC ) THEN
357 WRITE( NOUT, FMT = 9998 )LAFAC, M, N, KL, KU,
364 DO 120 IMAT = 1, NIMAT
368.NOT.
IF( DOTYPE( IMAT ) )
374.GE..AND..LE.
ZEROT = IMAT2 IMAT4
375.AND..LT.
IF( ZEROT NIMAT-1 )
378.NOT..OR..NOT.
IF( ZEROT DOTYPE( 1 ) ) THEN
383 CALL CLATB4( PATH, IMAT, M, N, TYPE, KL, KU,
384 $ ANORM, MODE, CNDNUM, DIST )
386 KOFF = MAX( 1, KU+2-N )
387 DO 20 I = 1, KOFF - 1
391 CALL CLATMS( M, N, DIST, ISEED, TYPE, RWORK,
392 $ MODE, CNDNUM, ANORM, KL, KU, 'Z
',
393 $ A( KOFF ), LDA, WORK, INFO )
398 CALL ALAERH( PATH, 'CLATMS
', INFO, 0, ' ', M,
399 $ N, KL, KU, -1, IMAT, NFAIL,
403.GT.
ELSE IF( IZERO0 ) THEN
408 CALL CCOPY( I2-I1+1, B, 1, A( IOFF+I1 ), 1 )
418.EQ.
ELSE IF( IMAT3 ) THEN
421 IZERO = MIN( M, N ) / 2 + 1
423 IOFF = ( IZERO-1 )*LDA
428 I1 = MAX( 1, KU+2-IZERO )
429 I2 = MIN( KL+KU+1, KU+1+( M-IZERO ) )
430 CALL CCOPY( I2-I1+1, A( IOFF+I1 ), 1, B, 1 )
437 DO 40 I = MAX( 1, KU+2-J ),
438 $ MIN( KL+KU+1, KU+1+( M-J ) )
461.GT..AND..GT.
IF( M0 N0 )
462 $ CALL CLACPY( 'Full
', KL+KU+1, N, A, LDA,
463 $ AFAC( KL+1 ), LDAFAC )
465 CALL CGBTRF( M, N, KL, KU, AFAC, LDAFAC, IWORK,
471 $ CALL ALAERH( PATH, 'CGBTRF
', INFO, IZERO,
472 $ ' ', M, N, KL, KU, NB, IMAT,
473 $ NFAIL, NERRS, NOUT )
480 CALL CGBT01( M, N, KL, KU, A, LDA, AFAC, LDAFAC,
481 $ IWORK, WORK, RESULT( 1 ) )
486.GE.
IF( RESULT( 1 )THRESH ) THEN
487.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
488 $ CALL ALAHD( NOUT, PATH )
489 WRITE( NOUT, FMT = 9997 )M, N, KL, KU, NB,
490 $ IMAT, 1, RESULT( 1 )
498.GT..OR..NE.
IF( INB1 MN )
501 ANORMO = CLANGB( 'O
', N, KL, KU, A, LDA, RWORK )
502 ANORMI = CLANGB( 'I
', N, KL, KU, A, LDA, RWORK )
510 CALL CLASET( 'Full
', N, N, CMPLX( ZERO ),
511 $ CMPLX( ONE ), WORK, LDB )
513 CALL CGBTRS( 'No transpose
', N, KL, KU, N,
514 $ AFAC, LDAFAC, IWORK, WORK, LDB,
519 AINVNM = CLANGE( 'O
', N, N, WORK, LDB,
521.LE..OR..LE.
IF( ANORMOZERO AINVNMZERO ) THEN
524 RCONDO = ( ONE / ANORMO ) / AINVNM
530 AINVNM = CLANGE( 'I
', N, N, WORK, LDB,
532.LE..OR..LE.
IF( ANORMIZERO AINVNMZERO ) THEN
535 RCONDI = ( ONE / ANORMI ) / AINVNM
555 DO 70 ITRAN = 1, NTRAN
556 TRANS = TRANSS( ITRAN )
557.EQ.
IF( ITRAN1 ) THEN
569 CALL CLARHS( PATH, XTYPE, ' ', TRANS, N,
570 $ N, KL, KU, NRHS, A, LDA,
571 $ XACT, LDB, B, LDB, ISEED,
574 CALL CLACPY( 'Full
', N, NRHS, B, LDB, X,
578 CALL CGBTRS( TRANS, N, KL, KU, NRHS, AFAC,
579 $ LDAFAC, IWORK, X, LDB, INFO )
584 $ CALL ALAERH( PATH, 'CGBTRS
', INFO, 0,
585 $ TRANS, N, N, KL, KU, -1,
586 $ IMAT, NFAIL, NERRS, NOUT )
588 CALL CLACPY( 'Full
', N, NRHS, B, LDB,
590 CALL CGBT02( TRANS, M, N, KL, KU, NRHS, A,
591 $ LDA, X, LDB, WORK, LDB,
592 $ RWORK, RESULT( 2 ) )
598 CALL CGET04( N, NRHS, X, LDB, XACT, LDB,
599 $ RCONDC, RESULT( 3 ) )
606 CALL CGBRFS( TRANS, N, KL, KU, NRHS, A,
607 $ LDA, AFAC, LDAFAC, IWORK, B,
608 $ LDB, X, LDB, RWORK,
609 $ RWORK( NRHS+1 ), WORK,
610 $ RWORK( 2*NRHS+1 ), INFO )
615 $ CALL ALAERH( PATH, 'CGBRFS
', INFO, 0,
616 $ TRANS, N, N, KL, KU, NRHS,
617 $ IMAT, NFAIL, NERRS, NOUT )
619 CALL CGET04( N, NRHS, X, LDB, XACT, LDB,
620 $ RCONDC, RESULT( 4 ) )
621 CALL CGBT05( TRANS, N, KL, KU, NRHS, A,
622 $ LDA, B, LDB, X, LDB, XACT,
623 $ LDB, RWORK, RWORK( NRHS+1 ),
630.GE.
IF( RESULT( K )THRESH ) THEN
631.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
632 $ CALL ALAHD( NOUT, PATH )
633 WRITE( NOUT, FMT = 9996 )TRANS, N,
634 $ KL, KU, NRHS, IMAT, K,
648.EQ.
IF( ITRAN1 ) THEN
658 CALL CGBCON( NORM, N, KL, KU, AFAC, LDAFAC,
659 $ IWORK, ANORM, RCOND, WORK,
665 $ CALL ALAERH( PATH, 'CGBCON
', INFO, 0,
666 $ NORM, N, N, KL, KU, -1, IMAT,
667 $ NFAIL, NERRS, NOUT )
669 RESULT( 7 ) = SGET06( RCOND, RCONDC )
674.GE.
IF( RESULT( 7 )THRESH ) THEN
675.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
676 $ CALL ALAHD( NOUT, PATH )
677 WRITE( NOUT, FMT = 9995 )NORM, N, KL, KU,
678 $ IMAT, 7, RESULT( 7 )
692 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
694 9999 FORMAT( ' *** In CCHKGB, LA=
', I5, ' is too small
for m=
', I5,
695 $ ', n=
', I5, ', kl=
', I4, ', ku=
', I4,
696 $ / ' ==> increase la to at least
', I5 )
697 9998 FORMAT( ' *** in cchkgb, lafac=
', I5, ' is too small
for m=
', I5,
698 $ ', n=
', I5, ', kl=
', I4, ', ku=
', I4,
699 $ / ' ==> increase lafac to at least
', I5 )
700 9997 FORMAT( ' m =
', I5, ', n =
', I5, ', kl=
', I5, ', ku=
', I5,
701 $ ', nb =
', I4, ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
702 9996 FORMAT( ' trans=
''', A1, ''', n=
', I5, ', kl=
', I5, ', ku=
', I5,
703 $ ', nrhs=
', I3, ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
704 9995 FORMAT( ' norm =
''', A1, ''', n=
', I5, ', kl=
', I5, ', ku=
', I5,
705 $ ',
', 10X, ' type ', I1, ', test(
', I1, ')=
', 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 cgbrfs(trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CGBRFS
subroutine cgbtrf(m, n, kl, ku, ab, ldab, ipiv, info)
CGBTRF
subroutine cgbcon(norm, n, kl, ku, ab, ldab, ipiv, anorm, rcond, work, rwork, info)
CGBCON
subroutine cgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
CGBTRS
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine cchkgb(dotype, nm, mval, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, a, la, afac, lafac, b, x, xact, work, rwork, iwork, nout)
CCHKGB
subroutine cgbt01(m, n, kl, ku, a, lda, afac, ldafac, ipiv, work, resid)
CGBT01
subroutine cgbt02(trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
CGBT02
subroutine cgbt05(trans, n, kl, ku, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
CGBT05
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine cerrge(path, nunit)
CERRGE
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS
for(i8=*sizetab-1;i8 >=0;i8--)