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