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