LAPACK 3.3.0
|
00001 SUBROUTINE ZCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, 00002 $ NSVAL, THRESH, TSTERR, A, LA, AFAC, LAFAC, B, 00003 $ X, XACT, WORK, RWORK, IWORK, NOUT ) 00004 * 00005 * -- LAPACK test routine (version 3.1) -- 00006 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 00007 * November 2006 00008 * 00009 * .. Scalar Arguments .. 00010 LOGICAL TSTERR 00011 INTEGER LA, LAFAC, NM, NN, NNB, NNS, NOUT 00012 DOUBLE PRECISION THRESH 00013 * .. 00014 * .. Array Arguments .. 00015 LOGICAL DOTYPE( * ) 00016 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NSVAL( * ), 00017 $ NVAL( * ) 00018 DOUBLE PRECISION RWORK( * ) 00019 COMPLEX*16 A( * ), AFAC( * ), B( * ), WORK( * ), X( * ), 00020 $ XACT( * ) 00021 * .. 00022 * 00023 * Purpose 00024 * ======= 00025 * 00026 * ZCHKGB tests ZGBTRF, -TRS, -RFS, and -CON 00027 * 00028 * Arguments 00029 * ========= 00030 * 00031 * DOTYPE (input) LOGICAL array, dimension (NTYPES) 00032 * The matrix types to be used for testing. Matrices of type j 00033 * (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) = 00034 * .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used. 00035 * 00036 * NM (input) INTEGER 00037 * The number of values of M contained in the vector MVAL. 00038 * 00039 * MVAL (input) INTEGER array, dimension (NM) 00040 * The values of the matrix row dimension M. 00041 * 00042 * NN (input) INTEGER 00043 * The number of values of N contained in the vector NVAL. 00044 * 00045 * NVAL (input) INTEGER array, dimension (NN) 00046 * The values of the matrix column dimension N. 00047 * 00048 * NNB (input) INTEGER 00049 * The number of values of NB contained in the vector NBVAL. 00050 * 00051 * NBVAL (input) INTEGER array, dimension (NBVAL) 00052 * The values of the blocksize NB. 00053 * 00054 * NNS (input) INTEGER 00055 * The number of values of NRHS contained in the vector NSVAL. 00056 * 00057 * NSVAL (input) INTEGER array, dimension (NNS) 00058 * The values of the number of right hand sides NRHS. 00059 * 00060 * THRESH (input) DOUBLE PRECISION 00061 * The threshold value for the test ratios. A result is 00062 * included in the output file if RESULT >= THRESH. To have 00063 * every test ratio printed, use THRESH = 0. 00064 * 00065 * TSTERR (input) LOGICAL 00066 * Flag that indicates whether error exits are to be tested. 00067 * 00068 * A (workspace) COMPLEX*16 array, dimension (LA) 00069 * 00070 * LA (input) INTEGER 00071 * The length of the array A. LA >= (KLMAX+KUMAX+1)*NMAX 00072 * where KLMAX is the largest entry in the local array KLVAL, 00073 * KUMAX is the largest entry in the local array KUVAL and 00074 * NMAX is the largest entry in the input array NVAL. 00075 * 00076 * AFAC (workspace) COMPLEX*16 array, dimension (LAFAC) 00077 * 00078 * LAFAC (input) INTEGER 00079 * The length of the array AFAC. LAFAC >= (2*KLMAX+KUMAX+1)*NMAX 00080 * where KLMAX is the largest entry in the local array KLVAL, 00081 * KUMAX is the largest entry in the local array KUVAL and 00082 * NMAX is the largest entry in the input array NVAL. 00083 * 00084 * B (workspace) COMPLEX*16 array, dimension (NMAX*NSMAX) 00085 * 00086 * X (workspace) COMPLEX*16 array, dimension (NMAX*NSMAX) 00087 * 00088 * XACT (workspace) COMPLEX*16 array, dimension (NMAX*NSMAX) 00089 * 00090 * WORK (workspace) COMPLEX*16 array, dimension 00091 * (NMAX*max(3,NSMAX,NMAX)) 00092 * 00093 * RWORK (workspace) DOUBLE PRECISION array, dimension 00094 * (max(NMAX,2*NSMAX)) 00095 * 00096 * IWORK (workspace) INTEGER array, dimension (NMAX) 00097 * 00098 * NOUT (input) INTEGER 00099 * The unit number for output. 00100 * 00101 * ===================================================================== 00102 * 00103 * .. Parameters .. 00104 DOUBLE PRECISION ONE, ZERO 00105 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) 00106 INTEGER NTYPES, NTESTS 00107 PARAMETER ( NTYPES = 8, NTESTS = 7 ) 00108 INTEGER NBW, NTRAN 00109 PARAMETER ( NBW = 4, NTRAN = 3 ) 00110 * .. 00111 * .. Local Scalars .. 00112 LOGICAL TRFCON, ZEROT 00113 CHARACTER DIST, NORM, TRANS, TYPE, XTYPE 00114 CHARACTER*3 PATH 00115 INTEGER I, I1, I2, IKL, IKU, IM, IMAT, IN, INB, INFO, 00116 $ IOFF, IRHS, ITRAN, IZERO, J, K, KL, KOFF, KU, 00117 $ LDA, LDAFAC, LDB, M, MODE, N, NB, NERRS, NFAIL, 00118 $ NIMAT, NKL, NKU, NRHS, NRUN 00119 DOUBLE PRECISION AINVNM, ANORM, ANORMI, ANORMO, CNDNUM, RCOND, 00120 $ RCONDC, RCONDI, RCONDO 00121 * .. 00122 * .. Local Arrays .. 00123 CHARACTER TRANSS( NTRAN ) 00124 INTEGER ISEED( 4 ), ISEEDY( 4 ), KLVAL( NBW ), 00125 $ KUVAL( NBW ) 00126 DOUBLE PRECISION RESULT( NTESTS ) 00127 * .. 00128 * .. External Functions .. 00129 DOUBLE PRECISION DGET06, ZLANGB, ZLANGE 00130 EXTERNAL DGET06, ZLANGB, ZLANGE 00131 * .. 00132 * .. External Subroutines .. 00133 EXTERNAL ALAERH, ALAHD, ALASUM, XLAENV, ZCOPY, ZERRGE, 00134 $ ZGBCON, ZGBRFS, ZGBT01, ZGBT02, ZGBT05, ZGBTRF, 00135 $ ZGBTRS, ZGET04, ZLACPY, ZLARHS, ZLASET, ZLATB4, 00136 $ ZLATMS 00137 * .. 00138 * .. Intrinsic Functions .. 00139 INTRINSIC DCMPLX, MAX, MIN 00140 * .. 00141 * .. Scalars in Common .. 00142 LOGICAL LERR, OK 00143 CHARACTER*32 SRNAMT 00144 INTEGER INFOT, NUNIT 00145 * .. 00146 * .. Common blocks .. 00147 COMMON / INFOC / INFOT, NUNIT, OK, LERR 00148 COMMON / SRNAMC / SRNAMT 00149 * .. 00150 * .. Data statements .. 00151 DATA ISEEDY / 1988, 1989, 1990, 1991 / , 00152 $ TRANSS / 'N', 'T', 'C' / 00153 * .. 00154 * .. Executable Statements .. 00155 * 00156 * Initialize constants and the random number seed. 00157 * 00158 PATH( 1: 1 ) = 'Zomplex precision' 00159 PATH( 2: 3 ) = 'GB' 00160 NRUN = 0 00161 NFAIL = 0 00162 NERRS = 0 00163 DO 10 I = 1, 4 00164 ISEED( I ) = ISEEDY( I ) 00165 10 CONTINUE 00166 * 00167 * Test the error exits 00168 * 00169 IF( TSTERR ) 00170 $ CALL ZERRGE( PATH, NOUT ) 00171 INFOT = 0 00172 * 00173 * Initialize the first value for the lower and upper bandwidths. 00174 * 00175 KLVAL( 1 ) = 0 00176 KUVAL( 1 ) = 0 00177 * 00178 * Do for each value of M in MVAL 00179 * 00180 DO 160 IM = 1, NM 00181 M = MVAL( IM ) 00182 * 00183 * Set values to use for the lower bandwidth. 00184 * 00185 KLVAL( 2 ) = M + ( M+1 ) / 4 00186 * 00187 * KLVAL( 2 ) = MAX( M-1, 0 ) 00188 * 00189 KLVAL( 3 ) = ( 3*M-1 ) / 4 00190 KLVAL( 4 ) = ( M+1 ) / 4 00191 * 00192 * Do for each value of N in NVAL 00193 * 00194 DO 150 IN = 1, NN 00195 N = NVAL( IN ) 00196 XTYPE = 'N' 00197 * 00198 * Set values to use for the upper bandwidth. 00199 * 00200 KUVAL( 2 ) = N + ( N+1 ) / 4 00201 * 00202 * KUVAL( 2 ) = MAX( N-1, 0 ) 00203 * 00204 KUVAL( 3 ) = ( 3*N-1 ) / 4 00205 KUVAL( 4 ) = ( N+1 ) / 4 00206 * 00207 * Set limits on the number of loop iterations. 00208 * 00209 NKL = MIN( M+1, 4 ) 00210 IF( N.EQ.0 ) 00211 $ NKL = 2 00212 NKU = MIN( N+1, 4 ) 00213 IF( M.EQ.0 ) 00214 $ NKU = 2 00215 NIMAT = NTYPES 00216 IF( M.LE.0 .OR. N.LE.0 ) 00217 $ NIMAT = 1 00218 * 00219 DO 140 IKL = 1, NKL 00220 * 00221 * Do for KL = 0, (5*M+1)/4, (3M-1)/4, and (M+1)/4. This 00222 * order makes it easier to skip redundant values for small 00223 * values of M. 00224 * 00225 KL = KLVAL( IKL ) 00226 DO 130 IKU = 1, NKU 00227 * 00228 * Do for KU = 0, (5*N+1)/4, (3N-1)/4, and (N+1)/4. This 00229 * order makes it easier to skip redundant values for 00230 * small values of N. 00231 * 00232 KU = KUVAL( IKU ) 00233 * 00234 * Check that A and AFAC are big enough to generate this 00235 * matrix. 00236 * 00237 LDA = KL + KU + 1 00238 LDAFAC = 2*KL + KU + 1 00239 IF( ( LDA*N ).GT.LA .OR. ( LDAFAC*N ).GT.LAFAC ) THEN 00240 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 00241 $ CALL ALAHD( NOUT, PATH ) 00242 IF( N*( KL+KU+1 ).GT.LA ) THEN 00243 WRITE( NOUT, FMT = 9999 )LA, M, N, KL, KU, 00244 $ N*( KL+KU+1 ) 00245 NERRS = NERRS + 1 00246 END IF 00247 IF( N*( 2*KL+KU+1 ).GT.LAFAC ) THEN 00248 WRITE( NOUT, FMT = 9998 )LAFAC, M, N, KL, KU, 00249 $ N*( 2*KL+KU+1 ) 00250 NERRS = NERRS + 1 00251 END IF 00252 GO TO 130 00253 END IF 00254 * 00255 DO 120 IMAT = 1, NIMAT 00256 * 00257 * Do the tests only if DOTYPE( IMAT ) is true. 00258 * 00259 IF( .NOT.DOTYPE( IMAT ) ) 00260 $ GO TO 120 00261 * 00262 * Skip types 2, 3, or 4 if the matrix size is too 00263 * small. 00264 * 00265 ZEROT = IMAT.GE.2 .AND. IMAT.LE.4 00266 IF( ZEROT .AND. N.LT.IMAT-1 ) 00267 $ GO TO 120 00268 * 00269 IF( .NOT.ZEROT .OR. .NOT.DOTYPE( 1 ) ) THEN 00270 * 00271 * Set up parameters with ZLATB4 and generate a 00272 * test matrix with ZLATMS. 00273 * 00274 CALL ZLATB4( PATH, IMAT, M, N, TYPE, KL, KU, 00275 $ ANORM, MODE, CNDNUM, DIST ) 00276 * 00277 KOFF = MAX( 1, KU+2-N ) 00278 DO 20 I = 1, KOFF - 1 00279 A( I ) = ZERO 00280 20 CONTINUE 00281 SRNAMT = 'ZLATMS' 00282 CALL ZLATMS( M, N, DIST, ISEED, TYPE, RWORK, 00283 $ MODE, CNDNUM, ANORM, KL, KU, 'Z', 00284 $ A( KOFF ), LDA, WORK, INFO ) 00285 * 00286 * Check the error code from ZLATMS. 00287 * 00288 IF( INFO.NE.0 ) THEN 00289 CALL ALAERH( PATH, 'ZLATMS', INFO, 0, ' ', M, 00290 $ N, KL, KU, -1, IMAT, NFAIL, 00291 $ NERRS, NOUT ) 00292 GO TO 120 00293 END IF 00294 ELSE IF( IZERO.GT.0 ) THEN 00295 * 00296 * Use the same matrix for types 3 and 4 as for 00297 * type 2 by copying back the zeroed out column. 00298 * 00299 CALL ZCOPY( I2-I1+1, B, 1, A( IOFF+I1 ), 1 ) 00300 END IF 00301 * 00302 * For types 2, 3, and 4, zero one or more columns of 00303 * the matrix to test that INFO is returned correctly. 00304 * 00305 IZERO = 0 00306 IF( ZEROT ) THEN 00307 IF( IMAT.EQ.2 ) THEN 00308 IZERO = 1 00309 ELSE IF( IMAT.EQ.3 ) THEN 00310 IZERO = MIN( M, N ) 00311 ELSE 00312 IZERO = MIN( M, N ) / 2 + 1 00313 END IF 00314 IOFF = ( IZERO-1 )*LDA 00315 IF( IMAT.LT.4 ) THEN 00316 * 00317 * Store the column to be zeroed out in B. 00318 * 00319 I1 = MAX( 1, KU+2-IZERO ) 00320 I2 = MIN( KL+KU+1, KU+1+( M-IZERO ) ) 00321 CALL ZCOPY( I2-I1+1, A( IOFF+I1 ), 1, B, 1 ) 00322 * 00323 DO 30 I = I1, I2 00324 A( IOFF+I ) = ZERO 00325 30 CONTINUE 00326 ELSE 00327 DO 50 J = IZERO, N 00328 DO 40 I = MAX( 1, KU+2-J ), 00329 $ MIN( KL+KU+1, KU+1+( M-J ) ) 00330 A( IOFF+I ) = ZERO 00331 40 CONTINUE 00332 IOFF = IOFF + LDA 00333 50 CONTINUE 00334 END IF 00335 END IF 00336 * 00337 * These lines, if used in place of the calls in the 00338 * loop over INB, cause the code to bomb on a Sun 00339 * SPARCstation. 00340 * 00341 * ANORMO = ZLANGB( 'O', N, KL, KU, A, LDA, RWORK ) 00342 * ANORMI = ZLANGB( 'I', N, KL, KU, A, LDA, RWORK ) 00343 * 00344 * Do for each blocksize in NBVAL 00345 * 00346 DO 110 INB = 1, NNB 00347 NB = NBVAL( INB ) 00348 CALL XLAENV( 1, NB ) 00349 * 00350 * Compute the LU factorization of the band matrix. 00351 * 00352 IF( M.GT.0 .AND. N.GT.0 ) 00353 $ CALL ZLACPY( 'Full', KL+KU+1, N, A, LDA, 00354 $ AFAC( KL+1 ), LDAFAC ) 00355 SRNAMT = 'ZGBTRF' 00356 CALL ZGBTRF( M, N, KL, KU, AFAC, LDAFAC, IWORK, 00357 $ INFO ) 00358 * 00359 * Check error code from ZGBTRF. 00360 * 00361 IF( INFO.NE.IZERO ) 00362 $ CALL ALAERH( PATH, 'ZGBTRF', INFO, IZERO, 00363 $ ' ', M, N, KL, KU, NB, IMAT, 00364 $ NFAIL, NERRS, NOUT ) 00365 TRFCON = .FALSE. 00366 * 00367 *+ TEST 1 00368 * Reconstruct matrix from factors and compute 00369 * residual. 00370 * 00371 CALL ZGBT01( M, N, KL, KU, A, LDA, AFAC, LDAFAC, 00372 $ IWORK, WORK, RESULT( 1 ) ) 00373 * 00374 * Print information about the tests so far that 00375 * did not pass the threshold. 00376 * 00377 IF( RESULT( 1 ).GE.THRESH ) THEN 00378 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 00379 $ CALL ALAHD( NOUT, PATH ) 00380 WRITE( NOUT, FMT = 9997 )M, N, KL, KU, NB, 00381 $ IMAT, 1, RESULT( 1 ) 00382 NFAIL = NFAIL + 1 00383 END IF 00384 NRUN = NRUN + 1 00385 * 00386 * Skip the remaining tests if this is not the 00387 * first block size or if M .ne. N. 00388 * 00389 IF( INB.GT.1 .OR. M.NE.N ) 00390 $ GO TO 110 00391 * 00392 ANORMO = ZLANGB( 'O', N, KL, KU, A, LDA, RWORK ) 00393 ANORMI = ZLANGB( 'I', N, KL, KU, A, LDA, RWORK ) 00394 * 00395 IF( INFO.EQ.0 ) THEN 00396 * 00397 * Form the inverse of A so we can get a good 00398 * estimate of CNDNUM = norm(A) * norm(inv(A)). 00399 * 00400 LDB = MAX( 1, N ) 00401 CALL ZLASET( 'Full', N, N, DCMPLX( ZERO ), 00402 $ DCMPLX( ONE ), WORK, LDB ) 00403 SRNAMT = 'ZGBTRS' 00404 CALL ZGBTRS( 'No transpose', N, KL, KU, N, 00405 $ AFAC, LDAFAC, IWORK, WORK, LDB, 00406 $ INFO ) 00407 * 00408 * Compute the 1-norm condition number of A. 00409 * 00410 AINVNM = ZLANGE( 'O', N, N, WORK, LDB, 00411 $ RWORK ) 00412 IF( ANORMO.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN 00413 RCONDO = ONE 00414 ELSE 00415 RCONDO = ( ONE / ANORMO ) / AINVNM 00416 END IF 00417 * 00418 * Compute the infinity-norm condition number of 00419 * A. 00420 * 00421 AINVNM = ZLANGE( 'I', N, N, WORK, LDB, 00422 $ RWORK ) 00423 IF( ANORMI.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN 00424 RCONDI = ONE 00425 ELSE 00426 RCONDI = ( ONE / ANORMI ) / AINVNM 00427 END IF 00428 ELSE 00429 * 00430 * Do only the condition estimate if INFO.NE.0. 00431 * 00432 TRFCON = .TRUE. 00433 RCONDO = ZERO 00434 RCONDI = ZERO 00435 END IF 00436 * 00437 * Skip the solve tests if the matrix is singular. 00438 * 00439 IF( TRFCON ) 00440 $ GO TO 90 00441 * 00442 DO 80 IRHS = 1, NNS 00443 NRHS = NSVAL( IRHS ) 00444 XTYPE = 'N' 00445 * 00446 DO 70 ITRAN = 1, NTRAN 00447 TRANS = TRANSS( ITRAN ) 00448 IF( ITRAN.EQ.1 ) THEN 00449 RCONDC = RCONDO 00450 NORM = 'O' 00451 ELSE 00452 RCONDC = RCONDI 00453 NORM = 'I' 00454 END IF 00455 * 00456 *+ TEST 2: 00457 * Solve and compute residual for A * X = B. 00458 * 00459 SRNAMT = 'ZLARHS' 00460 CALL ZLARHS( PATH, XTYPE, ' ', TRANS, N, 00461 $ N, KL, KU, NRHS, A, LDA, 00462 $ XACT, LDB, B, LDB, ISEED, 00463 $ INFO ) 00464 XTYPE = 'C' 00465 CALL ZLACPY( 'Full', N, NRHS, B, LDB, X, 00466 $ LDB ) 00467 * 00468 SRNAMT = 'ZGBTRS' 00469 CALL ZGBTRS( TRANS, N, KL, KU, NRHS, AFAC, 00470 $ LDAFAC, IWORK, X, LDB, INFO ) 00471 * 00472 * Check error code from ZGBTRS. 00473 * 00474 IF( INFO.NE.0 ) 00475 $ CALL ALAERH( PATH, 'ZGBTRS', INFO, 0, 00476 $ TRANS, N, N, KL, KU, -1, 00477 $ IMAT, NFAIL, NERRS, NOUT ) 00478 * 00479 CALL ZLACPY( 'Full', N, NRHS, B, LDB, 00480 $ WORK, LDB ) 00481 CALL ZGBT02( TRANS, M, N, KL, KU, NRHS, A, 00482 $ LDA, X, LDB, WORK, LDB, 00483 $ RESULT( 2 ) ) 00484 * 00485 *+ TEST 3: 00486 * Check solution from generated exact 00487 * solution. 00488 * 00489 CALL ZGET04( N, NRHS, X, LDB, XACT, LDB, 00490 $ RCONDC, RESULT( 3 ) ) 00491 * 00492 *+ TESTS 4, 5, 6: 00493 * Use iterative refinement to improve the 00494 * solution. 00495 * 00496 SRNAMT = 'ZGBRFS' 00497 CALL ZGBRFS( TRANS, N, KL, KU, NRHS, A, 00498 $ LDA, AFAC, LDAFAC, IWORK, B, 00499 $ LDB, X, LDB, RWORK, 00500 $ RWORK( NRHS+1 ), WORK, 00501 $ RWORK( 2*NRHS+1 ), INFO ) 00502 * 00503 * Check error code from ZGBRFS. 00504 * 00505 IF( INFO.NE.0 ) 00506 $ CALL ALAERH( PATH, 'ZGBRFS', INFO, 0, 00507 $ TRANS, N, N, KL, KU, NRHS, 00508 $ IMAT, NFAIL, NERRS, NOUT ) 00509 * 00510 CALL ZGET04( N, NRHS, X, LDB, XACT, LDB, 00511 $ RCONDC, RESULT( 4 ) ) 00512 CALL ZGBT05( TRANS, N, KL, KU, NRHS, A, 00513 $ LDA, B, LDB, X, LDB, XACT, 00514 $ LDB, RWORK, RWORK( NRHS+1 ), 00515 $ RESULT( 5 ) ) 00516 * 00517 * Print information about the tests that did 00518 * not pass the threshold. 00519 * 00520 DO 60 K = 2, 6 00521 IF( RESULT( K ).GE.THRESH ) THEN 00522 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 00523 $ CALL ALAHD( NOUT, PATH ) 00524 WRITE( NOUT, FMT = 9996 )TRANS, N, 00525 $ KL, KU, NRHS, IMAT, K, 00526 $ RESULT( K ) 00527 NFAIL = NFAIL + 1 00528 END IF 00529 60 CONTINUE 00530 NRUN = NRUN + 5 00531 70 CONTINUE 00532 80 CONTINUE 00533 * 00534 *+ TEST 7: 00535 * Get an estimate of RCOND = 1/CNDNUM. 00536 * 00537 90 CONTINUE 00538 DO 100 ITRAN = 1, 2 00539 IF( ITRAN.EQ.1 ) THEN 00540 ANORM = ANORMO 00541 RCONDC = RCONDO 00542 NORM = 'O' 00543 ELSE 00544 ANORM = ANORMI 00545 RCONDC = RCONDI 00546 NORM = 'I' 00547 END IF 00548 SRNAMT = 'ZGBCON' 00549 CALL ZGBCON( NORM, N, KL, KU, AFAC, LDAFAC, 00550 $ IWORK, ANORM, RCOND, WORK, 00551 $ RWORK, INFO ) 00552 * 00553 * Check error code from ZGBCON. 00554 * 00555 IF( INFO.NE.0 ) 00556 $ CALL ALAERH( PATH, 'ZGBCON', INFO, 0, 00557 $ NORM, N, N, KL, KU, -1, IMAT, 00558 $ NFAIL, NERRS, NOUT ) 00559 * 00560 RESULT( 7 ) = DGET06( RCOND, RCONDC ) 00561 * 00562 * Print information about the tests that did 00563 * not pass the threshold. 00564 * 00565 IF( RESULT( 7 ).GE.THRESH ) THEN 00566 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 00567 $ CALL ALAHD( NOUT, PATH ) 00568 WRITE( NOUT, FMT = 9995 )NORM, N, KL, KU, 00569 $ IMAT, 7, RESULT( 7 ) 00570 NFAIL = NFAIL + 1 00571 END IF 00572 NRUN = NRUN + 1 00573 100 CONTINUE 00574 110 CONTINUE 00575 120 CONTINUE 00576 130 CONTINUE 00577 140 CONTINUE 00578 150 CONTINUE 00579 160 CONTINUE 00580 * 00581 * Print a summary of the results. 00582 * 00583 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS ) 00584 * 00585 9999 FORMAT( ' *** In ZCHKGB, LA=', I5, ' is too small for M=', I5, 00586 $ ', N=', I5, ', KL=', I4, ', KU=', I4, 00587 $ / ' ==> Increase LA to at least ', I5 ) 00588 9998 FORMAT( ' *** In ZCHKGB, LAFAC=', I5, ' is too small for M=', I5, 00589 $ ', N=', I5, ', KL=', I4, ', KU=', I4, 00590 $ / ' ==> Increase LAFAC to at least ', I5 ) 00591 9997 FORMAT( ' M =', I5, ', N =', I5, ', KL=', I5, ', KU=', I5, 00592 $ ', NB =', I4, ', type ', I1, ', test(', I1, ')=', G12.5 ) 00593 9996 FORMAT( ' TRANS=''', A1, ''', N=', I5, ', KL=', I5, ', KU=', I5, 00594 $ ', NRHS=', I3, ', type ', I1, ', test(', I1, ')=', G12.5 ) 00595 9995 FORMAT( ' NORM =''', A1, ''', N=', I5, ', KL=', I5, ', KU=', I5, 00596 $ ',', 10X, ' type ', I1, ', test(', I1, ')=', G12.5 ) 00597 * 00598 RETURN 00599 * 00600 * End of ZCHKGB 00601 * 00602 END