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.

3445 lines
128 KiB

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