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