You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

zchktb.f 20 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. *> \brief \b ZCHKTB
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * SUBROUTINE ZCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  12. * NMAX, AB, AINV, B, X, XACT, WORK, RWORK, NOUT )
  13. *
  14. * .. Scalar Arguments ..
  15. * LOGICAL TSTERR
  16. * INTEGER NMAX, NN, NNS, NOUT
  17. * DOUBLE PRECISION THRESH
  18. * ..
  19. * .. Array Arguments ..
  20. * LOGICAL DOTYPE( * )
  21. * INTEGER NSVAL( * ), NVAL( * )
  22. * DOUBLE PRECISION RWORK( * )
  23. * COMPLEX*16 AB( * ), AINV( * ), B( * ), WORK( * ), X( * ),
  24. * $ XACT( * )
  25. * ..
  26. *
  27. *
  28. *> \par Purpose:
  29. * =============
  30. *>
  31. *> \verbatim
  32. *>
  33. *> ZCHKTB tests ZTBTRS, -RFS, and -CON, and ZLATBS.
  34. *> \endverbatim
  35. *
  36. * Arguments:
  37. * ==========
  38. *
  39. *> \param[in] DOTYPE
  40. *> \verbatim
  41. *> DOTYPE is LOGICAL array, dimension (NTYPES)
  42. *> The matrix types to be used for testing. Matrices of type j
  43. *> (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
  44. *> .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.
  45. *> \endverbatim
  46. *>
  47. *> \param[in] NN
  48. *> \verbatim
  49. *> NN is INTEGER
  50. *> The number of values of N contained in the vector NVAL.
  51. *> \endverbatim
  52. *>
  53. *> \param[in] NVAL
  54. *> \verbatim
  55. *> NVAL is INTEGER array, dimension (NN)
  56. *> The values of the matrix column dimension N.
  57. *> \endverbatim
  58. *>
  59. *> \param[in] NNS
  60. *> \verbatim
  61. *> NNS is INTEGER
  62. *> The number of values of NRHS contained in the vector NSVAL.
  63. *> \endverbatim
  64. *>
  65. *> \param[in] NSVAL
  66. *> \verbatim
  67. *> NSVAL is INTEGER array, dimension (NNS)
  68. *> The values of the number of right hand sides NRHS.
  69. *> \endverbatim
  70. *>
  71. *> \param[in] THRESH
  72. *> \verbatim
  73. *> THRESH is DOUBLE PRECISION
  74. *> The threshold value for the test ratios. A result is
  75. *> included in the output file if RESULT >= THRESH. To have
  76. *> every test ratio printed, use THRESH = 0.
  77. *> \endverbatim
  78. *>
  79. *> \param[in] TSTERR
  80. *> \verbatim
  81. *> TSTERR is LOGICAL
  82. *> Flag that indicates whether error exits are to be tested.
  83. *> \endverbatim
  84. *>
  85. *> \param[in] NMAX
  86. *> \verbatim
  87. *> NMAX is INTEGER
  88. *> The leading dimension of the work arrays.
  89. *> NMAX >= the maximum value of N in NVAL.
  90. *> \endverbatim
  91. *>
  92. *> \param[out] AB
  93. *> \verbatim
  94. *> AB is COMPLEX*16 array, dimension (NMAX*NMAX)
  95. *> \endverbatim
  96. *>
  97. *> \param[out] AINV
  98. *> \verbatim
  99. *> AINV is COMPLEX*16 array, dimension (NMAX*NMAX)
  100. *> \endverbatim
  101. *>
  102. *> \param[out] B
  103. *> \verbatim
  104. *> B is COMPLEX*16 array, dimension (NMAX*NSMAX)
  105. *> where NSMAX is the largest entry in NSVAL.
  106. *> \endverbatim
  107. *>
  108. *> \param[out] X
  109. *> \verbatim
  110. *> X is COMPLEX*16 array, dimension (NMAX*NSMAX)
  111. *> \endverbatim
  112. *>
  113. *> \param[out] XACT
  114. *> \verbatim
  115. *> XACT is COMPLEX*16 array, dimension (NMAX*NSMAX)
  116. *> \endverbatim
  117. *>
  118. *> \param[out] WORK
  119. *> \verbatim
  120. *> WORK is COMPLEX*16 array, dimension
  121. *> (NMAX*max(3,NSMAX))
  122. *> \endverbatim
  123. *>
  124. *> \param[out] RWORK
  125. *> \verbatim
  126. *> RWORK is DOUBLE PRECISION array, dimension
  127. *> (max(NMAX,2*NSMAX))
  128. *> \endverbatim
  129. *>
  130. *> \param[in] NOUT
  131. *> \verbatim
  132. *> NOUT is INTEGER
  133. *> The unit number for output.
  134. *> \endverbatim
  135. *
  136. * Authors:
  137. * ========
  138. *
  139. *> \author Univ. of Tennessee
  140. *> \author Univ. of California Berkeley
  141. *> \author Univ. of Colorado Denver
  142. *> \author NAG Ltd.
  143. *
  144. *> \date December 2016
  145. *
  146. *> \ingroup complex16_lin
  147. *
  148. * =====================================================================
  149. SUBROUTINE ZCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  150. $ NMAX, AB, AINV, B, X, XACT, WORK, RWORK, NOUT )
  151. *
  152. * -- LAPACK test routine (version 3.7.0) --
  153. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  154. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  155. * December 2016
  156. *
  157. * .. Scalar Arguments ..
  158. LOGICAL TSTERR
  159. INTEGER NMAX, NN, NNS, NOUT
  160. DOUBLE PRECISION THRESH
  161. * ..
  162. * .. Array Arguments ..
  163. LOGICAL DOTYPE( * )
  164. INTEGER NSVAL( * ), NVAL( * )
  165. DOUBLE PRECISION RWORK( * )
  166. COMPLEX*16 AB( * ), AINV( * ), B( * ), WORK( * ), X( * ),
  167. $ XACT( * )
  168. * ..
  169. *
  170. * =====================================================================
  171. *
  172. * .. Parameters ..
  173. INTEGER NTYPE1, NTYPES
  174. PARAMETER ( NTYPE1 = 9, NTYPES = 17 )
  175. INTEGER NTESTS
  176. PARAMETER ( NTESTS = 8 )
  177. INTEGER NTRAN
  178. PARAMETER ( NTRAN = 3 )
  179. DOUBLE PRECISION ONE, ZERO
  180. PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
  181. * ..
  182. * .. Local Scalars ..
  183. CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
  184. CHARACTER*3 PATH
  185. INTEGER I, IDIAG, IK, IMAT, IN, INFO, IRHS, ITRAN,
  186. $ IUPLO, J, K, KD, LDA, LDAB, N, NERRS, NFAIL,
  187. $ NIMAT, NIMAT2, NK, NRHS, NRUN
  188. DOUBLE PRECISION AINVNM, ANORM, RCOND, RCONDC, RCONDI, RCONDO,
  189. $ SCALE
  190. * ..
  191. * .. Local Arrays ..
  192. CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
  193. INTEGER ISEED( 4 ), ISEEDY( 4 )
  194. DOUBLE PRECISION RESULT( NTESTS )
  195. * ..
  196. * .. External Functions ..
  197. LOGICAL LSAME
  198. DOUBLE PRECISION ZLANTB, ZLANTR
  199. EXTERNAL LSAME, ZLANTB, ZLANTR
  200. * ..
  201. * .. External Subroutines ..
  202. EXTERNAL ALAERH, ALAHD, ALASUM, ZCOPY, ZERRTR, ZGET04,
  203. $ ZLACPY, ZLARHS, ZLASET, ZLATBS, ZLATTB, ZTBCON,
  204. $ ZTBRFS, ZTBSV, ZTBT02, ZTBT03, ZTBT05, ZTBT06,
  205. $ ZTBTRS
  206. * ..
  207. * .. Scalars in Common ..
  208. LOGICAL LERR, OK
  209. CHARACTER*32 SRNAMT
  210. INTEGER INFOT, IOUNIT
  211. * ..
  212. * .. Common blocks ..
  213. COMMON / INFOC / INFOT, IOUNIT, OK, LERR
  214. COMMON / SRNAMC / SRNAMT
  215. * ..
  216. * .. Intrinsic Functions ..
  217. INTRINSIC DCMPLX, MAX, MIN
  218. * ..
  219. * .. Data statements ..
  220. DATA ISEEDY / 1988, 1989, 1990, 1991 /
  221. DATA UPLOS / 'U', 'L' / , TRANSS / 'N', 'T', 'C' /
  222. * ..
  223. * .. Executable Statements ..
  224. *
  225. * Initialize constants and the random number seed.
  226. *
  227. PATH( 1: 1 ) = 'Zomplex precision'
  228. PATH( 2: 3 ) = 'TB'
  229. NRUN = 0
  230. NFAIL = 0
  231. NERRS = 0
  232. DO 10 I = 1, 4
  233. ISEED( I ) = ISEEDY( I )
  234. 10 CONTINUE
  235. *
  236. * Test the error exits
  237. *
  238. IF( TSTERR )
  239. $ CALL ZERRTR( PATH, NOUT )
  240. INFOT = 0
  241. *
  242. DO 140 IN = 1, NN
  243. *
  244. * Do for each value of N in NVAL
  245. *
  246. N = NVAL( IN )
  247. LDA = MAX( 1, N )
  248. XTYPE = 'N'
  249. NIMAT = NTYPE1
  250. NIMAT2 = NTYPES
  251. IF( N.LE.0 ) THEN
  252. NIMAT = 1
  253. NIMAT2 = NTYPE1 + 1
  254. END IF
  255. *
  256. NK = MIN( N+1, 4 )
  257. DO 130 IK = 1, NK
  258. *
  259. * Do for KD = 0, N, (3N-1)/4, and (N+1)/4. This order makes
  260. * it easier to skip redundant values for small values of N.
  261. *
  262. IF( IK.EQ.1 ) THEN
  263. KD = 0
  264. ELSE IF( IK.EQ.2 ) THEN
  265. KD = MAX( N, 0 )
  266. ELSE IF( IK.EQ.3 ) THEN
  267. KD = ( 3*N-1 ) / 4
  268. ELSE IF( IK.EQ.4 ) THEN
  269. KD = ( N+1 ) / 4
  270. END IF
  271. LDAB = KD + 1
  272. *
  273. DO 90 IMAT = 1, NIMAT
  274. *
  275. * Do the tests only if DOTYPE( IMAT ) is true.
  276. *
  277. IF( .NOT.DOTYPE( IMAT ) )
  278. $ GO TO 90
  279. *
  280. DO 80 IUPLO = 1, 2
  281. *
  282. * Do first for UPLO = 'U', then for UPLO = 'L'
  283. *
  284. UPLO = UPLOS( IUPLO )
  285. *
  286. * Call ZLATTB to generate a triangular test matrix.
  287. *
  288. SRNAMT = 'ZLATTB'
  289. CALL ZLATTB( IMAT, UPLO, 'No transpose', DIAG, ISEED,
  290. $ N, KD, AB, LDAB, X, WORK, RWORK, INFO )
  291. *
  292. * Set IDIAG = 1 for non-unit matrices, 2 for unit.
  293. *
  294. IF( LSAME( DIAG, 'N' ) ) THEN
  295. IDIAG = 1
  296. ELSE
  297. IDIAG = 2
  298. END IF
  299. *
  300. * Form the inverse of A so we can get a good estimate
  301. * of RCONDC = 1/(norm(A) * norm(inv(A))).
  302. *
  303. CALL ZLASET( 'Full', N, N, DCMPLX( ZERO ),
  304. $ DCMPLX( ONE ), AINV, LDA )
  305. IF( LSAME( UPLO, 'U' ) ) THEN
  306. DO 20 J = 1, N
  307. CALL ZTBSV( UPLO, 'No transpose', DIAG, J, KD,
  308. $ AB, LDAB, AINV( ( J-1 )*LDA+1 ), 1 )
  309. 20 CONTINUE
  310. ELSE
  311. DO 30 J = 1, N
  312. CALL ZTBSV( UPLO, 'No transpose', DIAG, N-J+1,
  313. $ KD, AB( ( J-1 )*LDAB+1 ), LDAB,
  314. $ AINV( ( J-1 )*LDA+J ), 1 )
  315. 30 CONTINUE
  316. END IF
  317. *
  318. * Compute the 1-norm condition number of A.
  319. *
  320. ANORM = ZLANTB( '1', UPLO, DIAG, N, KD, AB, LDAB,
  321. $ RWORK )
  322. AINVNM = ZLANTR( '1', UPLO, DIAG, N, N, AINV, LDA,
  323. $ RWORK )
  324. IF( ANORM.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN
  325. RCONDO = ONE
  326. ELSE
  327. RCONDO = ( ONE / ANORM ) / AINVNM
  328. END IF
  329. *
  330. * Compute the infinity-norm condition number of A.
  331. *
  332. ANORM = ZLANTB( 'I', UPLO, DIAG, N, KD, AB, LDAB,
  333. $ RWORK )
  334. AINVNM = ZLANTR( 'I', UPLO, DIAG, N, N, AINV, LDA,
  335. $ RWORK )
  336. IF( ANORM.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN
  337. RCONDI = ONE
  338. ELSE
  339. RCONDI = ( ONE / ANORM ) / AINVNM
  340. END IF
  341. *
  342. DO 60 IRHS = 1, NNS
  343. NRHS = NSVAL( IRHS )
  344. XTYPE = 'N'
  345. *
  346. DO 50 ITRAN = 1, NTRAN
  347. *
  348. * Do for op(A) = A, A**T, or A**H.
  349. *
  350. TRANS = TRANSS( ITRAN )
  351. IF( ITRAN.EQ.1 ) THEN
  352. NORM = 'O'
  353. RCONDC = RCONDO
  354. ELSE
  355. NORM = 'I'
  356. RCONDC = RCONDI
  357. END IF
  358. *
  359. *+ TEST 1
  360. * Solve and compute residual for op(A)*x = b.
  361. *
  362. SRNAMT = 'ZLARHS'
  363. CALL ZLARHS( PATH, XTYPE, UPLO, TRANS, N, N, KD,
  364. $ IDIAG, NRHS, AB, LDAB, XACT, LDA,
  365. $ B, LDA, ISEED, INFO )
  366. XTYPE = 'C'
  367. CALL ZLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
  368. *
  369. SRNAMT = 'ZTBTRS'
  370. CALL ZTBTRS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
  371. $ LDAB, X, LDA, INFO )
  372. *
  373. * Check error code from ZTBTRS.
  374. *
  375. IF( INFO.NE.0 )
  376. $ CALL ALAERH( PATH, 'ZTBTRS', INFO, 0,
  377. $ UPLO // TRANS // DIAG, N, N, KD,
  378. $ KD, NRHS, IMAT, NFAIL, NERRS,
  379. $ NOUT )
  380. *
  381. CALL ZTBT02( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
  382. $ LDAB, X, LDA, B, LDA, WORK, RWORK,
  383. $ RESULT( 1 ) )
  384. *
  385. *+ TEST 2
  386. * Check solution from generated exact solution.
  387. *
  388. CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
  389. $ RESULT( 2 ) )
  390. *
  391. *+ TESTS 3, 4, and 5
  392. * Use iterative refinement to improve the solution
  393. * and compute error bounds.
  394. *
  395. SRNAMT = 'ZTBRFS'
  396. CALL ZTBRFS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
  397. $ LDAB, B, LDA, X, LDA, RWORK,
  398. $ RWORK( NRHS+1 ), WORK,
  399. $ RWORK( 2*NRHS+1 ), INFO )
  400. *
  401. * Check error code from ZTBRFS.
  402. *
  403. IF( INFO.NE.0 )
  404. $ CALL ALAERH( PATH, 'ZTBRFS', INFO, 0,
  405. $ UPLO // TRANS // DIAG, N, N, KD,
  406. $ KD, NRHS, IMAT, NFAIL, NERRS,
  407. $ NOUT )
  408. *
  409. CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
  410. $ RESULT( 3 ) )
  411. CALL ZTBT05( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
  412. $ LDAB, B, LDA, X, LDA, XACT, LDA,
  413. $ RWORK, RWORK( NRHS+1 ),
  414. $ RESULT( 4 ) )
  415. *
  416. * Print information about the tests that did not
  417. * pass the threshold.
  418. *
  419. DO 40 K = 1, 5
  420. IF( RESULT( K ).GE.THRESH ) THEN
  421. IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
  422. $ CALL ALAHD( NOUT, PATH )
  423. WRITE( NOUT, FMT = 9999 )UPLO, TRANS,
  424. $ DIAG, N, KD, NRHS, IMAT, K, RESULT( K )
  425. NFAIL = NFAIL + 1
  426. END IF
  427. 40 CONTINUE
  428. NRUN = NRUN + 5
  429. 50 CONTINUE
  430. 60 CONTINUE
  431. *
  432. *+ TEST 6
  433. * Get an estimate of RCOND = 1/CNDNUM.
  434. *
  435. DO 70 ITRAN = 1, 2
  436. IF( ITRAN.EQ.1 ) THEN
  437. NORM = 'O'
  438. RCONDC = RCONDO
  439. ELSE
  440. NORM = 'I'
  441. RCONDC = RCONDI
  442. END IF
  443. SRNAMT = 'ZTBCON'
  444. CALL ZTBCON( NORM, UPLO, DIAG, N, KD, AB, LDAB,
  445. $ RCOND, WORK, RWORK, INFO )
  446. *
  447. * Check error code from ZTBCON.
  448. *
  449. IF( INFO.NE.0 )
  450. $ CALL ALAERH( PATH, 'ZTBCON', INFO, 0,
  451. $ NORM // UPLO // DIAG, N, N, KD, KD,
  452. $ -1, IMAT, NFAIL, NERRS, NOUT )
  453. *
  454. CALL ZTBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB,
  455. $ LDAB, RWORK, RESULT( 6 ) )
  456. *
  457. * Print the test ratio if it is .GE. THRESH.
  458. *
  459. IF( RESULT( 6 ).GE.THRESH ) THEN
  460. IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
  461. $ CALL ALAHD( NOUT, PATH )
  462. WRITE( NOUT, FMT = 9998 ) 'ZTBCON', NORM, UPLO,
  463. $ DIAG, N, KD, IMAT, 6, RESULT( 6 )
  464. NFAIL = NFAIL + 1
  465. END IF
  466. NRUN = NRUN + 1
  467. 70 CONTINUE
  468. 80 CONTINUE
  469. 90 CONTINUE
  470. *
  471. * Use pathological test matrices to test ZLATBS.
  472. *
  473. DO 120 IMAT = NTYPE1 + 1, NIMAT2
  474. *
  475. * Do the tests only if DOTYPE( IMAT ) is true.
  476. *
  477. IF( .NOT.DOTYPE( IMAT ) )
  478. $ GO TO 120
  479. *
  480. DO 110 IUPLO = 1, 2
  481. *
  482. * Do first for UPLO = 'U', then for UPLO = 'L'
  483. *
  484. UPLO = UPLOS( IUPLO )
  485. DO 100 ITRAN = 1, NTRAN
  486. *
  487. * Do for op(A) = A, A**T, and A**H.
  488. *
  489. TRANS = TRANSS( ITRAN )
  490. *
  491. * Call ZLATTB to generate a triangular test matrix.
  492. *
  493. SRNAMT = 'ZLATTB'
  494. CALL ZLATTB( IMAT, UPLO, TRANS, DIAG, ISEED, N, KD,
  495. $ AB, LDAB, X, WORK, RWORK, INFO )
  496. *
  497. *+ TEST 7
  498. * Solve the system op(A)*x = b
  499. *
  500. SRNAMT = 'ZLATBS'
  501. CALL ZCOPY( N, X, 1, B, 1 )
  502. CALL ZLATBS( UPLO, TRANS, DIAG, 'N', N, KD, AB,
  503. $ LDAB, B, SCALE, RWORK, INFO )
  504. *
  505. * Check error code from ZLATBS.
  506. *
  507. IF( INFO.NE.0 )
  508. $ CALL ALAERH( PATH, 'ZLATBS', INFO, 0,
  509. $ UPLO // TRANS // DIAG // 'N', N, N,
  510. $ KD, KD, -1, IMAT, NFAIL, NERRS,
  511. $ NOUT )
  512. *
  513. CALL ZTBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
  514. $ SCALE, RWORK, ONE, B, LDA, X, LDA,
  515. $ WORK, RESULT( 7 ) )
  516. *
  517. *+ TEST 8
  518. * Solve op(A)*x = b again with NORMIN = 'Y'.
  519. *
  520. CALL ZCOPY( N, X, 1, B, 1 )
  521. CALL ZLATBS( UPLO, TRANS, DIAG, 'Y', N, KD, AB,
  522. $ LDAB, B, SCALE, RWORK, INFO )
  523. *
  524. * Check error code from ZLATBS.
  525. *
  526. IF( INFO.NE.0 )
  527. $ CALL ALAERH( PATH, 'ZLATBS', INFO, 0,
  528. $ UPLO // TRANS // DIAG // 'Y', N, N,
  529. $ KD, KD, -1, IMAT, NFAIL, NERRS,
  530. $ NOUT )
  531. *
  532. CALL ZTBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
  533. $ SCALE, RWORK, ONE, B, LDA, X, LDA,
  534. $ WORK, RESULT( 8 ) )
  535. *
  536. * Print information about the tests that did not pass
  537. * the threshold.
  538. *
  539. IF( RESULT( 7 ).GE.THRESH ) THEN
  540. IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
  541. $ CALL ALAHD( NOUT, PATH )
  542. WRITE( NOUT, FMT = 9997 )'ZLATBS', UPLO, TRANS,
  543. $ DIAG, 'N', N, KD, IMAT, 7, RESULT( 7 )
  544. NFAIL = NFAIL + 1
  545. END IF
  546. IF( RESULT( 8 ).GE.THRESH ) THEN
  547. IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
  548. $ CALL ALAHD( NOUT, PATH )
  549. WRITE( NOUT, FMT = 9997 )'ZLATBS', UPLO, TRANS,
  550. $ DIAG, 'Y', N, KD, IMAT, 8, RESULT( 8 )
  551. NFAIL = NFAIL + 1
  552. END IF
  553. NRUN = NRUN + 2
  554. 100 CONTINUE
  555. 110 CONTINUE
  556. 120 CONTINUE
  557. 130 CONTINUE
  558. 140 CONTINUE
  559. *
  560. * Print a summary of the results.
  561. *
  562. CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
  563. *
  564. 9999 FORMAT( ' UPLO=''', A1, ''', TRANS=''', A1, ''',
  565. $ DIAG=''', A1, ''', N=', I5, ', KD=', I5, ', NRHS=', I5,
  566. $ ', type ', I2, ', test(', I2, ')=', G12.5 )
  567. 9998 FORMAT( 1X, A, '( ''', A1, ''', ''', A1, ''', ''', A1, ''',',
  568. $ I5, ',', I5, ', ... ), type ', I2, ', test(', I2, ')=',
  569. $ G12.5 )
  570. 9997 FORMAT( 1X, A, '( ''', A1, ''', ''', A1, ''', ''', A1, ''', ''',
  571. $ A1, ''',', I5, ',', I5, ', ... ), type ', I2, ', test(',
  572. $ I1, ')=', G12.5 )
  573. RETURN
  574. *
  575. * End of ZCHKTB
  576. *
  577. END