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

3492 lines
128 KiB

  1. *> \brief \b CBLAT3
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * PROGRAM CBLAT3
  12. *
  13. *
  14. *> \par Purpose:
  15. * =============
  16. *>
  17. *> \verbatim
  18. *>
  19. *> Test program for the COMPLEX Level 3 Blas.
  20. *>
  21. *> The program must be driven by a short data file. The first 14 records
  22. *> of the file are read using list-directed input, the last 9 records
  23. *> are read using the format ( A6, L2 ). An annotated example of a data
  24. *> file can be obtained by deleting the first 3 characters from the
  25. *> following 23 lines:
  26. *> 'cblat3.out' NAME OF SUMMARY OUTPUT FILE
  27. *> 6 UNIT NUMBER OF SUMMARY FILE
  28. *> 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
  29. *> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
  30. *> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
  31. *> F LOGICAL FLAG, T TO STOP ON FAILURES.
  32. *> T LOGICAL FLAG, T TO TEST ERROR EXITS.
  33. *> 16.0 THRESHOLD VALUE OF TEST RATIO
  34. *> 6 NUMBER OF VALUES OF N
  35. *> 0 1 2 3 5 9 VALUES OF N
  36. *> 3 NUMBER OF VALUES OF ALPHA
  37. *> (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
  38. *> 3 NUMBER OF VALUES OF BETA
  39. *> (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
  40. *> CGEMM T PUT F FOR NO TEST. SAME COLUMNS.
  41. *> CHEMM T PUT F FOR NO TEST. SAME COLUMNS.
  42. *> CSYMM T PUT F FOR NO TEST. SAME COLUMNS.
  43. *> CTRMM T PUT F FOR NO TEST. SAME COLUMNS.
  44. *> CTRSM T PUT F FOR NO TEST. SAME COLUMNS.
  45. *> CHERK T PUT F FOR NO TEST. SAME COLUMNS.
  46. *> CSYRK T PUT F FOR NO TEST. SAME COLUMNS.
  47. *> CHER2K T PUT F FOR NO TEST. SAME COLUMNS.
  48. *> CSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
  49. *>
  50. *> Further Details
  51. *> ===============
  52. *>
  53. *> See:
  54. *>
  55. *> Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
  56. *> A Set of Level 3 Basic Linear Algebra Subprograms.
  57. *>
  58. *> Technical Memorandum No.88 (Revision 1), Mathematics and
  59. *> Computer Science Division, Argonne National Laboratory, 9700
  60. *> South Cass Avenue, Argonne, Illinois 60439, US.
  61. *>
  62. *> -- Written on 8-February-1989.
  63. *> Jack Dongarra, Argonne National Laboratory.
  64. *> Iain Duff, AERE Harwell.
  65. *> Jeremy Du Croz, Numerical Algorithms Group Ltd.
  66. *> Sven Hammarling, Numerical Algorithms Group Ltd.
  67. *>
  68. *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
  69. *> can be run multiple times without deleting generated
  70. *> output files (susan)
  71. *> \endverbatim
  72. *
  73. * Authors:
  74. * ========
  75. *
  76. *> \author Univ. of Tennessee
  77. *> \author Univ. of California Berkeley
  78. *> \author Univ. of Colorado Denver
  79. *> \author NAG Ltd.
  80. *
  81. *> \date April 2012
  82. *
  83. *> \ingroup complex_blas_testing
  84. *
  85. * =====================================================================
  86. PROGRAM CBLAT3
  87. *
  88. * -- Reference BLAS test routine (version 3.4.1) --
  89. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  90. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  91. * April 2012
  92. *
  93. * =====================================================================
  94. *
  95. * .. Parameters ..
  96. INTEGER NIN
  97. PARAMETER ( NIN = 5 )
  98. INTEGER NSUBS
  99. PARAMETER ( NSUBS = 9 )
  100. COMPLEX ZERO, ONE
  101. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  102. REAL RZERO
  103. PARAMETER ( RZERO = 0.0 )
  104. INTEGER NMAX
  105. PARAMETER ( NMAX = 65 )
  106. INTEGER NIDMAX, NALMAX, NBEMAX
  107. PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
  108. * .. Local Scalars ..
  109. REAL EPS, ERR, THRESH
  110. INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
  111. LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
  112. $ TSTERR
  113. CHARACTER*1 TRANSA, TRANSB
  114. CHARACTER*6 SNAMET
  115. CHARACTER*32 SNAPS, SUMMRY
  116. * .. Local Arrays ..
  117. COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
  118. $ ALF( NALMAX ), AS( NMAX*NMAX ),
  119. $ BB( NMAX*NMAX ), BET( NBEMAX ),
  120. $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
  121. $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
  122. $ W( 2*NMAX )
  123. REAL G( NMAX )
  124. INTEGER IDIM( NIDMAX )
  125. LOGICAL LTEST( NSUBS )
  126. CHARACTER*6 SNAMES( NSUBS )
  127. * .. External Functions ..
  128. REAL SDIFF
  129. LOGICAL LCE
  130. EXTERNAL SDIFF, LCE
  131. * .. External Subroutines ..
  132. EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH
  133. * .. Intrinsic Functions ..
  134. INTRINSIC MAX, MIN
  135. * .. Scalars in Common ..
  136. INTEGER INFOT, NOUTC
  137. LOGICAL LERR, OK
  138. CHARACTER*6 SRNAMT
  139. * .. Common blocks ..
  140. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  141. COMMON /SRNAMC/SRNAMT
  142. * .. Data statements ..
  143. DATA SNAMES/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ',
  144. $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
  145. $ 'CSYR2K'/
  146. * .. Executable Statements ..
  147. *
  148. * Read name and unit number for summary output file and open file.
  149. *
  150. READ( NIN, FMT = * )SUMMRY
  151. READ( NIN, FMT = * )NOUT
  152. OPEN( NOUT, FILE = SUMMRY )
  153. NOUTC = NOUT
  154. *
  155. * Read name and unit number for snapshot output file and open file.
  156. *
  157. READ( NIN, FMT = * )SNAPS
  158. READ( NIN, FMT = * )NTRA
  159. TRACE = NTRA.GE.0
  160. IF( TRACE )THEN
  161. OPEN( NTRA, FILE = SNAPS )
  162. END IF
  163. * Read the flag that directs rewinding of the snapshot file.
  164. READ( NIN, FMT = * )REWI
  165. REWI = REWI.AND.TRACE
  166. * Read the flag that directs stopping on any failure.
  167. READ( NIN, FMT = * )SFATAL
  168. * Read the flag that indicates whether error exits are to be tested.
  169. READ( NIN, FMT = * )TSTERR
  170. * Read the threshold value of the test ratio
  171. READ( NIN, FMT = * )THRESH
  172. *
  173. * Read and check the parameter values for the tests.
  174. *
  175. * Values of N
  176. READ( NIN, FMT = * )NIDIM
  177. IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
  178. WRITE( NOUT, FMT = 9997 )'N', NIDMAX
  179. GO TO 220
  180. END IF
  181. READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
  182. DO 10 I = 1, NIDIM
  183. IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
  184. WRITE( NOUT, FMT = 9996 )NMAX
  185. GO TO 220
  186. END IF
  187. 10 CONTINUE
  188. * Values of ALPHA
  189. READ( NIN, FMT = * )NALF
  190. IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
  191. WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
  192. GO TO 220
  193. END IF
  194. READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
  195. * Values of BETA
  196. READ( NIN, FMT = * )NBET
  197. IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
  198. WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
  199. GO TO 220
  200. END IF
  201. READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
  202. *
  203. * Report values of parameters.
  204. *
  205. WRITE( NOUT, FMT = 9995 )
  206. WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
  207. WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
  208. WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
  209. IF( .NOT.TSTERR )THEN
  210. WRITE( NOUT, FMT = * )
  211. WRITE( NOUT, FMT = 9984 )
  212. END IF
  213. WRITE( NOUT, FMT = * )
  214. WRITE( NOUT, FMT = 9999 )THRESH
  215. WRITE( NOUT, FMT = * )
  216. *
  217. * Read names of subroutines and flags which indicate
  218. * whether they are to be tested.
  219. *
  220. DO 20 I = 1, NSUBS
  221. LTEST( I ) = .FALSE.
  222. 20 CONTINUE
  223. 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
  224. DO 40 I = 1, NSUBS
  225. IF( SNAMET.EQ.SNAMES( I ) )
  226. $ GO TO 50
  227. 40 CONTINUE
  228. WRITE( NOUT, FMT = 9990 )SNAMET
  229. STOP
  230. 50 LTEST( I ) = LTESTT
  231. GO TO 30
  232. *
  233. 60 CONTINUE
  234. CLOSE ( NIN )
  235. *
  236. * Compute EPS (the machine precision).
  237. *
  238. EPS = EPSILON(RZERO)
  239. WRITE( NOUT, FMT = 9998 )EPS
  240. *
  241. * Check the reliability of CMMCH using exact data.
  242. *
  243. N = MIN( 32, NMAX )
  244. DO 100 J = 1, N
  245. DO 90 I = 1, N
  246. AB( I, J ) = MAX( I - J + 1, 0 )
  247. 90 CONTINUE
  248. AB( J, NMAX + 1 ) = J
  249. AB( 1, NMAX + J ) = J
  250. C( J, 1 ) = ZERO
  251. 100 CONTINUE
  252. DO 110 J = 1, N
  253. CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
  254. 110 CONTINUE
  255. * CC holds the exact result. On exit from CMMCH CT holds
  256. * the result computed by CMMCH.
  257. TRANSA = 'N'
  258. TRANSB = 'N'
  259. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  260. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  261. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  262. SAME = LCE( CC, CT, N )
  263. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  264. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  265. STOP
  266. END IF
  267. TRANSB = 'C'
  268. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  269. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  270. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  271. SAME = LCE( CC, CT, N )
  272. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  273. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  274. STOP
  275. END IF
  276. DO 120 J = 1, N
  277. AB( J, NMAX + 1 ) = N - J + 1
  278. AB( 1, NMAX + J ) = N - J + 1
  279. 120 CONTINUE
  280. DO 130 J = 1, N
  281. CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
  282. $ ( ( J + 1 )*J*( J - 1 ) )/3
  283. 130 CONTINUE
  284. TRANSA = 'C'
  285. TRANSB = 'N'
  286. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  287. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  288. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  289. SAME = LCE( CC, CT, N )
  290. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  291. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  292. STOP
  293. END IF
  294. TRANSB = 'C'
  295. CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
  296. $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
  297. $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
  298. SAME = LCE( CC, CT, N )
  299. IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
  300. WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
  301. STOP
  302. END IF
  303. *
  304. * Test each subroutine in turn.
  305. *
  306. DO 200 ISNUM = 1, NSUBS
  307. WRITE( NOUT, FMT = * )
  308. IF( .NOT.LTEST( ISNUM ) )THEN
  309. * Subprogram is not to be tested.
  310. WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
  311. ELSE
  312. SRNAMT = SNAMES( ISNUM )
  313. * Test error exits.
  314. IF( TSTERR )THEN
  315. CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
  316. WRITE( NOUT, FMT = * )
  317. END IF
  318. * Test computations.
  319. INFOT = 0
  320. OK = .TRUE.
  321. FATAL = .FALSE.
  322. GO TO ( 140, 150, 150, 160, 160, 170, 170,
  323. $ 180, 180 )ISNUM
  324. * Test CGEMM, 01.
  325. 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  326. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  327. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  328. $ CC, CS, CT, G )
  329. GO TO 190
  330. * Test CHEMM, 02, CSYMM, 03.
  331. 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  332. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  333. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  334. $ CC, CS, CT, G )
  335. GO TO 190
  336. * Test CTRMM, 04, CTRSM, 05.
  337. 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  338. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
  339. $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
  340. GO TO 190
  341. * Test CHERK, 06, CSYRK, 07.
  342. 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  343. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  344. $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
  345. $ CC, CS, CT, G )
  346. GO TO 190
  347. * Test CHER2K, 08, CSYR2K, 09.
  348. 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
  349. $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
  350. $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
  351. GO TO 190
  352. *
  353. 190 IF( FATAL.AND.SFATAL )
  354. $ GO TO 210
  355. END IF
  356. 200 CONTINUE
  357. WRITE( NOUT, FMT = 9986 )
  358. GO TO 230
  359. *
  360. 210 CONTINUE
  361. WRITE( NOUT, FMT = 9985 )
  362. GO TO 230
  363. *
  364. 220 CONTINUE
  365. WRITE( NOUT, FMT = 9991 )
  366. *
  367. 230 CONTINUE
  368. IF( TRACE )
  369. $ CLOSE ( NTRA )
  370. CLOSE ( NOUT )
  371. STOP
  372. *
  373. 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
  374. $ 'S THAN', F8.2 )
  375. 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
  376. 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
  377. $ 'THAN ', I2 )
  378. 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
  379. 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
  380. $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
  381. 9994 FORMAT( ' FOR N ', 9I6 )
  382. 9993 FORMAT( ' FOR ALPHA ',
  383. $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
  384. 9992 FORMAT( ' FOR BETA ',
  385. $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
  386. 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
  387. $ /' ******* TESTS ABANDONED *******' )
  388. 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
  389. $ 'ESTS ABANDONED *******' )
  390. 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
  391. $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
  392. $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
  393. $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
  394. $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
  395. $ '*******' )
  396. 9988 FORMAT( A6, L2 )
  397. 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
  398. 9986 FORMAT( /' END OF TESTS' )
  399. 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
  400. 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
  401. *
  402. * End of CBLAT3.
  403. *
  404. END
  405. SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  406. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  407. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  408. *
  409. * Tests CGEMM.
  410. *
  411. * Auxiliary routine for test program for Level 3 Blas.
  412. *
  413. * -- Written on 8-February-1989.
  414. * Jack Dongarra, Argonne National Laboratory.
  415. * Iain Duff, AERE Harwell.
  416. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  417. * Sven Hammarling, Numerical Algorithms Group Ltd.
  418. *
  419. * .. Parameters ..
  420. COMPLEX ZERO
  421. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  422. REAL RZERO
  423. PARAMETER ( RZERO = 0.0 )
  424. * .. Scalar Arguments ..
  425. REAL EPS, THRESH
  426. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  427. LOGICAL FATAL, REWI, TRACE
  428. CHARACTER*6 SNAME
  429. * .. Array Arguments ..
  430. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  431. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  432. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  433. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  434. $ CS( NMAX*NMAX ), CT( NMAX )
  435. REAL G( NMAX )
  436. INTEGER IDIM( NIDIM )
  437. * .. Local Scalars ..
  438. COMPLEX ALPHA, ALS, BETA, BLS
  439. REAL ERR, ERRMAX
  440. INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
  441. $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
  442. $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
  443. LOGICAL NULL, RESET, SAME, TRANA, TRANB
  444. CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
  445. CHARACTER*3 ICH
  446. * .. Local Arrays ..
  447. LOGICAL ISAME( 13 )
  448. * .. External Functions ..
  449. LOGICAL LCE, LCERES
  450. EXTERNAL LCE, LCERES
  451. * .. External Subroutines ..
  452. EXTERNAL CGEMM, CMAKE, CMMCH
  453. * .. Intrinsic Functions ..
  454. INTRINSIC MAX
  455. * .. Scalars in Common ..
  456. INTEGER INFOT, NOUTC
  457. LOGICAL LERR, OK
  458. * .. Common blocks ..
  459. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  460. * .. Data statements ..
  461. DATA ICH/'NTC'/
  462. * .. Executable Statements ..
  463. *
  464. NARGS = 13
  465. NC = 0
  466. RESET = .TRUE.
  467. ERRMAX = RZERO
  468. *
  469. DO 110 IM = 1, NIDIM
  470. M = IDIM( IM )
  471. *
  472. DO 100 IN = 1, NIDIM
  473. N = IDIM( IN )
  474. * Set LDC to 1 more than minimum value if room.
  475. LDC = M
  476. IF( LDC.LT.NMAX )
  477. $ LDC = LDC + 1
  478. * Skip tests if not enough room.
  479. IF( LDC.GT.NMAX )
  480. $ GO TO 100
  481. LCC = LDC*N
  482. NULL = N.LE.0.OR.M.LE.0
  483. *
  484. DO 90 IK = 1, NIDIM
  485. K = IDIM( IK )
  486. *
  487. DO 80 ICA = 1, 3
  488. TRANSA = ICH( ICA: ICA )
  489. TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
  490. *
  491. IF( TRANA )THEN
  492. MA = K
  493. NA = M
  494. ELSE
  495. MA = M
  496. NA = K
  497. END IF
  498. * Set LDA to 1 more than minimum value if room.
  499. LDA = MA
  500. IF( LDA.LT.NMAX )
  501. $ LDA = LDA + 1
  502. * Skip tests if not enough room.
  503. IF( LDA.GT.NMAX )
  504. $ GO TO 80
  505. LAA = LDA*NA
  506. *
  507. * Generate the matrix A.
  508. *
  509. CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
  510. $ RESET, ZERO )
  511. *
  512. DO 70 ICB = 1, 3
  513. TRANSB = ICH( ICB: ICB )
  514. TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
  515. *
  516. IF( TRANB )THEN
  517. MB = N
  518. NB = K
  519. ELSE
  520. MB = K
  521. NB = N
  522. END IF
  523. * Set LDB to 1 more than minimum value if room.
  524. LDB = MB
  525. IF( LDB.LT.NMAX )
  526. $ LDB = LDB + 1
  527. * Skip tests if not enough room.
  528. IF( LDB.GT.NMAX )
  529. $ GO TO 70
  530. LBB = LDB*NB
  531. *
  532. * Generate the matrix B.
  533. *
  534. CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
  535. $ LDB, RESET, ZERO )
  536. *
  537. DO 60 IA = 1, NALF
  538. ALPHA = ALF( IA )
  539. *
  540. DO 50 IB = 1, NBET
  541. BETA = BET( IB )
  542. *
  543. * Generate the matrix C.
  544. *
  545. CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
  546. $ CC, LDC, RESET, ZERO )
  547. *
  548. NC = NC + 1
  549. *
  550. * Save every datum before calling the
  551. * subroutine.
  552. *
  553. TRANAS = TRANSA
  554. TRANBS = TRANSB
  555. MS = M
  556. NS = N
  557. KS = K
  558. ALS = ALPHA
  559. DO 10 I = 1, LAA
  560. AS( I ) = AA( I )
  561. 10 CONTINUE
  562. LDAS = LDA
  563. DO 20 I = 1, LBB
  564. BS( I ) = BB( I )
  565. 20 CONTINUE
  566. LDBS = LDB
  567. BLS = BETA
  568. DO 30 I = 1, LCC
  569. CS( I ) = CC( I )
  570. 30 CONTINUE
  571. LDCS = LDC
  572. *
  573. * Call the subroutine.
  574. *
  575. IF( TRACE )
  576. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  577. $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
  578. $ BETA, LDC
  579. IF( REWI )
  580. $ REWIND NTRA
  581. CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
  582. $ AA, LDA, BB, LDB, BETA, CC, LDC )
  583. *
  584. * Check if error-exit was taken incorrectly.
  585. *
  586. IF( .NOT.OK )THEN
  587. WRITE( NOUT, FMT = 9994 )
  588. FATAL = .TRUE.
  589. GO TO 120
  590. END IF
  591. *
  592. * See what data changed inside subroutines.
  593. *
  594. ISAME( 1 ) = TRANSA.EQ.TRANAS
  595. ISAME( 2 ) = TRANSB.EQ.TRANBS
  596. ISAME( 3 ) = MS.EQ.M
  597. ISAME( 4 ) = NS.EQ.N
  598. ISAME( 5 ) = KS.EQ.K
  599. ISAME( 6 ) = ALS.EQ.ALPHA
  600. ISAME( 7 ) = LCE( AS, AA, LAA )
  601. ISAME( 8 ) = LDAS.EQ.LDA
  602. ISAME( 9 ) = LCE( BS, BB, LBB )
  603. ISAME( 10 ) = LDBS.EQ.LDB
  604. ISAME( 11 ) = BLS.EQ.BETA
  605. IF( NULL )THEN
  606. ISAME( 12 ) = LCE( CS, CC, LCC )
  607. ELSE
  608. ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
  609. $ CC, LDC )
  610. END IF
  611. ISAME( 13 ) = LDCS.EQ.LDC
  612. *
  613. * If data was incorrectly changed, report
  614. * and return.
  615. *
  616. SAME = .TRUE.
  617. DO 40 I = 1, NARGS
  618. SAME = SAME.AND.ISAME( I )
  619. IF( .NOT.ISAME( I ) )
  620. $ WRITE( NOUT, FMT = 9998 )I
  621. 40 CONTINUE
  622. IF( .NOT.SAME )THEN
  623. FATAL = .TRUE.
  624. GO TO 120
  625. END IF
  626. *
  627. IF( .NOT.NULL )THEN
  628. *
  629. * Check the result.
  630. *
  631. CALL CMMCH( TRANSA, TRANSB, M, N, K,
  632. $ ALPHA, A, NMAX, B, NMAX, BETA,
  633. $ C, NMAX, CT, G, CC, LDC, EPS,
  634. $ ERR, FATAL, NOUT, .TRUE. )
  635. ERRMAX = MAX( ERRMAX, ERR )
  636. * If got really bad answer, report and
  637. * return.
  638. IF( FATAL )
  639. $ GO TO 120
  640. END IF
  641. *
  642. 50 CONTINUE
  643. *
  644. 60 CONTINUE
  645. *
  646. 70 CONTINUE
  647. *
  648. 80 CONTINUE
  649. *
  650. 90 CONTINUE
  651. *
  652. 100 CONTINUE
  653. *
  654. 110 CONTINUE
  655. *
  656. * Report result.
  657. *
  658. IF( ERRMAX.LT.THRESH )THEN
  659. WRITE( NOUT, FMT = 9999 )SNAME, NC
  660. ELSE
  661. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  662. END IF
  663. GO TO 130
  664. *
  665. 120 CONTINUE
  666. WRITE( NOUT, FMT = 9996 )SNAME
  667. WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
  668. $ ALPHA, LDA, LDB, BETA, LDC
  669. *
  670. 130 CONTINUE
  671. RETURN
  672. *
  673. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  674. $ 'S)' )
  675. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  676. $ 'ANGED INCORRECTLY *******' )
  677. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  678. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  679. $ ' - SUSPECT *******' )
  680. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  681. 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
  682. $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
  683. $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
  684. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  685. $ '******' )
  686. *
  687. * End of CCHK1.
  688. *
  689. END
  690. SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  691. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  692. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  693. *
  694. * Tests CHEMM and CSYMM.
  695. *
  696. * Auxiliary routine for test program for Level 3 Blas.
  697. *
  698. * -- Written on 8-February-1989.
  699. * Jack Dongarra, Argonne National Laboratory.
  700. * Iain Duff, AERE Harwell.
  701. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  702. * Sven Hammarling, Numerical Algorithms Group Ltd.
  703. *
  704. * .. Parameters ..
  705. COMPLEX ZERO
  706. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  707. REAL RZERO
  708. PARAMETER ( RZERO = 0.0 )
  709. * .. Scalar Arguments ..
  710. REAL EPS, THRESH
  711. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  712. LOGICAL FATAL, REWI, TRACE
  713. CHARACTER*6 SNAME
  714. * .. Array Arguments ..
  715. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  716. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  717. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  718. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  719. $ CS( NMAX*NMAX ), CT( NMAX )
  720. REAL G( NMAX )
  721. INTEGER IDIM( NIDIM )
  722. * .. Local Scalars ..
  723. COMPLEX ALPHA, ALS, BETA, BLS
  724. REAL ERR, ERRMAX
  725. INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
  726. $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
  727. $ NARGS, NC, NS
  728. LOGICAL CONJ, LEFT, NULL, RESET, SAME
  729. CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
  730. CHARACTER*2 ICHS, ICHU
  731. * .. Local Arrays ..
  732. LOGICAL ISAME( 13 )
  733. * .. External Functions ..
  734. LOGICAL LCE, LCERES
  735. EXTERNAL LCE, LCERES
  736. * .. External Subroutines ..
  737. EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
  738. * .. Intrinsic Functions ..
  739. INTRINSIC MAX
  740. * .. Scalars in Common ..
  741. INTEGER INFOT, NOUTC
  742. LOGICAL LERR, OK
  743. * .. Common blocks ..
  744. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  745. * .. Data statements ..
  746. DATA ICHS/'LR'/, ICHU/'UL'/
  747. * .. Executable Statements ..
  748. CONJ = SNAME( 2: 3 ).EQ.'HE'
  749. *
  750. NARGS = 12
  751. NC = 0
  752. RESET = .TRUE.
  753. ERRMAX = RZERO
  754. *
  755. DO 100 IM = 1, NIDIM
  756. M = IDIM( IM )
  757. *
  758. DO 90 IN = 1, NIDIM
  759. N = IDIM( IN )
  760. * Set LDC to 1 more than minimum value if room.
  761. LDC = M
  762. IF( LDC.LT.NMAX )
  763. $ LDC = LDC + 1
  764. * Skip tests if not enough room.
  765. IF( LDC.GT.NMAX )
  766. $ GO TO 90
  767. LCC = LDC*N
  768. NULL = N.LE.0.OR.M.LE.0
  769. * Set LDB to 1 more than minimum value if room.
  770. LDB = M
  771. IF( LDB.LT.NMAX )
  772. $ LDB = LDB + 1
  773. * Skip tests if not enough room.
  774. IF( LDB.GT.NMAX )
  775. $ GO TO 90
  776. LBB = LDB*N
  777. *
  778. * Generate the matrix B.
  779. *
  780. CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
  781. $ ZERO )
  782. *
  783. DO 80 ICS = 1, 2
  784. SIDE = ICHS( ICS: ICS )
  785. LEFT = SIDE.EQ.'L'
  786. *
  787. IF( LEFT )THEN
  788. NA = M
  789. ELSE
  790. NA = N
  791. END IF
  792. * Set LDA to 1 more than minimum value if room.
  793. LDA = NA
  794. IF( LDA.LT.NMAX )
  795. $ LDA = LDA + 1
  796. * Skip tests if not enough room.
  797. IF( LDA.GT.NMAX )
  798. $ GO TO 80
  799. LAA = LDA*NA
  800. *
  801. DO 70 ICU = 1, 2
  802. UPLO = ICHU( ICU: ICU )
  803. *
  804. * Generate the hermitian or symmetric matrix A.
  805. *
  806. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
  807. $ AA, LDA, RESET, ZERO )
  808. *
  809. DO 60 IA = 1, NALF
  810. ALPHA = ALF( IA )
  811. *
  812. DO 50 IB = 1, NBET
  813. BETA = BET( IB )
  814. *
  815. * Generate the matrix C.
  816. *
  817. CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
  818. $ LDC, RESET, ZERO )
  819. *
  820. NC = NC + 1
  821. *
  822. * Save every datum before calling the
  823. * subroutine.
  824. *
  825. SIDES = SIDE
  826. UPLOS = UPLO
  827. MS = M
  828. NS = N
  829. ALS = ALPHA
  830. DO 10 I = 1, LAA
  831. AS( I ) = AA( I )
  832. 10 CONTINUE
  833. LDAS = LDA
  834. DO 20 I = 1, LBB
  835. BS( I ) = BB( I )
  836. 20 CONTINUE
  837. LDBS = LDB
  838. BLS = BETA
  839. DO 30 I = 1, LCC
  840. CS( I ) = CC( I )
  841. 30 CONTINUE
  842. LDCS = LDC
  843. *
  844. * Call the subroutine.
  845. *
  846. IF( TRACE )
  847. $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
  848. $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
  849. IF( REWI )
  850. $ REWIND NTRA
  851. IF( CONJ )THEN
  852. CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
  853. $ BB, LDB, BETA, CC, LDC )
  854. ELSE
  855. CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
  856. $ BB, LDB, BETA, CC, LDC )
  857. END IF
  858. *
  859. * Check if error-exit was taken incorrectly.
  860. *
  861. IF( .NOT.OK )THEN
  862. WRITE( NOUT, FMT = 9994 )
  863. FATAL = .TRUE.
  864. GO TO 110
  865. END IF
  866. *
  867. * See what data changed inside subroutines.
  868. *
  869. ISAME( 1 ) = SIDES.EQ.SIDE
  870. ISAME( 2 ) = UPLOS.EQ.UPLO
  871. ISAME( 3 ) = MS.EQ.M
  872. ISAME( 4 ) = NS.EQ.N
  873. ISAME( 5 ) = ALS.EQ.ALPHA
  874. ISAME( 6 ) = LCE( AS, AA, LAA )
  875. ISAME( 7 ) = LDAS.EQ.LDA
  876. ISAME( 8 ) = LCE( BS, BB, LBB )
  877. ISAME( 9 ) = LDBS.EQ.LDB
  878. ISAME( 10 ) = BLS.EQ.BETA
  879. IF( NULL )THEN
  880. ISAME( 11 ) = LCE( CS, CC, LCC )
  881. ELSE
  882. ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
  883. $ CC, LDC )
  884. END IF
  885. ISAME( 12 ) = LDCS.EQ.LDC
  886. *
  887. * If data was incorrectly changed, report and
  888. * return.
  889. *
  890. SAME = .TRUE.
  891. DO 40 I = 1, NARGS
  892. SAME = SAME.AND.ISAME( I )
  893. IF( .NOT.ISAME( I ) )
  894. $ WRITE( NOUT, FMT = 9998 )I
  895. 40 CONTINUE
  896. IF( .NOT.SAME )THEN
  897. FATAL = .TRUE.
  898. GO TO 110
  899. END IF
  900. *
  901. IF( .NOT.NULL )THEN
  902. *
  903. * Check the result.
  904. *
  905. IF( LEFT )THEN
  906. CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
  907. $ NMAX, B, NMAX, BETA, C, NMAX,
  908. $ CT, G, CC, LDC, EPS, ERR,
  909. $ FATAL, NOUT, .TRUE. )
  910. ELSE
  911. CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
  912. $ NMAX, A, NMAX, BETA, C, NMAX,
  913. $ CT, G, CC, LDC, EPS, ERR,
  914. $ FATAL, NOUT, .TRUE. )
  915. END IF
  916. ERRMAX = MAX( ERRMAX, ERR )
  917. * If got really bad answer, report and
  918. * return.
  919. IF( FATAL )
  920. $ GO TO 110
  921. END IF
  922. *
  923. 50 CONTINUE
  924. *
  925. 60 CONTINUE
  926. *
  927. 70 CONTINUE
  928. *
  929. 80 CONTINUE
  930. *
  931. 90 CONTINUE
  932. *
  933. 100 CONTINUE
  934. *
  935. * Report result.
  936. *
  937. IF( ERRMAX.LT.THRESH )THEN
  938. WRITE( NOUT, FMT = 9999 )SNAME, NC
  939. ELSE
  940. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  941. END IF
  942. GO TO 120
  943. *
  944. 110 CONTINUE
  945. WRITE( NOUT, FMT = 9996 )SNAME
  946. WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
  947. $ LDB, BETA, LDC
  948. *
  949. 120 CONTINUE
  950. RETURN
  951. *
  952. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  953. $ 'S)' )
  954. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  955. $ 'ANGED INCORRECTLY *******' )
  956. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  957. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  958. $ ' - SUSPECT *******' )
  959. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  960. 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  961. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
  962. $ ',', F4.1, '), C,', I3, ') .' )
  963. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  964. $ '******' )
  965. *
  966. * End of CCHK2.
  967. *
  968. END
  969. SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  970. $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
  971. $ B, BB, BS, CT, G, C )
  972. *
  973. * Tests CTRMM and CTRSM.
  974. *
  975. * Auxiliary routine for test program for Level 3 Blas.
  976. *
  977. * -- Written on 8-February-1989.
  978. * Jack Dongarra, Argonne National Laboratory.
  979. * Iain Duff, AERE Harwell.
  980. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  981. * Sven Hammarling, Numerical Algorithms Group Ltd.
  982. *
  983. * .. Parameters ..
  984. COMPLEX ZERO, ONE
  985. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  986. REAL RZERO
  987. PARAMETER ( RZERO = 0.0 )
  988. * .. Scalar Arguments ..
  989. REAL EPS, THRESH
  990. INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
  991. LOGICAL FATAL, REWI, TRACE
  992. CHARACTER*6 SNAME
  993. * .. Array Arguments ..
  994. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  995. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  996. $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
  997. $ C( NMAX, NMAX ), CT( NMAX )
  998. REAL G( NMAX )
  999. INTEGER IDIM( NIDIM )
  1000. * .. Local Scalars ..
  1001. COMPLEX ALPHA, ALS
  1002. REAL ERR, ERRMAX
  1003. INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
  1004. $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
  1005. $ NS
  1006. LOGICAL LEFT, NULL, RESET, SAME
  1007. CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
  1008. $ UPLOS
  1009. CHARACTER*2 ICHD, ICHS, ICHU
  1010. CHARACTER*3 ICHT
  1011. * .. Local Arrays ..
  1012. LOGICAL ISAME( 13 )
  1013. * .. External Functions ..
  1014. LOGICAL LCE, LCERES
  1015. EXTERNAL LCE, LCERES
  1016. * .. External Subroutines ..
  1017. EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
  1018. * .. Intrinsic Functions ..
  1019. INTRINSIC MAX
  1020. * .. Scalars in Common ..
  1021. INTEGER INFOT, NOUTC
  1022. LOGICAL LERR, OK
  1023. * .. Common blocks ..
  1024. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1025. * .. Data statements ..
  1026. DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
  1027. * .. Executable Statements ..
  1028. *
  1029. NARGS = 11
  1030. NC = 0
  1031. RESET = .TRUE.
  1032. ERRMAX = RZERO
  1033. * Set up zero matrix for CMMCH.
  1034. DO 20 J = 1, NMAX
  1035. DO 10 I = 1, NMAX
  1036. C( I, J ) = ZERO
  1037. 10 CONTINUE
  1038. 20 CONTINUE
  1039. *
  1040. DO 140 IM = 1, NIDIM
  1041. M = IDIM( IM )
  1042. *
  1043. DO 130 IN = 1, NIDIM
  1044. N = IDIM( IN )
  1045. * Set LDB to 1 more than minimum value if room.
  1046. LDB = M
  1047. IF( LDB.LT.NMAX )
  1048. $ LDB = LDB + 1
  1049. * Skip tests if not enough room.
  1050. IF( LDB.GT.NMAX )
  1051. $ GO TO 130
  1052. LBB = LDB*N
  1053. NULL = M.LE.0.OR.N.LE.0
  1054. *
  1055. DO 120 ICS = 1, 2
  1056. SIDE = ICHS( ICS: ICS )
  1057. LEFT = SIDE.EQ.'L'
  1058. IF( LEFT )THEN
  1059. NA = M
  1060. ELSE
  1061. NA = N
  1062. END IF
  1063. * Set LDA to 1 more than minimum value if room.
  1064. LDA = NA
  1065. IF( LDA.LT.NMAX )
  1066. $ LDA = LDA + 1
  1067. * Skip tests if not enough room.
  1068. IF( LDA.GT.NMAX )
  1069. $ GO TO 130
  1070. LAA = LDA*NA
  1071. *
  1072. DO 110 ICU = 1, 2
  1073. UPLO = ICHU( ICU: ICU )
  1074. *
  1075. DO 100 ICT = 1, 3
  1076. TRANSA = ICHT( ICT: ICT )
  1077. *
  1078. DO 90 ICD = 1, 2
  1079. DIAG = ICHD( ICD: ICD )
  1080. *
  1081. DO 80 IA = 1, NALF
  1082. ALPHA = ALF( IA )
  1083. *
  1084. * Generate the matrix A.
  1085. *
  1086. CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
  1087. $ NMAX, AA, LDA, RESET, ZERO )
  1088. *
  1089. * Generate the matrix B.
  1090. *
  1091. CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
  1092. $ BB, LDB, RESET, ZERO )
  1093. *
  1094. NC = NC + 1
  1095. *
  1096. * Save every datum before calling the
  1097. * subroutine.
  1098. *
  1099. SIDES = SIDE
  1100. UPLOS = UPLO
  1101. TRANAS = TRANSA
  1102. DIAGS = DIAG
  1103. MS = M
  1104. NS = N
  1105. ALS = ALPHA
  1106. DO 30 I = 1, LAA
  1107. AS( I ) = AA( I )
  1108. 30 CONTINUE
  1109. LDAS = LDA
  1110. DO 40 I = 1, LBB
  1111. BS( I ) = BB( I )
  1112. 40 CONTINUE
  1113. LDBS = LDB
  1114. *
  1115. * Call the subroutine.
  1116. *
  1117. IF( SNAME( 4: 5 ).EQ.'MM' )THEN
  1118. IF( TRACE )
  1119. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  1120. $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
  1121. $ LDA, LDB
  1122. IF( REWI )
  1123. $ REWIND NTRA
  1124. CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
  1125. $ N, ALPHA, AA, LDA, BB, LDB )
  1126. ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
  1127. IF( TRACE )
  1128. $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
  1129. $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
  1130. $ LDA, LDB
  1131. IF( REWI )
  1132. $ REWIND NTRA
  1133. CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
  1134. $ N, ALPHA, AA, LDA, BB, LDB )
  1135. END IF
  1136. *
  1137. * Check if error-exit was taken incorrectly.
  1138. *
  1139. IF( .NOT.OK )THEN
  1140. WRITE( NOUT, FMT = 9994 )
  1141. FATAL = .TRUE.
  1142. GO TO 150
  1143. END IF
  1144. *
  1145. * See what data changed inside subroutines.
  1146. *
  1147. ISAME( 1 ) = SIDES.EQ.SIDE
  1148. ISAME( 2 ) = UPLOS.EQ.UPLO
  1149. ISAME( 3 ) = TRANAS.EQ.TRANSA
  1150. ISAME( 4 ) = DIAGS.EQ.DIAG
  1151. ISAME( 5 ) = MS.EQ.M
  1152. ISAME( 6 ) = NS.EQ.N
  1153. ISAME( 7 ) = ALS.EQ.ALPHA
  1154. ISAME( 8 ) = LCE( AS, AA, LAA )
  1155. ISAME( 9 ) = LDAS.EQ.LDA
  1156. IF( NULL )THEN
  1157. ISAME( 10 ) = LCE( BS, BB, LBB )
  1158. ELSE
  1159. ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
  1160. $ BB, LDB )
  1161. END IF
  1162. ISAME( 11 ) = LDBS.EQ.LDB
  1163. *
  1164. * If data was incorrectly changed, report and
  1165. * return.
  1166. *
  1167. SAME = .TRUE.
  1168. DO 50 I = 1, NARGS
  1169. SAME = SAME.AND.ISAME( I )
  1170. IF( .NOT.ISAME( I ) )
  1171. $ WRITE( NOUT, FMT = 9998 )I
  1172. 50 CONTINUE
  1173. IF( .NOT.SAME )THEN
  1174. FATAL = .TRUE.
  1175. GO TO 150
  1176. END IF
  1177. *
  1178. IF( .NOT.NULL )THEN
  1179. IF( SNAME( 4: 5 ).EQ.'MM' )THEN
  1180. *
  1181. * Check the result.
  1182. *
  1183. IF( LEFT )THEN
  1184. CALL CMMCH( TRANSA, 'N', M, N, M,
  1185. $ ALPHA, A, NMAX, B, NMAX,
  1186. $ ZERO, C, NMAX, CT, G,
  1187. $ BB, LDB, EPS, ERR,
  1188. $ FATAL, NOUT, .TRUE. )
  1189. ELSE
  1190. CALL CMMCH( 'N', TRANSA, M, N, N,
  1191. $ ALPHA, B, NMAX, A, NMAX,
  1192. $ ZERO, C, NMAX, CT, G,
  1193. $ BB, LDB, EPS, ERR,
  1194. $ FATAL, NOUT, .TRUE. )
  1195. END IF
  1196. ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
  1197. *
  1198. * Compute approximation to original
  1199. * matrix.
  1200. *
  1201. DO 70 J = 1, N
  1202. DO 60 I = 1, M
  1203. C( I, J ) = BB( I + ( J - 1 )*
  1204. $ LDB )
  1205. BB( I + ( J - 1 )*LDB ) = ALPHA*
  1206. $ B( I, J )
  1207. 60 CONTINUE
  1208. 70 CONTINUE
  1209. *
  1210. IF( LEFT )THEN
  1211. CALL CMMCH( TRANSA, 'N', M, N, M,
  1212. $ ONE, A, NMAX, C, NMAX,
  1213. $ ZERO, B, NMAX, CT, G,
  1214. $ BB, LDB, EPS, ERR,
  1215. $ FATAL, NOUT, .FALSE. )
  1216. ELSE
  1217. CALL CMMCH( 'N', TRANSA, M, N, N,
  1218. $ ONE, C, NMAX, A, NMAX,
  1219. $ ZERO, B, NMAX, CT, G,
  1220. $ BB, LDB, EPS, ERR,
  1221. $ FATAL, NOUT, .FALSE. )
  1222. END IF
  1223. END IF
  1224. ERRMAX = MAX( ERRMAX, ERR )
  1225. * If got really bad answer, report and
  1226. * return.
  1227. IF( FATAL )
  1228. $ GO TO 150
  1229. END IF
  1230. *
  1231. 80 CONTINUE
  1232. *
  1233. 90 CONTINUE
  1234. *
  1235. 100 CONTINUE
  1236. *
  1237. 110 CONTINUE
  1238. *
  1239. 120 CONTINUE
  1240. *
  1241. 130 CONTINUE
  1242. *
  1243. 140 CONTINUE
  1244. *
  1245. * Report result.
  1246. *
  1247. IF( ERRMAX.LT.THRESH )THEN
  1248. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1249. ELSE
  1250. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1251. END IF
  1252. GO TO 160
  1253. *
  1254. 150 CONTINUE
  1255. WRITE( NOUT, FMT = 9996 )SNAME
  1256. WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
  1257. $ N, ALPHA, LDA, LDB
  1258. *
  1259. 160 CONTINUE
  1260. RETURN
  1261. *
  1262. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1263. $ 'S)' )
  1264. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1265. $ 'ANGED INCORRECTLY *******' )
  1266. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1267. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1268. $ ' - SUSPECT *******' )
  1269. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1270. 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
  1271. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
  1272. $ ' .' )
  1273. 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1274. $ '******' )
  1275. *
  1276. * End of CCHK3.
  1277. *
  1278. END
  1279. SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  1280. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  1281. $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
  1282. *
  1283. * Tests CHERK and CSYRK.
  1284. *
  1285. * Auxiliary routine for test program for Level 3 Blas.
  1286. *
  1287. * -- Written on 8-February-1989.
  1288. * Jack Dongarra, Argonne National Laboratory.
  1289. * Iain Duff, AERE Harwell.
  1290. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1291. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1292. *
  1293. * .. Parameters ..
  1294. COMPLEX ZERO
  1295. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  1296. REAL RONE, RZERO
  1297. PARAMETER ( RONE = 1.0, RZERO = 0.0 )
  1298. * .. Scalar Arguments ..
  1299. REAL EPS, THRESH
  1300. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  1301. LOGICAL FATAL, REWI, TRACE
  1302. CHARACTER*6 SNAME
  1303. * .. Array Arguments ..
  1304. COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  1305. $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
  1306. $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  1307. $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
  1308. $ CS( NMAX*NMAX ), CT( NMAX )
  1309. REAL G( NMAX )
  1310. INTEGER IDIM( NIDIM )
  1311. * .. Local Scalars ..
  1312. COMPLEX ALPHA, ALS, BETA, BETS
  1313. REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
  1314. INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
  1315. $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
  1316. $ NARGS, NC, NS
  1317. LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
  1318. CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
  1319. CHARACTER*2 ICHT, ICHU
  1320. * .. Local Arrays ..
  1321. LOGICAL ISAME( 13 )
  1322. * .. External Functions ..
  1323. LOGICAL LCE, LCERES
  1324. EXTERNAL LCE, LCERES
  1325. * .. External Subroutines ..
  1326. EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
  1327. * .. Intrinsic Functions ..
  1328. INTRINSIC CMPLX, MAX, REAL
  1329. * .. Scalars in Common ..
  1330. INTEGER INFOT, NOUTC
  1331. LOGICAL LERR, OK
  1332. * .. Common blocks ..
  1333. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1334. * .. Data statements ..
  1335. DATA ICHT/'NC'/, ICHU/'UL'/
  1336. * .. Executable Statements ..
  1337. CONJ = SNAME( 2: 3 ).EQ.'HE'
  1338. *
  1339. NARGS = 10
  1340. NC = 0
  1341. RESET = .TRUE.
  1342. ERRMAX = RZERO
  1343. *
  1344. DO 100 IN = 1, NIDIM
  1345. N = IDIM( IN )
  1346. * Set LDC to 1 more than minimum value if room.
  1347. LDC = N
  1348. IF( LDC.LT.NMAX )
  1349. $ LDC = LDC + 1
  1350. * Skip tests if not enough room.
  1351. IF( LDC.GT.NMAX )
  1352. $ GO TO 100
  1353. LCC = LDC*N
  1354. *
  1355. DO 90 IK = 1, NIDIM
  1356. K = IDIM( IK )
  1357. *
  1358. DO 80 ICT = 1, 2
  1359. TRANS = ICHT( ICT: ICT )
  1360. TRAN = TRANS.EQ.'C'
  1361. IF( TRAN.AND..NOT.CONJ )
  1362. $ TRANS = 'T'
  1363. IF( TRAN )THEN
  1364. MA = K
  1365. NA = N
  1366. ELSE
  1367. MA = N
  1368. NA = K
  1369. END IF
  1370. * Set LDA to 1 more than minimum value if room.
  1371. LDA = MA
  1372. IF( LDA.LT.NMAX )
  1373. $ LDA = LDA + 1
  1374. * Skip tests if not enough room.
  1375. IF( LDA.GT.NMAX )
  1376. $ GO TO 80
  1377. LAA = LDA*NA
  1378. *
  1379. * Generate the matrix A.
  1380. *
  1381. CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
  1382. $ RESET, ZERO )
  1383. *
  1384. DO 70 ICU = 1, 2
  1385. UPLO = ICHU( ICU: ICU )
  1386. UPPER = UPLO.EQ.'U'
  1387. *
  1388. DO 60 IA = 1, NALF
  1389. ALPHA = ALF( IA )
  1390. IF( CONJ )THEN
  1391. RALPHA = REAL( ALPHA )
  1392. ALPHA = CMPLX( RALPHA, RZERO )
  1393. END IF
  1394. *
  1395. DO 50 IB = 1, NBET
  1396. BETA = BET( IB )
  1397. IF( CONJ )THEN
  1398. RBETA = REAL( BETA )
  1399. BETA = CMPLX( RBETA, RZERO )
  1400. END IF
  1401. NULL = N.LE.0
  1402. IF( CONJ )
  1403. $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
  1404. $ RZERO ).AND.RBETA.EQ.RONE )
  1405. *
  1406. * Generate the matrix C.
  1407. *
  1408. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
  1409. $ NMAX, CC, LDC, RESET, ZERO )
  1410. *
  1411. NC = NC + 1
  1412. *
  1413. * Save every datum before calling the subroutine.
  1414. *
  1415. UPLOS = UPLO
  1416. TRANSS = TRANS
  1417. NS = N
  1418. KS = K
  1419. IF( CONJ )THEN
  1420. RALS = RALPHA
  1421. ELSE
  1422. ALS = ALPHA
  1423. END IF
  1424. DO 10 I = 1, LAA
  1425. AS( I ) = AA( I )
  1426. 10 CONTINUE
  1427. LDAS = LDA
  1428. IF( CONJ )THEN
  1429. RBETS = RBETA
  1430. ELSE
  1431. BETS = BETA
  1432. END IF
  1433. DO 20 I = 1, LCC
  1434. CS( I ) = CC( I )
  1435. 20 CONTINUE
  1436. LDCS = LDC
  1437. *
  1438. * Call the subroutine.
  1439. *
  1440. IF( CONJ )THEN
  1441. IF( TRACE )
  1442. $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
  1443. $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
  1444. IF( REWI )
  1445. $ REWIND NTRA
  1446. CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
  1447. $ LDA, RBETA, CC, LDC )
  1448. ELSE
  1449. IF( TRACE )
  1450. $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
  1451. $ TRANS, N, K, ALPHA, LDA, BETA, LDC
  1452. IF( REWI )
  1453. $ REWIND NTRA
  1454. CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
  1455. $ LDA, BETA, CC, LDC )
  1456. END IF
  1457. *
  1458. * Check if error-exit was taken incorrectly.
  1459. *
  1460. IF( .NOT.OK )THEN
  1461. WRITE( NOUT, FMT = 9992 )
  1462. FATAL = .TRUE.
  1463. GO TO 120
  1464. END IF
  1465. *
  1466. * See what data changed inside subroutines.
  1467. *
  1468. ISAME( 1 ) = UPLOS.EQ.UPLO
  1469. ISAME( 2 ) = TRANSS.EQ.TRANS
  1470. ISAME( 3 ) = NS.EQ.N
  1471. ISAME( 4 ) = KS.EQ.K
  1472. IF( CONJ )THEN
  1473. ISAME( 5 ) = RALS.EQ.RALPHA
  1474. ELSE
  1475. ISAME( 5 ) = ALS.EQ.ALPHA
  1476. END IF
  1477. ISAME( 6 ) = LCE( AS, AA, LAA )
  1478. ISAME( 7 ) = LDAS.EQ.LDA
  1479. IF( CONJ )THEN
  1480. ISAME( 8 ) = RBETS.EQ.RBETA
  1481. ELSE
  1482. ISAME( 8 ) = BETS.EQ.BETA
  1483. END IF
  1484. IF( NULL )THEN
  1485. ISAME( 9 ) = LCE( CS, CC, LCC )
  1486. ELSE
  1487. ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
  1488. $ N, CS, CC, LDC )
  1489. END IF
  1490. ISAME( 10 ) = LDCS.EQ.LDC
  1491. *
  1492. * If data was incorrectly changed, report and
  1493. * return.
  1494. *
  1495. SAME = .TRUE.
  1496. DO 30 I = 1, NARGS
  1497. SAME = SAME.AND.ISAME( I )
  1498. IF( .NOT.ISAME( I ) )
  1499. $ WRITE( NOUT, FMT = 9998 )I
  1500. 30 CONTINUE
  1501. IF( .NOT.SAME )THEN
  1502. FATAL = .TRUE.
  1503. GO TO 120
  1504. END IF
  1505. *
  1506. IF( .NOT.NULL )THEN
  1507. *
  1508. * Check the result column by column.
  1509. *
  1510. IF( CONJ )THEN
  1511. TRANST = 'C'
  1512. ELSE
  1513. TRANST = 'T'
  1514. END IF
  1515. JC = 1
  1516. DO 40 J = 1, N
  1517. IF( UPPER )THEN
  1518. JJ = 1
  1519. LJ = J
  1520. ELSE
  1521. JJ = J
  1522. LJ = N - J + 1
  1523. END IF
  1524. IF( TRAN )THEN
  1525. CALL CMMCH( TRANST, 'N', LJ, 1, K,
  1526. $ ALPHA, A( 1, JJ ), NMAX,
  1527. $ A( 1, J ), NMAX, BETA,
  1528. $ C( JJ, J ), NMAX, CT, G,
  1529. $ CC( JC ), LDC, EPS, ERR,
  1530. $ FATAL, NOUT, .TRUE. )
  1531. ELSE
  1532. CALL CMMCH( 'N', TRANST, LJ, 1, K,
  1533. $ ALPHA, A( JJ, 1 ), NMAX,
  1534. $ A( J, 1 ), NMAX, BETA,
  1535. $ C( JJ, J ), NMAX, CT, G,
  1536. $ CC( JC ), LDC, EPS, ERR,
  1537. $ FATAL, NOUT, .TRUE. )
  1538. END IF
  1539. IF( UPPER )THEN
  1540. JC = JC + LDC
  1541. ELSE
  1542. JC = JC + LDC + 1
  1543. END IF
  1544. ERRMAX = MAX( ERRMAX, ERR )
  1545. * If got really bad answer, report and
  1546. * return.
  1547. IF( FATAL )
  1548. $ GO TO 110
  1549. 40 CONTINUE
  1550. END IF
  1551. *
  1552. 50 CONTINUE
  1553. *
  1554. 60 CONTINUE
  1555. *
  1556. 70 CONTINUE
  1557. *
  1558. 80 CONTINUE
  1559. *
  1560. 90 CONTINUE
  1561. *
  1562. 100 CONTINUE
  1563. *
  1564. * Report result.
  1565. *
  1566. IF( ERRMAX.LT.THRESH )THEN
  1567. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1568. ELSE
  1569. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1570. END IF
  1571. GO TO 130
  1572. *
  1573. 110 CONTINUE
  1574. IF( N.GT.1 )
  1575. $ WRITE( NOUT, FMT = 9995 )J
  1576. *
  1577. 120 CONTINUE
  1578. WRITE( NOUT, FMT = 9996 )SNAME
  1579. IF( CONJ )THEN
  1580. WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
  1581. $ LDA, RBETA, LDC
  1582. ELSE
  1583. WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1584. $ LDA, BETA, LDC
  1585. END IF
  1586. *
  1587. 130 CONTINUE
  1588. RETURN
  1589. *
  1590. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1591. $ 'S)' )
  1592. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1593. $ 'ANGED INCORRECTLY *******' )
  1594. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1595. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1596. $ ' - SUSPECT *******' )
  1597. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1598. 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  1599. 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1600. $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
  1601. $ ' .' )
  1602. 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1603. $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
  1604. $ '), C,', I3, ') .' )
  1605. 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1606. $ '******' )
  1607. *
  1608. * End of CCHK4.
  1609. *
  1610. END
  1611. SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
  1612. $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
  1613. $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
  1614. *
  1615. * Tests CHER2K and CSYR2K.
  1616. *
  1617. * Auxiliary routine for test program for Level 3 Blas.
  1618. *
  1619. * -- Written on 8-February-1989.
  1620. * Jack Dongarra, Argonne National Laboratory.
  1621. * Iain Duff, AERE Harwell.
  1622. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1623. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1624. *
  1625. * .. Parameters ..
  1626. COMPLEX ZERO, ONE
  1627. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  1628. REAL RONE, RZERO
  1629. PARAMETER ( RONE = 1.0, RZERO = 0.0 )
  1630. * .. Scalar Arguments ..
  1631. REAL EPS, THRESH
  1632. INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  1633. LOGICAL FATAL, REWI, TRACE
  1634. CHARACTER*6 SNAME
  1635. * .. Array Arguments ..
  1636. COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
  1637. $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
  1638. $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
  1639. $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
  1640. $ W( 2*NMAX )
  1641. REAL G( NMAX )
  1642. INTEGER IDIM( NIDIM )
  1643. * .. Local Scalars ..
  1644. COMPLEX ALPHA, ALS, BETA, BETS
  1645. REAL ERR, ERRMAX, RBETA, RBETS
  1646. INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
  1647. $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
  1648. $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
  1649. LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
  1650. CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
  1651. CHARACTER*2 ICHT, ICHU
  1652. * .. Local Arrays ..
  1653. LOGICAL ISAME( 13 )
  1654. * .. External Functions ..
  1655. LOGICAL LCE, LCERES
  1656. EXTERNAL LCE, LCERES
  1657. * .. External Subroutines ..
  1658. EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
  1659. * .. Intrinsic Functions ..
  1660. INTRINSIC CMPLX, CONJG, MAX, REAL
  1661. * .. Scalars in Common ..
  1662. INTEGER INFOT, NOUTC
  1663. LOGICAL LERR, OK
  1664. * .. Common blocks ..
  1665. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  1666. * .. Data statements ..
  1667. DATA ICHT/'NC'/, ICHU/'UL'/
  1668. * .. Executable Statements ..
  1669. CONJ = SNAME( 2: 3 ).EQ.'HE'
  1670. *
  1671. NARGS = 12
  1672. NC = 0
  1673. RESET = .TRUE.
  1674. ERRMAX = RZERO
  1675. *
  1676. DO 130 IN = 1, NIDIM
  1677. N = IDIM( IN )
  1678. * Set LDC to 1 more than minimum value if room.
  1679. LDC = N
  1680. IF( LDC.LT.NMAX )
  1681. $ LDC = LDC + 1
  1682. * Skip tests if not enough room.
  1683. IF( LDC.GT.NMAX )
  1684. $ GO TO 130
  1685. LCC = LDC*N
  1686. *
  1687. DO 120 IK = 1, NIDIM
  1688. K = IDIM( IK )
  1689. *
  1690. DO 110 ICT = 1, 2
  1691. TRANS = ICHT( ICT: ICT )
  1692. TRAN = TRANS.EQ.'C'
  1693. IF( TRAN.AND..NOT.CONJ )
  1694. $ TRANS = 'T'
  1695. IF( TRAN )THEN
  1696. MA = K
  1697. NA = N
  1698. ELSE
  1699. MA = N
  1700. NA = K
  1701. END IF
  1702. * Set LDA to 1 more than minimum value if room.
  1703. LDA = MA
  1704. IF( LDA.LT.NMAX )
  1705. $ LDA = LDA + 1
  1706. * Skip tests if not enough room.
  1707. IF( LDA.GT.NMAX )
  1708. $ GO TO 110
  1709. LAA = LDA*NA
  1710. *
  1711. * Generate the matrix A.
  1712. *
  1713. IF( TRAN )THEN
  1714. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
  1715. $ LDA, RESET, ZERO )
  1716. ELSE
  1717. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
  1718. $ RESET, ZERO )
  1719. END IF
  1720. *
  1721. * Generate the matrix B.
  1722. *
  1723. LDB = LDA
  1724. LBB = LAA
  1725. IF( TRAN )THEN
  1726. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
  1727. $ 2*NMAX, BB, LDB, RESET, ZERO )
  1728. ELSE
  1729. CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
  1730. $ NMAX, BB, LDB, RESET, ZERO )
  1731. END IF
  1732. *
  1733. DO 100 ICU = 1, 2
  1734. UPLO = ICHU( ICU: ICU )
  1735. UPPER = UPLO.EQ.'U'
  1736. *
  1737. DO 90 IA = 1, NALF
  1738. ALPHA = ALF( IA )
  1739. *
  1740. DO 80 IB = 1, NBET
  1741. BETA = BET( IB )
  1742. IF( CONJ )THEN
  1743. RBETA = REAL( BETA )
  1744. BETA = CMPLX( RBETA, RZERO )
  1745. END IF
  1746. NULL = N.LE.0
  1747. IF( CONJ )
  1748. $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
  1749. $ ZERO ).AND.RBETA.EQ.RONE )
  1750. *
  1751. * Generate the matrix C.
  1752. *
  1753. CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
  1754. $ NMAX, CC, LDC, RESET, ZERO )
  1755. *
  1756. NC = NC + 1
  1757. *
  1758. * Save every datum before calling the subroutine.
  1759. *
  1760. UPLOS = UPLO
  1761. TRANSS = TRANS
  1762. NS = N
  1763. KS = K
  1764. ALS = ALPHA
  1765. DO 10 I = 1, LAA
  1766. AS( I ) = AA( I )
  1767. 10 CONTINUE
  1768. LDAS = LDA
  1769. DO 20 I = 1, LBB
  1770. BS( I ) = BB( I )
  1771. 20 CONTINUE
  1772. LDBS = LDB
  1773. IF( CONJ )THEN
  1774. RBETS = RBETA
  1775. ELSE
  1776. BETS = BETA
  1777. END IF
  1778. DO 30 I = 1, LCC
  1779. CS( I ) = CC( I )
  1780. 30 CONTINUE
  1781. LDCS = LDC
  1782. *
  1783. * Call the subroutine.
  1784. *
  1785. IF( CONJ )THEN
  1786. IF( TRACE )
  1787. $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
  1788. $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
  1789. IF( REWI )
  1790. $ REWIND NTRA
  1791. CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
  1792. $ LDA, BB, LDB, RBETA, CC, LDC )
  1793. ELSE
  1794. IF( TRACE )
  1795. $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
  1796. $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
  1797. IF( REWI )
  1798. $ REWIND NTRA
  1799. CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
  1800. $ LDA, BB, LDB, BETA, CC, LDC )
  1801. END IF
  1802. *
  1803. * Check if error-exit was taken incorrectly.
  1804. *
  1805. IF( .NOT.OK )THEN
  1806. WRITE( NOUT, FMT = 9992 )
  1807. FATAL = .TRUE.
  1808. GO TO 150
  1809. END IF
  1810. *
  1811. * See what data changed inside subroutines.
  1812. *
  1813. ISAME( 1 ) = UPLOS.EQ.UPLO
  1814. ISAME( 2 ) = TRANSS.EQ.TRANS
  1815. ISAME( 3 ) = NS.EQ.N
  1816. ISAME( 4 ) = KS.EQ.K
  1817. ISAME( 5 ) = ALS.EQ.ALPHA
  1818. ISAME( 6 ) = LCE( AS, AA, LAA )
  1819. ISAME( 7 ) = LDAS.EQ.LDA
  1820. ISAME( 8 ) = LCE( BS, BB, LBB )
  1821. ISAME( 9 ) = LDBS.EQ.LDB
  1822. IF( CONJ )THEN
  1823. ISAME( 10 ) = RBETS.EQ.RBETA
  1824. ELSE
  1825. ISAME( 10 ) = BETS.EQ.BETA
  1826. END IF
  1827. IF( NULL )THEN
  1828. ISAME( 11 ) = LCE( CS, CC, LCC )
  1829. ELSE
  1830. ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
  1831. $ CC, LDC )
  1832. END IF
  1833. ISAME( 12 ) = LDCS.EQ.LDC
  1834. *
  1835. * If data was incorrectly changed, report and
  1836. * return.
  1837. *
  1838. SAME = .TRUE.
  1839. DO 40 I = 1, NARGS
  1840. SAME = SAME.AND.ISAME( I )
  1841. IF( .NOT.ISAME( I ) )
  1842. $ WRITE( NOUT, FMT = 9998 )I
  1843. 40 CONTINUE
  1844. IF( .NOT.SAME )THEN
  1845. FATAL = .TRUE.
  1846. GO TO 150
  1847. END IF
  1848. *
  1849. IF( .NOT.NULL )THEN
  1850. *
  1851. * Check the result column by column.
  1852. *
  1853. IF( CONJ )THEN
  1854. TRANST = 'C'
  1855. ELSE
  1856. TRANST = 'T'
  1857. END IF
  1858. JJAB = 1
  1859. JC = 1
  1860. DO 70 J = 1, N
  1861. IF( UPPER )THEN
  1862. JJ = 1
  1863. LJ = J
  1864. ELSE
  1865. JJ = J
  1866. LJ = N - J + 1
  1867. END IF
  1868. IF( TRAN )THEN
  1869. DO 50 I = 1, K
  1870. W( I ) = ALPHA*AB( ( J - 1 )*2*
  1871. $ NMAX + K + I )
  1872. IF( CONJ )THEN
  1873. W( K + I ) = CONJG( ALPHA )*
  1874. $ AB( ( J - 1 )*2*
  1875. $ NMAX + I )
  1876. ELSE
  1877. W( K + I ) = ALPHA*
  1878. $ AB( ( J - 1 )*2*
  1879. $ NMAX + I )
  1880. END IF
  1881. 50 CONTINUE
  1882. CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
  1883. $ ONE, AB( JJAB ), 2*NMAX, W,
  1884. $ 2*NMAX, BETA, C( JJ, J ),
  1885. $ NMAX, CT, G, CC( JC ), LDC,
  1886. $ EPS, ERR, FATAL, NOUT,
  1887. $ .TRUE. )
  1888. ELSE
  1889. DO 60 I = 1, K
  1890. IF( CONJ )THEN
  1891. W( I ) = ALPHA*CONJG( AB( ( K +
  1892. $ I - 1 )*NMAX + J ) )
  1893. W( K + I ) = CONJG( ALPHA*
  1894. $ AB( ( I - 1 )*NMAX +
  1895. $ J ) )
  1896. ELSE
  1897. W( I ) = ALPHA*AB( ( K + I - 1 )*
  1898. $ NMAX + J )
  1899. W( K + I ) = ALPHA*
  1900. $ AB( ( I - 1 )*NMAX +
  1901. $ J )
  1902. END IF
  1903. 60 CONTINUE
  1904. CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
  1905. $ AB( JJ ), NMAX, W, 2*NMAX,
  1906. $ BETA, C( JJ, J ), NMAX, CT,
  1907. $ G, CC( JC ), LDC, EPS, ERR,
  1908. $ FATAL, NOUT, .TRUE. )
  1909. END IF
  1910. IF( UPPER )THEN
  1911. JC = JC + LDC
  1912. ELSE
  1913. JC = JC + LDC + 1
  1914. IF( TRAN )
  1915. $ JJAB = JJAB + 2*NMAX
  1916. END IF
  1917. ERRMAX = MAX( ERRMAX, ERR )
  1918. * If got really bad answer, report and
  1919. * return.
  1920. IF( FATAL )
  1921. $ GO TO 140
  1922. 70 CONTINUE
  1923. END IF
  1924. *
  1925. 80 CONTINUE
  1926. *
  1927. 90 CONTINUE
  1928. *
  1929. 100 CONTINUE
  1930. *
  1931. 110 CONTINUE
  1932. *
  1933. 120 CONTINUE
  1934. *
  1935. 130 CONTINUE
  1936. *
  1937. * Report result.
  1938. *
  1939. IF( ERRMAX.LT.THRESH )THEN
  1940. WRITE( NOUT, FMT = 9999 )SNAME, NC
  1941. ELSE
  1942. WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
  1943. END IF
  1944. GO TO 160
  1945. *
  1946. 140 CONTINUE
  1947. IF( N.GT.1 )
  1948. $ WRITE( NOUT, FMT = 9995 )J
  1949. *
  1950. 150 CONTINUE
  1951. WRITE( NOUT, FMT = 9996 )SNAME
  1952. IF( CONJ )THEN
  1953. WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1954. $ LDA, LDB, RBETA, LDC
  1955. ELSE
  1956. WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
  1957. $ LDA, LDB, BETA, LDC
  1958. END IF
  1959. *
  1960. 160 CONTINUE
  1961. RETURN
  1962. *
  1963. 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
  1964. $ 'S)' )
  1965. 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
  1966. $ 'ANGED INCORRECTLY *******' )
  1967. 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
  1968. $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
  1969. $ ' - SUSPECT *******' )
  1970. 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
  1971. 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  1972. 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1973. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
  1974. $ ', C,', I3, ') .' )
  1975. 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
  1976. $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
  1977. $ ',', F4.1, '), C,', I3, ') .' )
  1978. 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  1979. $ '******' )
  1980. *
  1981. * End of CCHK5.
  1982. *
  1983. END
  1984. SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
  1985. *
  1986. * Tests the error exits from the Level 3 Blas.
  1987. * Requires a special version of the error-handling routine XERBLA.
  1988. * A, B and C should not need to be defined.
  1989. *
  1990. * Auxiliary routine for test program for Level 3 Blas.
  1991. *
  1992. * -- Written on 8-February-1989.
  1993. * Jack Dongarra, Argonne National Laboratory.
  1994. * Iain Duff, AERE Harwell.
  1995. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  1996. * Sven Hammarling, Numerical Algorithms Group Ltd.
  1997. *
  1998. * 3-19-92: Initialize ALPHA, BETA, RALPHA, and RBETA (eca)
  1999. * 3-19-92: Fix argument 12 in calls to CSYMM and CHEMM
  2000. * with INFOT = 9 (eca)
  2001. *
  2002. * .. Scalar Arguments ..
  2003. INTEGER ISNUM, NOUT
  2004. CHARACTER*6 SRNAMT
  2005. * .. Scalars in Common ..
  2006. INTEGER INFOT, NOUTC
  2007. LOGICAL LERR, OK
  2008. * .. Parameters ..
  2009. REAL ONE, TWO
  2010. PARAMETER ( ONE = 1.0E0, TWO = 2.0E0 )
  2011. * .. Local Scalars ..
  2012. COMPLEX ALPHA, BETA
  2013. REAL RALPHA, RBETA
  2014. * .. Local Arrays ..
  2015. COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
  2016. * .. External Subroutines ..
  2017. EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
  2018. $ CSYR2K, CSYRK, CTRMM, CTRSM
  2019. * .. Common blocks ..
  2020. COMMON /INFOC/INFOT, NOUTC, OK, LERR
  2021. * .. Executable Statements ..
  2022. * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
  2023. * if anything is wrong.
  2024. OK = .TRUE.
  2025. * LERR is set to .TRUE. by the special version of XERBLA each time
  2026. * it is called, and is then tested and re-set by CHKXER.
  2027. LERR = .FALSE.
  2028. *
  2029. * Initialize ALPHA, BETA, RALPHA, and RBETA.
  2030. *
  2031. ALPHA = CMPLX( ONE, -ONE )
  2032. BETA = CMPLX( TWO, -TWO )
  2033. RALPHA = ONE
  2034. RBETA = TWO
  2035. *
  2036. GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
  2037. $ 90 )ISNUM
  2038. 10 INFOT = 1
  2039. CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2040. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2041. INFOT = 1
  2042. CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2043. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2044. INFOT = 1
  2045. CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2046. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2047. INFOT = 2
  2048. CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2049. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2050. INFOT = 2
  2051. CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2052. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2053. INFOT = 2
  2054. CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2055. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2056. INFOT = 3
  2057. CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2058. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2059. INFOT = 3
  2060. CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2061. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2062. INFOT = 3
  2063. CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2064. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2065. INFOT = 3
  2066. CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2067. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2068. INFOT = 3
  2069. CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2070. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2071. INFOT = 3
  2072. CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2073. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2074. INFOT = 3
  2075. CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2076. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2077. INFOT = 3
  2078. CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2079. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2080. INFOT = 3
  2081. CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2082. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2083. INFOT = 4
  2084. CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2085. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2086. INFOT = 4
  2087. CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2088. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2089. INFOT = 4
  2090. CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2091. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2092. INFOT = 4
  2093. CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2094. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2095. INFOT = 4
  2096. CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2097. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2098. INFOT = 4
  2099. CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2100. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2101. INFOT = 4
  2102. CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2103. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2104. INFOT = 4
  2105. CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2106. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2107. INFOT = 4
  2108. CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2109. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2110. INFOT = 5
  2111. CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2112. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2113. INFOT = 5
  2114. CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2115. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2116. INFOT = 5
  2117. CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2118. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2119. INFOT = 5
  2120. CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2121. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2122. INFOT = 5
  2123. CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2124. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2125. INFOT = 5
  2126. CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2127. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2128. INFOT = 5
  2129. CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2130. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2131. INFOT = 5
  2132. CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2133. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2134. INFOT = 5
  2135. CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2136. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2137. INFOT = 8
  2138. CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2139. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2140. INFOT = 8
  2141. CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2142. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2143. INFOT = 8
  2144. CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2145. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2146. INFOT = 8
  2147. CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2148. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2149. INFOT = 8
  2150. CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2151. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2152. INFOT = 8
  2153. CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2154. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2155. INFOT = 8
  2156. CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2157. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2158. INFOT = 8
  2159. CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2160. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2161. INFOT = 8
  2162. CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2163. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2164. INFOT = 10
  2165. CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2166. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2167. INFOT = 10
  2168. CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2169. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2170. INFOT = 10
  2171. CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2172. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2173. INFOT = 10
  2174. CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2175. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2176. INFOT = 10
  2177. CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2178. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2179. INFOT = 10
  2180. CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2181. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2182. INFOT = 10
  2183. CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2184. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2185. INFOT = 10
  2186. CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2187. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2188. INFOT = 10
  2189. CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2190. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2191. INFOT = 13
  2192. CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2193. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2194. INFOT = 13
  2195. CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2196. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2197. INFOT = 13
  2198. CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2199. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2200. INFOT = 13
  2201. CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2202. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2203. INFOT = 13
  2204. CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2205. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2206. INFOT = 13
  2207. CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2208. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2209. INFOT = 13
  2210. CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2211. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2212. INFOT = 13
  2213. CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2214. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2215. INFOT = 13
  2216. CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2217. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2218. GO TO 100
  2219. 20 INFOT = 1
  2220. CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2221. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2222. INFOT = 2
  2223. CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2224. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2225. INFOT = 3
  2226. CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2227. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2228. INFOT = 3
  2229. CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2230. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2231. INFOT = 3
  2232. CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2233. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2234. INFOT = 3
  2235. CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2236. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2237. INFOT = 4
  2238. CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2239. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2240. INFOT = 4
  2241. CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2242. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2243. INFOT = 4
  2244. CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2245. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2246. INFOT = 4
  2247. CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2248. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2249. INFOT = 7
  2250. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2251. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2252. INFOT = 7
  2253. CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2254. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2255. INFOT = 7
  2256. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2257. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2258. INFOT = 7
  2259. CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2260. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2261. INFOT = 9
  2262. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2263. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2264. INFOT = 9
  2265. CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2266. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2267. INFOT = 9
  2268. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2269. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2270. INFOT = 9
  2271. CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2272. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2273. INFOT = 12
  2274. CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2275. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2276. INFOT = 12
  2277. CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2278. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2279. INFOT = 12
  2280. CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2281. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2282. INFOT = 12
  2283. CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2284. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2285. GO TO 100
  2286. 30 INFOT = 1
  2287. CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2288. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2289. INFOT = 2
  2290. CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2291. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2292. INFOT = 3
  2293. CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2294. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2295. INFOT = 3
  2296. CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2297. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2298. INFOT = 3
  2299. CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2300. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2301. INFOT = 3
  2302. CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2303. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2304. INFOT = 4
  2305. CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2306. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2307. INFOT = 4
  2308. CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2309. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2310. INFOT = 4
  2311. CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2312. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2313. INFOT = 4
  2314. CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2315. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2316. INFOT = 7
  2317. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2318. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2319. INFOT = 7
  2320. CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2321. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2322. INFOT = 7
  2323. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
  2324. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2325. INFOT = 7
  2326. CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2327. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2328. INFOT = 9
  2329. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2330. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2331. INFOT = 9
  2332. CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2333. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2334. INFOT = 9
  2335. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2336. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2337. INFOT = 9
  2338. CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2339. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2340. INFOT = 12
  2341. CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2342. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2343. INFOT = 12
  2344. CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2345. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2346. INFOT = 12
  2347. CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2348. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2349. INFOT = 12
  2350. CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
  2351. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2352. GO TO 100
  2353. 40 INFOT = 1
  2354. CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2355. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2356. INFOT = 2
  2357. CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2358. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2359. INFOT = 3
  2360. CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2361. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2362. INFOT = 4
  2363. CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
  2364. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2365. INFOT = 5
  2366. CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2367. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2368. INFOT = 5
  2369. CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2370. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2371. INFOT = 5
  2372. CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2373. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2374. INFOT = 5
  2375. CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2376. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2377. INFOT = 5
  2378. CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2379. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2380. INFOT = 5
  2381. CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2382. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2383. INFOT = 5
  2384. CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2385. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2386. INFOT = 5
  2387. CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2388. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2389. INFOT = 5
  2390. CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2391. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2392. INFOT = 5
  2393. CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2394. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2395. INFOT = 5
  2396. CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2397. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2398. INFOT = 5
  2399. CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2400. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2401. INFOT = 6
  2402. CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2403. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2404. INFOT = 6
  2405. CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2406. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2407. INFOT = 6
  2408. CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2409. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2410. INFOT = 6
  2411. CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2412. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2413. INFOT = 6
  2414. CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2415. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2416. INFOT = 6
  2417. CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2418. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2419. INFOT = 6
  2420. CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2421. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2422. INFOT = 6
  2423. CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2424. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2425. INFOT = 6
  2426. CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2427. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2428. INFOT = 6
  2429. CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2430. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2431. INFOT = 6
  2432. CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2433. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2434. INFOT = 6
  2435. CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2436. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2437. INFOT = 9
  2438. CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2439. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2440. INFOT = 9
  2441. CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2442. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2443. INFOT = 9
  2444. CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2445. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2446. INFOT = 9
  2447. CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2448. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2449. INFOT = 9
  2450. CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2451. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2452. INFOT = 9
  2453. CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2454. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2455. INFOT = 9
  2456. CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2457. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2458. INFOT = 9
  2459. CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2460. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2461. INFOT = 9
  2462. CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2463. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2464. INFOT = 9
  2465. CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2466. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2467. INFOT = 9
  2468. CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2469. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2470. INFOT = 9
  2471. CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2472. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2473. INFOT = 11
  2474. CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2475. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2476. INFOT = 11
  2477. CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2478. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2479. INFOT = 11
  2480. CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2481. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2482. INFOT = 11
  2483. CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2484. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2485. INFOT = 11
  2486. CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2487. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2488. INFOT = 11
  2489. CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2490. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2491. INFOT = 11
  2492. CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2493. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2494. INFOT = 11
  2495. CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2496. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2497. INFOT = 11
  2498. CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2499. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2500. INFOT = 11
  2501. CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2502. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2503. INFOT = 11
  2504. CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2505. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2506. INFOT = 11
  2507. CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2508. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2509. GO TO 100
  2510. 50 INFOT = 1
  2511. CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2512. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2513. INFOT = 2
  2514. CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2515. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2516. INFOT = 3
  2517. CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
  2518. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2519. INFOT = 4
  2520. CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
  2521. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2522. INFOT = 5
  2523. CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2524. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2525. INFOT = 5
  2526. CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2527. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2528. INFOT = 5
  2529. CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2530. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2531. INFOT = 5
  2532. CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2533. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2534. INFOT = 5
  2535. CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2536. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2537. INFOT = 5
  2538. CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2539. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2540. INFOT = 5
  2541. CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2542. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2543. INFOT = 5
  2544. CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2545. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2546. INFOT = 5
  2547. CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2548. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2549. INFOT = 5
  2550. CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2551. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2552. INFOT = 5
  2553. CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2554. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2555. INFOT = 5
  2556. CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
  2557. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2558. INFOT = 6
  2559. CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2560. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2561. INFOT = 6
  2562. CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2563. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2564. INFOT = 6
  2565. CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2566. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2567. INFOT = 6
  2568. CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2569. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2570. INFOT = 6
  2571. CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2572. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2573. INFOT = 6
  2574. CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2575. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2576. INFOT = 6
  2577. CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2578. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2579. INFOT = 6
  2580. CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2581. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2582. INFOT = 6
  2583. CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2584. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2585. INFOT = 6
  2586. CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2587. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2588. INFOT = 6
  2589. CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2590. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2591. INFOT = 6
  2592. CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
  2593. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2594. INFOT = 9
  2595. CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2596. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2597. INFOT = 9
  2598. CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2599. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2600. INFOT = 9
  2601. CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2602. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2603. INFOT = 9
  2604. CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2605. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2606. INFOT = 9
  2607. CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2608. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2609. INFOT = 9
  2610. CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2611. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2612. INFOT = 9
  2613. CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2614. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2615. INFOT = 9
  2616. CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2617. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2618. INFOT = 9
  2619. CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
  2620. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2621. INFOT = 9
  2622. CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2623. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2624. INFOT = 9
  2625. CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2626. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2627. INFOT = 9
  2628. CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
  2629. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2630. INFOT = 11
  2631. CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2632. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2633. INFOT = 11
  2634. CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2635. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2636. INFOT = 11
  2637. CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2638. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2639. INFOT = 11
  2640. CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2641. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2642. INFOT = 11
  2643. CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2644. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2645. INFOT = 11
  2646. CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2647. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2648. INFOT = 11
  2649. CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2650. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2651. INFOT = 11
  2652. CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2653. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2654. INFOT = 11
  2655. CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
  2656. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2657. INFOT = 11
  2658. CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2659. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2660. INFOT = 11
  2661. CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2662. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2663. INFOT = 11
  2664. CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
  2665. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2666. GO TO 100
  2667. 60 INFOT = 1
  2668. CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
  2669. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2670. INFOT = 2
  2671. CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
  2672. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2673. INFOT = 3
  2674. CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2675. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2676. INFOT = 3
  2677. CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2678. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2679. INFOT = 3
  2680. CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2681. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2682. INFOT = 3
  2683. CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
  2684. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2685. INFOT = 4
  2686. CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2687. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2688. INFOT = 4
  2689. CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2690. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2691. INFOT = 4
  2692. CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2693. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2694. INFOT = 4
  2695. CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
  2696. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2697. INFOT = 7
  2698. CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
  2699. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2700. INFOT = 7
  2701. CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
  2702. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2703. INFOT = 7
  2704. CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
  2705. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2706. INFOT = 7
  2707. CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
  2708. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2709. INFOT = 10
  2710. CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
  2711. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2712. INFOT = 10
  2713. CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
  2714. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2715. INFOT = 10
  2716. CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
  2717. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2718. INFOT = 10
  2719. CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
  2720. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2721. GO TO 100
  2722. 70 INFOT = 1
  2723. CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
  2724. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2725. INFOT = 2
  2726. CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
  2727. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2728. INFOT = 3
  2729. CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2730. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2731. INFOT = 3
  2732. CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2733. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2734. INFOT = 3
  2735. CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2736. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2737. INFOT = 3
  2738. CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
  2739. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2740. INFOT = 4
  2741. CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2742. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2743. INFOT = 4
  2744. CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2745. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2746. INFOT = 4
  2747. CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2748. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2749. INFOT = 4
  2750. CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
  2751. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2752. INFOT = 7
  2753. CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
  2754. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2755. INFOT = 7
  2756. CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
  2757. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2758. INFOT = 7
  2759. CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
  2760. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2761. INFOT = 7
  2762. CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
  2763. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2764. INFOT = 10
  2765. CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
  2766. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2767. INFOT = 10
  2768. CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
  2769. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2770. INFOT = 10
  2771. CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
  2772. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2773. INFOT = 10
  2774. CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
  2775. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2776. GO TO 100
  2777. 80 INFOT = 1
  2778. CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2779. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2780. INFOT = 2
  2781. CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2782. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2783. INFOT = 3
  2784. CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2785. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2786. INFOT = 3
  2787. CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2788. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2789. INFOT = 3
  2790. CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2791. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2792. INFOT = 3
  2793. CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2794. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2795. INFOT = 4
  2796. CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2797. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2798. INFOT = 4
  2799. CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2800. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2801. INFOT = 4
  2802. CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2803. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2804. INFOT = 4
  2805. CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2806. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2807. INFOT = 7
  2808. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
  2809. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2810. INFOT = 7
  2811. CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2812. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2813. INFOT = 7
  2814. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
  2815. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2816. INFOT = 7
  2817. CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2818. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2819. INFOT = 9
  2820. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
  2821. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2822. INFOT = 9
  2823. CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
  2824. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2825. INFOT = 9
  2826. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
  2827. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2828. INFOT = 9
  2829. CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
  2830. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2831. INFOT = 12
  2832. CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
  2833. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2834. INFOT = 12
  2835. CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2836. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2837. INFOT = 12
  2838. CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
  2839. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2840. INFOT = 12
  2841. CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
  2842. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2843. GO TO 100
  2844. 90 INFOT = 1
  2845. CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2846. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2847. INFOT = 2
  2848. CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2849. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2850. INFOT = 3
  2851. CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2852. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2853. INFOT = 3
  2854. CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2855. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2856. INFOT = 3
  2857. CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2858. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2859. INFOT = 3
  2860. CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2861. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2862. INFOT = 4
  2863. CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2864. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2865. INFOT = 4
  2866. CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2867. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2868. INFOT = 4
  2869. CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2870. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2871. INFOT = 4
  2872. CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2873. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2874. INFOT = 7
  2875. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2876. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2877. INFOT = 7
  2878. CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2879. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2880. INFOT = 7
  2881. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
  2882. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2883. INFOT = 7
  2884. CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2885. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2886. INFOT = 9
  2887. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2888. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2889. INFOT = 9
  2890. CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2891. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2892. INFOT = 9
  2893. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
  2894. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2895. INFOT = 9
  2896. CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
  2897. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2898. INFOT = 12
  2899. CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2900. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2901. INFOT = 12
  2902. CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2903. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2904. INFOT = 12
  2905. CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
  2906. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2907. INFOT = 12
  2908. CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
  2909. CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  2910. *
  2911. 100 IF( OK )THEN
  2912. WRITE( NOUT, FMT = 9999 )SRNAMT
  2913. ELSE
  2914. WRITE( NOUT, FMT = 9998 )SRNAMT
  2915. END IF
  2916. RETURN
  2917. *
  2918. 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
  2919. 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
  2920. $ '**' )
  2921. *
  2922. * End of CCHKE.
  2923. *
  2924. END
  2925. SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
  2926. $ TRANSL )
  2927. *
  2928. * Generates values for an M by N matrix A.
  2929. * Stores the values in the array AA in the data structure required
  2930. * by the routine, with unwanted elements set to rogue value.
  2931. *
  2932. * TYPE is 'GE', 'HE', 'SY' or 'TR'.
  2933. *
  2934. * Auxiliary routine for test program for Level 3 Blas.
  2935. *
  2936. * -- Written on 8-February-1989.
  2937. * Jack Dongarra, Argonne National Laboratory.
  2938. * Iain Duff, AERE Harwell.
  2939. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  2940. * Sven Hammarling, Numerical Algorithms Group Ltd.
  2941. *
  2942. * .. Parameters ..
  2943. COMPLEX ZERO, ONE
  2944. PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
  2945. COMPLEX ROGUE
  2946. PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
  2947. REAL RZERO
  2948. PARAMETER ( RZERO = 0.0 )
  2949. REAL RROGUE
  2950. PARAMETER ( RROGUE = -1.0E10 )
  2951. * .. Scalar Arguments ..
  2952. COMPLEX TRANSL
  2953. INTEGER LDA, M, N, NMAX
  2954. LOGICAL RESET
  2955. CHARACTER*1 DIAG, UPLO
  2956. CHARACTER*2 TYPE
  2957. * .. Array Arguments ..
  2958. COMPLEX A( NMAX, * ), AA( * )
  2959. * .. Local Scalars ..
  2960. INTEGER I, IBEG, IEND, J, JJ
  2961. LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
  2962. * .. External Functions ..
  2963. COMPLEX CBEG
  2964. EXTERNAL CBEG
  2965. * .. Intrinsic Functions ..
  2966. INTRINSIC CMPLX, CONJG, REAL
  2967. * .. Executable Statements ..
  2968. GEN = TYPE.EQ.'GE'
  2969. HER = TYPE.EQ.'HE'
  2970. SYM = TYPE.EQ.'SY'
  2971. TRI = TYPE.EQ.'TR'
  2972. UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
  2973. LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
  2974. UNIT = TRI.AND.DIAG.EQ.'U'
  2975. *
  2976. * Generate data in array A.
  2977. *
  2978. DO 20 J = 1, N
  2979. DO 10 I = 1, M
  2980. IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
  2981. $ THEN
  2982. A( I, J ) = CBEG( RESET ) + TRANSL
  2983. IF( I.NE.J )THEN
  2984. * Set some elements to zero
  2985. IF( N.GT.3.AND.J.EQ.N/2 )
  2986. $ A( I, J ) = ZERO
  2987. IF( HER )THEN
  2988. A( J, I ) = CONJG( A( I, J ) )
  2989. ELSE IF( SYM )THEN
  2990. A( J, I ) = A( I, J )
  2991. ELSE IF( TRI )THEN
  2992. A( J, I ) = ZERO
  2993. END IF
  2994. END IF
  2995. END IF
  2996. 10 CONTINUE
  2997. IF( HER )
  2998. $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
  2999. IF( TRI )
  3000. $ A( J, J ) = A( J, J ) + ONE
  3001. IF( UNIT )
  3002. $ A( J, J ) = ONE
  3003. 20 CONTINUE
  3004. *
  3005. * Store elements in array AS in data structure required by routine.
  3006. *
  3007. IF( TYPE.EQ.'GE' )THEN
  3008. DO 50 J = 1, N
  3009. DO 30 I = 1, M
  3010. AA( I + ( J - 1 )*LDA ) = A( I, J )
  3011. 30 CONTINUE
  3012. DO 40 I = M + 1, LDA
  3013. AA( I + ( J - 1 )*LDA ) = ROGUE
  3014. 40 CONTINUE
  3015. 50 CONTINUE
  3016. ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
  3017. DO 90 J = 1, N
  3018. IF( UPPER )THEN
  3019. IBEG = 1
  3020. IF( UNIT )THEN
  3021. IEND = J - 1
  3022. ELSE
  3023. IEND = J
  3024. END IF
  3025. ELSE
  3026. IF( UNIT )THEN
  3027. IBEG = J + 1
  3028. ELSE
  3029. IBEG = J
  3030. END IF
  3031. IEND = N
  3032. END IF
  3033. DO 60 I = 1, IBEG - 1
  3034. AA( I + ( J - 1 )*LDA ) = ROGUE
  3035. 60 CONTINUE
  3036. DO 70 I = IBEG, IEND
  3037. AA( I + ( J - 1 )*LDA ) = A( I, J )
  3038. 70 CONTINUE
  3039. DO 80 I = IEND + 1, LDA
  3040. AA( I + ( J - 1 )*LDA ) = ROGUE
  3041. 80 CONTINUE
  3042. IF( HER )THEN
  3043. JJ = J + ( J - 1 )*LDA
  3044. AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
  3045. END IF
  3046. 90 CONTINUE
  3047. END IF
  3048. RETURN
  3049. *
  3050. * End of CMAKE.
  3051. *
  3052. END
  3053. SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
  3054. $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
  3055. $ NOUT, MV )
  3056. *
  3057. * Checks the results of the computational tests.
  3058. *
  3059. * Auxiliary routine for test program for Level 3 Blas.
  3060. *
  3061. * -- Written on 8-February-1989.
  3062. * Jack Dongarra, Argonne National Laboratory.
  3063. * Iain Duff, AERE Harwell.
  3064. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3065. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3066. *
  3067. * .. Parameters ..
  3068. COMPLEX ZERO
  3069. PARAMETER ( ZERO = ( 0.0, 0.0 ) )
  3070. REAL RZERO, RONE
  3071. PARAMETER ( RZERO = 0.0, RONE = 1.0 )
  3072. * .. Scalar Arguments ..
  3073. COMPLEX ALPHA, BETA
  3074. REAL EPS, ERR
  3075. INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
  3076. LOGICAL FATAL, MV
  3077. CHARACTER*1 TRANSA, TRANSB
  3078. * .. Array Arguments ..
  3079. COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
  3080. $ CC( LDCC, * ), CT( * )
  3081. REAL G( * )
  3082. * .. Local Scalars ..
  3083. COMPLEX CL
  3084. REAL ERRI
  3085. INTEGER I, J, K
  3086. LOGICAL CTRANA, CTRANB, TRANA, TRANB
  3087. * .. Intrinsic Functions ..
  3088. INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
  3089. * .. Statement Functions ..
  3090. REAL ABS1
  3091. * .. Statement Function definitions ..
  3092. ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
  3093. * .. Executable Statements ..
  3094. TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
  3095. TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
  3096. CTRANA = TRANSA.EQ.'C'
  3097. CTRANB = TRANSB.EQ.'C'
  3098. *
  3099. * Compute expected result, one column at a time, in CT using data
  3100. * in A, B and C.
  3101. * Compute gauges in G.
  3102. *
  3103. DO 220 J = 1, N
  3104. *
  3105. DO 10 I = 1, M
  3106. CT( I ) = ZERO
  3107. G( I ) = RZERO
  3108. 10 CONTINUE
  3109. IF( .NOT.TRANA.AND..NOT.TRANB )THEN
  3110. DO 30 K = 1, KK
  3111. DO 20 I = 1, M
  3112. CT( I ) = CT( I ) + A( I, K )*B( K, J )
  3113. G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
  3114. 20 CONTINUE
  3115. 30 CONTINUE
  3116. ELSE IF( TRANA.AND..NOT.TRANB )THEN
  3117. IF( CTRANA )THEN
  3118. DO 50 K = 1, KK
  3119. DO 40 I = 1, M
  3120. CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
  3121. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3122. $ ABS1( B( K, J ) )
  3123. 40 CONTINUE
  3124. 50 CONTINUE
  3125. ELSE
  3126. DO 70 K = 1, KK
  3127. DO 60 I = 1, M
  3128. CT( I ) = CT( I ) + A( K, I )*B( K, J )
  3129. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3130. $ ABS1( B( K, J ) )
  3131. 60 CONTINUE
  3132. 70 CONTINUE
  3133. END IF
  3134. ELSE IF( .NOT.TRANA.AND.TRANB )THEN
  3135. IF( CTRANB )THEN
  3136. DO 90 K = 1, KK
  3137. DO 80 I = 1, M
  3138. CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
  3139. G( I ) = G( I ) + ABS1( A( I, K ) )*
  3140. $ ABS1( B( J, K ) )
  3141. 80 CONTINUE
  3142. 90 CONTINUE
  3143. ELSE
  3144. DO 110 K = 1, KK
  3145. DO 100 I = 1, M
  3146. CT( I ) = CT( I ) + A( I, K )*B( J, K )
  3147. G( I ) = G( I ) + ABS1( A( I, K ) )*
  3148. $ ABS1( B( J, K ) )
  3149. 100 CONTINUE
  3150. 110 CONTINUE
  3151. END IF
  3152. ELSE IF( TRANA.AND.TRANB )THEN
  3153. IF( CTRANA )THEN
  3154. IF( CTRANB )THEN
  3155. DO 130 K = 1, KK
  3156. DO 120 I = 1, M
  3157. CT( I ) = CT( I ) + CONJG( A( K, I ) )*
  3158. $ CONJG( B( J, K ) )
  3159. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3160. $ ABS1( B( J, K ) )
  3161. 120 CONTINUE
  3162. 130 CONTINUE
  3163. ELSE
  3164. DO 150 K = 1, KK
  3165. DO 140 I = 1, M
  3166. CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
  3167. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3168. $ ABS1( B( J, K ) )
  3169. 140 CONTINUE
  3170. 150 CONTINUE
  3171. END IF
  3172. ELSE
  3173. IF( CTRANB )THEN
  3174. DO 170 K = 1, KK
  3175. DO 160 I = 1, M
  3176. CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
  3177. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3178. $ ABS1( B( J, K ) )
  3179. 160 CONTINUE
  3180. 170 CONTINUE
  3181. ELSE
  3182. DO 190 K = 1, KK
  3183. DO 180 I = 1, M
  3184. CT( I ) = CT( I ) + A( K, I )*B( J, K )
  3185. G( I ) = G( I ) + ABS1( A( K, I ) )*
  3186. $ ABS1( B( J, K ) )
  3187. 180 CONTINUE
  3188. 190 CONTINUE
  3189. END IF
  3190. END IF
  3191. END IF
  3192. DO 200 I = 1, M
  3193. CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
  3194. G( I ) = ABS1( ALPHA )*G( I ) +
  3195. $ ABS1( BETA )*ABS1( C( I, J ) )
  3196. 200 CONTINUE
  3197. *
  3198. * Compute the error ratio for this result.
  3199. *
  3200. ERR = ZERO
  3201. DO 210 I = 1, M
  3202. ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
  3203. IF( G( I ).NE.RZERO )
  3204. $ ERRI = ERRI/G( I )
  3205. ERR = MAX( ERR, ERRI )
  3206. IF( ERR*SQRT( EPS ).GE.RONE )
  3207. $ GO TO 230
  3208. 210 CONTINUE
  3209. *
  3210. 220 CONTINUE
  3211. *
  3212. * If the loop completes, all results are at least half accurate.
  3213. GO TO 250
  3214. *
  3215. * Report fatal error.
  3216. *
  3217. 230 FATAL = .TRUE.
  3218. WRITE( NOUT, FMT = 9999 )
  3219. DO 240 I = 1, M
  3220. IF( MV )THEN
  3221. WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
  3222. ELSE
  3223. WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
  3224. END IF
  3225. 240 CONTINUE
  3226. IF( N.GT.1 )
  3227. $ WRITE( NOUT, FMT = 9997 )J
  3228. *
  3229. 250 CONTINUE
  3230. RETURN
  3231. *
  3232. 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
  3233. $ 'F ACCURATE *******', /' EXPECTED RE',
  3234. $ 'SULT COMPUTED RESULT' )
  3235. 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
  3236. 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
  3237. *
  3238. * End of CMMCH.
  3239. *
  3240. END
  3241. LOGICAL FUNCTION LCE( RI, RJ, LR )
  3242. *
  3243. * Tests if two arrays are identical.
  3244. *
  3245. * Auxiliary routine for test program for Level 3 Blas.
  3246. *
  3247. * -- Written on 8-February-1989.
  3248. * Jack Dongarra, Argonne National Laboratory.
  3249. * Iain Duff, AERE Harwell.
  3250. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3251. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3252. *
  3253. * .. Scalar Arguments ..
  3254. INTEGER LR
  3255. * .. Array Arguments ..
  3256. COMPLEX RI( * ), RJ( * )
  3257. * .. Local Scalars ..
  3258. INTEGER I
  3259. * .. Executable Statements ..
  3260. DO 10 I = 1, LR
  3261. IF( RI( I ).NE.RJ( I ) )
  3262. $ GO TO 20
  3263. 10 CONTINUE
  3264. LCE = .TRUE.
  3265. GO TO 30
  3266. 20 CONTINUE
  3267. LCE = .FALSE.
  3268. 30 RETURN
  3269. *
  3270. * End of LCE.
  3271. *
  3272. END
  3273. LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
  3274. *
  3275. * Tests if selected elements in two arrays are equal.
  3276. *
  3277. * TYPE is 'GE' or 'HE' or 'SY'.
  3278. *
  3279. * Auxiliary routine for test program for Level 3 Blas.
  3280. *
  3281. * -- Written on 8-February-1989.
  3282. * Jack Dongarra, Argonne National Laboratory.
  3283. * Iain Duff, AERE Harwell.
  3284. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3285. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3286. *
  3287. * .. Scalar Arguments ..
  3288. INTEGER LDA, M, N
  3289. CHARACTER*1 UPLO
  3290. CHARACTER*2 TYPE
  3291. * .. Array Arguments ..
  3292. COMPLEX AA( LDA, * ), AS( LDA, * )
  3293. * .. Local Scalars ..
  3294. INTEGER I, IBEG, IEND, J
  3295. LOGICAL UPPER
  3296. * .. Executable Statements ..
  3297. UPPER = UPLO.EQ.'U'
  3298. IF( TYPE.EQ.'GE' )THEN
  3299. DO 20 J = 1, N
  3300. DO 10 I = M + 1, LDA
  3301. IF( AA( I, J ).NE.AS( I, J ) )
  3302. $ GO TO 70
  3303. 10 CONTINUE
  3304. 20 CONTINUE
  3305. ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
  3306. DO 50 J = 1, N
  3307. IF( UPPER )THEN
  3308. IBEG = 1
  3309. IEND = J
  3310. ELSE
  3311. IBEG = J
  3312. IEND = N
  3313. END IF
  3314. DO 30 I = 1, IBEG - 1
  3315. IF( AA( I, J ).NE.AS( I, J ) )
  3316. $ GO TO 70
  3317. 30 CONTINUE
  3318. DO 40 I = IEND + 1, LDA
  3319. IF( AA( I, J ).NE.AS( I, J ) )
  3320. $ GO TO 70
  3321. 40 CONTINUE
  3322. 50 CONTINUE
  3323. END IF
  3324. *
  3325. LCERES = .TRUE.
  3326. GO TO 80
  3327. 70 CONTINUE
  3328. LCERES = .FALSE.
  3329. 80 RETURN
  3330. *
  3331. * End of LCERES.
  3332. *
  3333. END
  3334. COMPLEX FUNCTION CBEG( RESET )
  3335. *
  3336. * Generates complex numbers as pairs of random numbers uniformly
  3337. * distributed between -0.5 and 0.5.
  3338. *
  3339. * Auxiliary routine for test program for Level 3 Blas.
  3340. *
  3341. * -- Written on 8-February-1989.
  3342. * Jack Dongarra, Argonne National Laboratory.
  3343. * Iain Duff, AERE Harwell.
  3344. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3345. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3346. *
  3347. * .. Scalar Arguments ..
  3348. LOGICAL RESET
  3349. * .. Local Scalars ..
  3350. INTEGER I, IC, J, MI, MJ
  3351. * .. Save statement ..
  3352. SAVE I, IC, J, MI, MJ
  3353. * .. Intrinsic Functions ..
  3354. INTRINSIC CMPLX
  3355. * .. Executable Statements ..
  3356. IF( RESET )THEN
  3357. * Initialize local variables.
  3358. MI = 891
  3359. MJ = 457
  3360. I = 7
  3361. J = 7
  3362. IC = 0
  3363. RESET = .FALSE.
  3364. END IF
  3365. *
  3366. * The sequence of values of I or J is bounded between 1 and 999.
  3367. * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
  3368. * If initial I or J = 4 or 8, the period will be 25.
  3369. * If initial I or J = 5, the period will be 10.
  3370. * IC is used to break up the period by skipping 1 value of I or J
  3371. * in 6.
  3372. *
  3373. IC = IC + 1
  3374. 10 I = I*MI
  3375. J = J*MJ
  3376. I = I - 1000*( I/1000 )
  3377. J = J - 1000*( J/1000 )
  3378. IF( IC.GE.5 )THEN
  3379. IC = 0
  3380. GO TO 10
  3381. END IF
  3382. CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
  3383. RETURN
  3384. *
  3385. * End of CBEG.
  3386. *
  3387. END
  3388. REAL FUNCTION SDIFF( X, Y )
  3389. *
  3390. * Auxiliary routine for test program for Level 3 Blas.
  3391. *
  3392. * -- Written on 8-February-1989.
  3393. * Jack Dongarra, Argonne National Laboratory.
  3394. * Iain Duff, AERE Harwell.
  3395. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3396. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3397. *
  3398. * .. Scalar Arguments ..
  3399. REAL X, Y
  3400. * .. Executable Statements ..
  3401. SDIFF = X - Y
  3402. RETURN
  3403. *
  3404. * End of SDIFF.
  3405. *
  3406. END
  3407. SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
  3408. *
  3409. * Tests whether XERBLA has detected an error when it should.
  3410. *
  3411. * Auxiliary routine for test program for Level 3 Blas.
  3412. *
  3413. * -- Written on 8-February-1989.
  3414. * Jack Dongarra, Argonne National Laboratory.
  3415. * Iain Duff, AERE Harwell.
  3416. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3417. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3418. *
  3419. * .. Scalar Arguments ..
  3420. INTEGER INFOT, NOUT
  3421. LOGICAL LERR, OK
  3422. CHARACTER*6 SRNAMT
  3423. * .. Executable Statements ..
  3424. IF( .NOT.LERR )THEN
  3425. WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
  3426. OK = .FALSE.
  3427. END IF
  3428. LERR = .FALSE.
  3429. RETURN
  3430. *
  3431. 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
  3432. $ 'ETECTED BY ', A6, ' *****' )
  3433. *
  3434. * End of CHKXER.
  3435. *
  3436. END
  3437. SUBROUTINE XERBLA( SRNAME, INFO )
  3438. *
  3439. * This is a special version of XERBLA to be used only as part of
  3440. * the test program for testing error exits from the Level 3 BLAS
  3441. * routines.
  3442. *
  3443. * XERBLA is an error handler for the Level 3 BLAS routines.
  3444. *
  3445. * It is called by the Level 3 BLAS routines if an input parameter is
  3446. * invalid.
  3447. *
  3448. * Auxiliary routine for test program for Level 3 Blas.
  3449. *
  3450. * -- Written on 8-February-1989.
  3451. * Jack Dongarra, Argonne National Laboratory.
  3452. * Iain Duff, AERE Harwell.
  3453. * Jeremy Du Croz, Numerical Algorithms Group Ltd.
  3454. * Sven Hammarling, Numerical Algorithms Group Ltd.
  3455. *
  3456. * .. Scalar Arguments ..
  3457. INTEGER INFO
  3458. CHARACTER*6 SRNAME
  3459. * .. Scalars in Common ..
  3460. INTEGER INFOT, NOUT
  3461. LOGICAL LERR, OK
  3462. CHARACTER*6 SRNAMT
  3463. * .. Common blocks ..
  3464. COMMON /INFOC/INFOT, NOUT, OK, LERR
  3465. COMMON /SRNAMC/SRNAMT
  3466. * .. Executable Statements ..
  3467. LERR = .TRUE.
  3468. IF( INFO.NE.INFOT )THEN
  3469. IF( INFOT.NE.0 )THEN
  3470. WRITE( NOUT, FMT = 9999 )INFO, INFOT
  3471. ELSE
  3472. WRITE( NOUT, FMT = 9997 )INFO
  3473. END IF
  3474. OK = .FALSE.
  3475. END IF
  3476. IF( SRNAME.NE.SRNAMT )THEN
  3477. WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
  3478. OK = .FALSE.
  3479. END IF
  3480. RETURN
  3481. *
  3482. 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
  3483. $ ' OF ', I2, ' *******' )
  3484. 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
  3485. $ 'AD OF ', A6, ' *******' )
  3486. 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,
  3487. $ ' *******' )
  3488. *
  3489. * End of XERBLA
  3490. *
  3491. END