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.

3439 lines
127 KiB

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