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