1*> \brief \b ZCHKAA
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       PROGRAM ZCHKAA
12*
13*
14*> \par Purpose:
15*  =============
16*>
17*> \verbatim
18*>
19*> ZCHKAA is the main test program for the COMPLEX*16 linear equation
20*> routines.
21*>
22*> The program must be driven by a short data file. The first 15 records
23*> (not including the first comment  line) specify problem dimensions
24*> and program options using list-directed input. The remaining lines
25*> specify the LAPACK test paths and the number of matrix types to use
26*> in testing.  An annotated example of a data file can be obtained by
27*> deleting the first 3 characters from the following 42 lines:
28*> Data file for testing COMPLEX*16 LAPACK linear equation routines
29*> 7                      Number of values of M
30*> 0 1 2 3 5 10 16        Values of M (row dimension)
31*> 7                      Number of values of N
32*> 0 1 2 3 5 10 16        Values of N (column dimension)
33*> 1                      Number of values of NRHS
34*> 2                      Values of NRHS (number of right hand sides)
35*> 5                      Number of values of NB
36*> 1 3 3 3 20             Values of NB (the blocksize)
37*> 1 0 5 9 1              Values of NX (crossover point)
38*> 3                      Number of values of RANK
39*> 30 50 90               Values of rank (as a % of N)
40*> 30.0                   Threshold value of test ratio
41*> T                      Put T to test the LAPACK routines
42*> T                      Put T to test the driver routines
43*> T                      Put T to test the error exits
44*> ZGE   11               List types on next line if 0 < NTYPES < 11
45*> ZGB    8               List types on next line if 0 < NTYPES <  8
46*> ZGT   12               List types on next line if 0 < NTYPES < 12
47*> ZPO    9               List types on next line if 0 < NTYPES <  9
48*> ZPS    9               List types on next line if 0 < NTYPES <  9
49*> ZPP    9               List types on next line if 0 < NTYPES <  9
50*> ZPB    8               List types on next line if 0 < NTYPES <  8
51*> ZPT   12               List types on next line if 0 < NTYPES < 12
52*> ZHE   10               List types on next line if 0 < NTYPES < 10
53*> ZHR   10               List types on next line if 0 < NTYPES < 10
54*> ZHP   10               List types on next line if 0 < NTYPES < 10
55*> ZSY   11               List types on next line if 0 < NTYPES < 11
56*> ZSR   11               List types on next line if 0 < NTYPES < 11
57*> ZSP   11               List types on next line if 0 < NTYPES < 11
58*> ZTR   18               List types on next line if 0 < NTYPES < 18
59*> ZTP   18               List types on next line if 0 < NTYPES < 18
60*> ZTB   17               List types on next line if 0 < NTYPES < 17
61*> ZQR    8               List types on next line if 0 < NTYPES <  8
62*> ZRQ    8               List types on next line if 0 < NTYPES <  8
63*> ZLQ    8               List types on next line if 0 < NTYPES <  8
64*> ZQL    8               List types on next line if 0 < NTYPES <  8
65*> ZQP    6               List types on next line if 0 < NTYPES <  6
66*> ZTZ    3               List types on next line if 0 < NTYPES <  3
67*> ZLS    6               List types on next line if 0 < NTYPES <  6
68*> ZEQ
69*> ZQT
70*> ZQX
71*> \endverbatim
72*
73*  Parameters:
74*  ==========
75*
76*> \verbatim
77*>  NMAX    INTEGER
78*>          The maximum allowable value for M and N.
79*>
80*>  MAXIN   INTEGER
81*>          The number of different values that can be used for each of
82*>          M, N, NRHS, NB, NX and RANK
83*>
84*>  MAXRHS  INTEGER
85*>          The maximum number of right hand sides
86*>
87*>  MATMAX  INTEGER
88*>          The maximum number of matrix types to use for testing
89*>
90*>  NIN     INTEGER
91*>          The unit number for input
92*>
93*>  NOUT    INTEGER
94*>          The unit number for output
95*> \endverbatim
96*
97*  Authors:
98*  ========
99*
100*> \author Univ. of Tennessee
101*> \author Univ. of California Berkeley
102*> \author Univ. of Colorado Denver
103*> \author NAG Ltd.
104*
105*> \date November 2013
106*
107*> \ingroup complex16_lin
108*
109*  =====================================================================
110      PROGRAM ZCHKAA
111*
112*  -- LAPACK test routine (version 3.5.0) --
113*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
114*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
115*     November 2013
116*
117*  =====================================================================
118*
119*     .. Parameters ..
120      INTEGER            NMAX
121      PARAMETER          ( NMAX = 132 )
122      INTEGER            MAXIN
123      PARAMETER          ( MAXIN = 12 )
124      INTEGER            MAXRHS
125      PARAMETER          ( MAXRHS = 16 )
126      INTEGER            MATMAX
127      PARAMETER          ( MATMAX = 30 )
128      INTEGER            NIN, NOUT
129      PARAMETER          ( NIN = 5, NOUT = 6 )
130      INTEGER            KDMAX
131      PARAMETER          ( KDMAX = NMAX+( NMAX+1 ) / 4 )
132*     ..
133*     .. Local Scalars ..
134      LOGICAL            FATAL, TSTCHK, TSTDRV, TSTERR
135      CHARACTER          C1
136      CHARACTER*2        C2
137      CHARACTER*3        PATH
138      CHARACTER*10       INTSTR
139      CHARACTER*72       ALINE
140      INTEGER            I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN,
141     $                   NNB, NNB2, NNS, NRHS, NTYPES, NRANK,
142     $                   VERS_MAJOR, VERS_MINOR, VERS_PATCH
143      DOUBLE PRECISION   EPS, S1, S2, THREQ, THRESH
144*     ..
145*     .. Local Arrays ..
146      LOGICAL            DOTYPE( MATMAX )
147      INTEGER            IWORK( 25*NMAX ), MVAL( MAXIN ),
148     $                   NBVAL( MAXIN ), NBVAL2( MAXIN ),
149     $                   NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ),
150     $                   RANKVAL( MAXIN ), PIV( NMAX )
151      DOUBLE PRECISION   RWORK( 150*NMAX+2*MAXRHS ), S( 2*NMAX )
152      COMPLEX*16         A( ( KDMAX+1 )*NMAX, 7 ), B( NMAX*MAXRHS, 4 ),
153     $                   WORK( NMAX, NMAX+MAXRHS+10 )
154*     ..
155*     .. External Functions ..
156      LOGICAL            LSAME, LSAMEN
157      DOUBLE PRECISION   DLAMCH, DSECND
158      EXTERNAL           LSAME, LSAMEN, DLAMCH, DSECND
159*     ..
160*     .. External Subroutines ..
161      EXTERNAL           ALAREQ, ZCHKEQ, ZCHKGB, ZCHKGE, ZCHKGT, ZCHKHE,
162     $                   ZCHKHE_ROOK, ZCHKHP, ZCHKLQ, ZCHKPB, ZCHKPO,
163     $                   ZCHKPS, ZCHKPP, ZCHKPT, ZCHKQ3, ZCHKQL, ZCHKQP,
164     $                   ZCHKQR, ZCHKRQ, ZCHKSP, ZCHKSY, ZCHKSY_ROOK,
165     $                   ZCHKTB, ZCHKTP, ZCHKTR, ZCHKTZ, ZDRVGB, ZDRVGE,
166     $                   ZDRVGT, ZDRVHE, ZDRVHE_ROOK, ZDRVHP, ZDRVLS,
167     $                   ZDRVPB, ZDRVPO, ZDRVPP, ZDRVPT, ZDRVSP, ZDRVSY,
168     $                   ZDRVSY_ROOK, ILAVER, ZCHKQRT, ZCHKQRTP
169*     ..
170*     .. Scalars in Common ..
171      LOGICAL            LERR, OK
172      CHARACTER*32       SRNAMT
173      INTEGER            INFOT, NUNIT
174*     ..
175*     .. Arrays in Common ..
176      INTEGER            IPARMS( 100 )
177*     ..
178*     .. Common blocks ..
179      COMMON             / INFOC / INFOT, NUNIT, OK, LERR
180      COMMON             / SRNAMC / SRNAMT
181      COMMON             / CLAENV / IPARMS
182*     ..
183*     .. Data statements ..
184      DATA               THREQ / 2.0D0 / , INTSTR / '0123456789' /
185*     ..
186*     .. Executable Statements ..
187*
188#ifdef __FLAME__
189      CALL FLA_INIT
190#endif
191      S1 = DSECND( )
192      LDA = NMAX
193      FATAL = .FALSE.
194*
195*     Read a dummy line.
196*
197      READ( NIN, FMT = * )
198*
199*     Report values of parameters.
200*
201      CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
202      WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
203*
204*     Read the values of M
205*
206      READ( NIN, FMT = * )NM
207      IF( NM.LT.1 ) THEN
208         WRITE( NOUT, FMT = 9996 )' NM ', NM, 1
209         NM = 0
210         FATAL = .TRUE.
211      ELSE IF( NM.GT.MAXIN ) THEN
212         WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN
213         NM = 0
214         FATAL = .TRUE.
215      END IF
216      READ( NIN, FMT = * )( MVAL( I ), I = 1, NM )
217      DO 10 I = 1, NM
218         IF( MVAL( I ).LT.0 ) THEN
219            WRITE( NOUT, FMT = 9996 )' M  ', MVAL( I ), 0
220            FATAL = .TRUE.
221         ELSE IF( MVAL( I ).GT.NMAX ) THEN
222            WRITE( NOUT, FMT = 9995 )' M  ', MVAL( I ), NMAX
223            FATAL = .TRUE.
224         END IF
225   10 CONTINUE
226      IF( NM.GT.0 )
227     $   WRITE( NOUT, FMT = 9993 )'M   ', ( MVAL( I ), I = 1, NM )
228*
229*     Read the values of N
230*
231      READ( NIN, FMT = * )NN
232      IF( NN.LT.1 ) THEN
233         WRITE( NOUT, FMT = 9996 )' NN ', NN, 1
234         NN = 0
235         FATAL = .TRUE.
236      ELSE IF( NN.GT.MAXIN ) THEN
237         WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN
238         NN = 0
239         FATAL = .TRUE.
240      END IF
241      READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
242      DO 20 I = 1, NN
243         IF( NVAL( I ).LT.0 ) THEN
244            WRITE( NOUT, FMT = 9996 )' N  ', NVAL( I ), 0
245            FATAL = .TRUE.
246         ELSE IF( NVAL( I ).GT.NMAX ) THEN
247            WRITE( NOUT, FMT = 9995 )' N  ', NVAL( I ), NMAX
248            FATAL = .TRUE.
249         END IF
250   20 CONTINUE
251      IF( NN.GT.0 )
252     $   WRITE( NOUT, FMT = 9993 )'N   ', ( NVAL( I ), I = 1, NN )
253*
254*     Read the values of NRHS
255*
256      READ( NIN, FMT = * )NNS
257      IF( NNS.LT.1 ) THEN
258         WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
259         NNS = 0
260         FATAL = .TRUE.
261      ELSE IF( NNS.GT.MAXIN ) THEN
262         WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
263         NNS = 0
264         FATAL = .TRUE.
265      END IF
266      READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
267      DO 30 I = 1, NNS
268         IF( NSVAL( I ).LT.0 ) THEN
269            WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
270            FATAL = .TRUE.
271         ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
272            WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
273            FATAL = .TRUE.
274         END IF
275   30 CONTINUE
276      IF( NNS.GT.0 )
277     $   WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
278*
279*     Read the values of NB
280*
281      READ( NIN, FMT = * )NNB
282      IF( NNB.LT.1 ) THEN
283         WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1
284         NNB = 0
285         FATAL = .TRUE.
286      ELSE IF( NNB.GT.MAXIN ) THEN
287         WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN
288         NNB = 0
289         FATAL = .TRUE.
290      END IF
291      READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB )
292      DO 40 I = 1, NNB
293         IF( NBVAL( I ).LT.0 ) THEN
294            WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0
295            FATAL = .TRUE.
296         END IF
297   40 CONTINUE
298      IF( NNB.GT.0 )
299     $   WRITE( NOUT, FMT = 9993 )'NB  ', ( NBVAL( I ), I = 1, NNB )
300*
301*     Set NBVAL2 to be the set of unique values of NB
302*
303      NNB2 = 0
304      DO 60 I = 1, NNB
305         NB = NBVAL( I )
306         DO 50 J = 1, NNB2
307            IF( NB.EQ.NBVAL2( J ) )
308     $         GO TO 60
309   50    CONTINUE
310         NNB2 = NNB2 + 1
311         NBVAL2( NNB2 ) = NB
312   60 CONTINUE
313*
314*     Read the values of NX
315*
316      READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB )
317      DO 70 I = 1, NNB
318         IF( NXVAL( I ).LT.0 ) THEN
319            WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0
320            FATAL = .TRUE.
321         END IF
322   70 CONTINUE
323      IF( NNB.GT.0 )
324     $   WRITE( NOUT, FMT = 9993 )'NX  ', ( NXVAL( I ), I = 1, NNB )
325*
326*     Read the values of RANKVAL
327*
328      READ( NIN, FMT = * )NRANK
329      IF( NN.LT.1 ) THEN
330         WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1
331         NRANK = 0
332         FATAL = .TRUE.
333      ELSE IF( NN.GT.MAXIN ) THEN
334         WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN
335         NRANK = 0
336         FATAL = .TRUE.
337      END IF
338      READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK )
339      DO I = 1, NRANK
340         IF( RANKVAL( I ).LT.0 ) THEN
341            WRITE( NOUT, FMT = 9996 )' RANK  ', RANKVAL( I ), 0
342            FATAL = .TRUE.
343         ELSE IF( RANKVAL( I ).GT.100 ) THEN
344            WRITE( NOUT, FMT = 9995 )' RANK  ', RANKVAL( I ), 100
345            FATAL = .TRUE.
346         END IF
347      END DO
348      IF( NRANK.GT.0 )
349     $   WRITE( NOUT, FMT = 9993 )'RANK % OF N',
350     $   ( RANKVAL( I ), I = 1, NRANK )
351*
352*     Read the threshold value for the test ratios.
353*
354      READ( NIN, FMT = * )THRESH
355      WRITE( NOUT, FMT = 9992 )THRESH
356*
357*     Read the flag that indicates whether to test the LAPACK routines.
358*
359      READ( NIN, FMT = * )TSTCHK
360*
361*     Read the flag that indicates whether to test the driver routines.
362*
363      READ( NIN, FMT = * )TSTDRV
364*
365*     Read the flag that indicates whether to test the error exits.
366*
367      READ( NIN, FMT = * )TSTERR
368*
369      IF( FATAL ) THEN
370         WRITE( NOUT, FMT = 9999 )
371         STOP
372      END IF
373*
374*     Calculate and print the machine dependent constants.
375*
376      EPS = DLAMCH( 'Underflow threshold' )
377      WRITE( NOUT, FMT = 9991 )'underflow', EPS
378      EPS = DLAMCH( 'Overflow threshold' )
379      WRITE( NOUT, FMT = 9991 )'overflow ', EPS
380      EPS = DLAMCH( 'Epsilon' )
381      WRITE( NOUT, FMT = 9991 )'precision', EPS
382      WRITE( NOUT, FMT = * )
383      NRHS = NSVAL( 1 )
384*
385   80 CONTINUE
386*
387*     Read a test path and the number of matrix types to use.
388*
389      READ( NIN, FMT = '(A72)', END = 140 )ALINE
390      PATH = ALINE( 1: 3 )
391      NMATS = MATMAX
392      I = 3
393   90 CONTINUE
394      I = I + 1
395      IF( I.GT.72 )
396     $   GO TO 130
397      IF( ALINE( I: I ).EQ.' ' )
398     $   GO TO 90
399      NMATS = 0
400  100 CONTINUE
401      C1 = ALINE( I: I )
402      DO 110 K = 1, 10
403         IF( C1.EQ.INTSTR( K: K ) ) THEN
404            IC = K - 1
405            GO TO 120
406         END IF
407  110 CONTINUE
408      GO TO 130
409  120 CONTINUE
410      NMATS = NMATS*10 + IC
411      I = I + 1
412      IF( I.GT.72 )
413     $   GO TO 130
414      GO TO 100
415  130 CONTINUE
416      C1 = PATH( 1: 1 )
417      C2 = PATH( 2: 3 )
418*
419*     Check first character for correct precision.
420*
421      IF( .NOT.LSAME( C1, 'Zomplex precision' ) ) THEN
422         WRITE( NOUT, FMT = 9990 )PATH
423*
424      ELSE IF( NMATS.LE.0 ) THEN
425*
426*        Check for a positive number of tests requested.
427*
428         WRITE( NOUT, FMT = 9989 )PATH
429*
430      ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
431*
432*        GE:  general matrices
433*
434         NTYPES = 11
435         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
436*
437         IF( TSTCHK ) THEN
438            CALL ZCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
439     $                   NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
440     $                   A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
441     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
442         ELSE
443            WRITE( NOUT, FMT = 9989 )PATH
444         END IF
445*
446         IF( TSTDRV ) THEN
447            CALL ZDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
448     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
449     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
450     $                   RWORK, IWORK, NOUT )
451         ELSE
452            WRITE( NOUT, FMT = 9988 )PATH
453         END IF
454*
455      ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
456*
457*        GB:  general banded matrices
458*
459         LA = ( 2*KDMAX+1 )*NMAX
460         LAFAC = ( 3*KDMAX+1 )*NMAX
461         NTYPES = 8
462         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
463*
464         IF( TSTCHK ) THEN
465            CALL ZCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
466     $                   NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
467     $                   A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
468     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
469         ELSE
470            WRITE( NOUT, FMT = 9989 )PATH
471         END IF
472*
473         IF( TSTDRV ) THEN
474            CALL ZDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
475     $                   A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
476     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S,
477     $                   WORK, RWORK, IWORK, NOUT )
478         ELSE
479            WRITE( NOUT, FMT = 9988 )PATH
480         END IF
481*
482      ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
483*
484*        GT:  general tridiagonal matrices
485*
486         NTYPES = 12
487         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
488*
489         IF( TSTCHK ) THEN
490            CALL ZCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
491     $                   A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
492     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
493         ELSE
494            WRITE( NOUT, FMT = 9989 )PATH
495         END IF
496*
497         IF( TSTDRV ) THEN
498            CALL ZDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
499     $                   A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
500     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
501         ELSE
502            WRITE( NOUT, FMT = 9988 )PATH
503         END IF
504*
505      ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN
506*
507*        PO:  positive definite matrices
508*
509         NTYPES = 9
510         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
511*
512         IF( TSTCHK ) THEN
513            CALL ZCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
514     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
515     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
516     $                   WORK, RWORK, NOUT )
517         ELSE
518            WRITE( NOUT, FMT = 9989 )PATH
519         END IF
520*
521         IF( TSTDRV ) THEN
522            CALL ZDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
523     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
524     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
525     $                   RWORK, NOUT )
526         ELSE
527            WRITE( NOUT, FMT = 9988 )PATH
528         END IF
529*
530      ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN
531*
532*        PS:  positive semi-definite matrices
533*
534         NTYPES = 9
535*
536         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
537*
538         IF( TSTCHK ) THEN
539            CALL ZCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
540     $                   RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
541     $                   A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK,
542     $                   NOUT )
543         ELSE
544            WRITE( NOUT, FMT = 9989 )PATH
545         END IF
546*
547      ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
548*
549*        PP:  positive definite packed matrices
550*
551         NTYPES = 9
552         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
553*
554         IF( TSTCHK ) THEN
555            CALL ZCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
556     $                   LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
557     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
558     $                   NOUT )
559         ELSE
560            WRITE( NOUT, FMT = 9989 )PATH
561         END IF
562*
563         IF( TSTDRV ) THEN
564            CALL ZDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
565     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
566     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
567     $                   RWORK, NOUT )
568         ELSE
569            WRITE( NOUT, FMT = 9988 )PATH
570         END IF
571*
572      ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
573*
574*        PB:  positive definite banded matrices
575*
576         NTYPES = 8
577         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
578*
579         IF( TSTCHK ) THEN
580            CALL ZCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
581     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
582     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
583     $                   WORK, RWORK, NOUT )
584         ELSE
585            WRITE( NOUT, FMT = 9989 )PATH
586         END IF
587*
588         IF( TSTDRV ) THEN
589            CALL ZDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
590     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
591     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
592     $                   RWORK, NOUT )
593         ELSE
594            WRITE( NOUT, FMT = 9988 )PATH
595         END IF
596*
597      ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
598*
599*        PT:  positive definite tridiagonal matrices
600*
601         NTYPES = 12
602         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
603*
604         IF( TSTCHK ) THEN
605            CALL ZCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
606     $                   A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
607     $                   B( 1, 3 ), WORK, RWORK, NOUT )
608         ELSE
609            WRITE( NOUT, FMT = 9989 )PATH
610         END IF
611*
612         IF( TSTDRV ) THEN
613            CALL ZDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
614     $                   A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
615     $                   B( 1, 3 ), WORK, RWORK, NOUT )
616         ELSE
617            WRITE( NOUT, FMT = 9988 )PATH
618         END IF
619*
620      ELSE IF( LSAMEN( 2, C2, 'HE' ) ) THEN
621*
622*        HE:  Hermitian indefinite matrices
623*
624         NTYPES = 10
625         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
626*
627         IF( TSTCHK ) THEN
628            CALL ZCHKHE( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
629     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
630     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
631     $                   WORK, RWORK, IWORK, NOUT )
632         ELSE
633            WRITE( NOUT, FMT = 9989 )PATH
634         END IF
635*
636         IF( TSTDRV ) THEN
637            CALL ZDRVHE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
638     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
639     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
640     $                   NOUT )
641         ELSE
642            WRITE( NOUT, FMT = 9988 )PATH
643         END IF
644*
645      ELSE IF( LSAMEN( 2, C2, 'HR' ) ) THEN
646*
647*        HR:  Hermitian indefinite matrices,
648*             with "rook" (bounded Bunch-Kaufman) pivoting algorithm
649*
650         NTYPES = 10
651         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
652*
653         IF( TSTCHK ) THEN
654            CALL ZCHKHE_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
655     $                       THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
656     $                       A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
657     $                       WORK, RWORK, IWORK, NOUT )
658         ELSE
659            WRITE( NOUT, FMT = 9989 )PATH
660         END IF
661*
662         IF( TSTDRV ) THEN
663            CALL ZDRVHE_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
664     $                        LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
665     $                        B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK,
666     $                        RWORK, IWORK, NOUT )
667         ELSE
668            WRITE( NOUT, FMT = 9988 )PATH
669         END IF
670*
671      ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN
672*
673*        HP:  Hermitian indefinite packed matrices
674*
675         NTYPES = 10
676         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
677*
678         IF( TSTCHK ) THEN
679            CALL ZCHKHP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
680     $                   LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
681     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
682     $                   IWORK, NOUT )
683         ELSE
684            WRITE( NOUT, FMT = 9989 )PATH
685         END IF
686*
687         IF( TSTDRV ) THEN
688            CALL ZDRVHP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
689     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
690     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
691     $                   NOUT )
692         ELSE
693            WRITE( NOUT, FMT = 9988 )PATH
694         END IF
695*
696      ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN
697*
698*        SY:  symmetric indefinite matrices,
699*             with partial (Bunch-Kaufman) pivoting algorithm
700*
701         NTYPES = 11
702         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
703*
704         IF( TSTCHK ) THEN
705            CALL ZCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
706     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
707     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
708     $                   WORK, RWORK, IWORK, NOUT )
709         ELSE
710            WRITE( NOUT, FMT = 9989 )PATH
711         END IF
712*
713         IF( TSTDRV ) THEN
714            CALL ZDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
715     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
716     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
717     $                   NOUT )
718         ELSE
719            WRITE( NOUT, FMT = 9988 )PATH
720         END IF
721*
722      ELSE IF( LSAMEN( 2, C2, 'SR' ) ) THEN
723*
724*        SR:  symmetric indefinite matrices,
725*             with "rook" (bounded Bunch-Kaufman) pivoting algorithm
726*
727         NTYPES = 11
728         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
729*
730         IF( TSTCHK ) THEN
731            CALL ZCHKSY_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
732     $                       THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
733     $                       A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
734     $                       WORK, RWORK, IWORK, NOUT )
735         ELSE
736            WRITE( NOUT, FMT = 9989 )PATH
737         END IF
738*
739         IF( TSTDRV ) THEN
740            CALL ZDRVSY_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
741     $                        LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
742     $                        B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK,
743     $                        RWORK, IWORK, NOUT )
744         ELSE
745            WRITE( NOUT, FMT = 9988 )PATH
746         END IF
747*
748      ELSE IF( LSAMEN( 2, C2, 'SP' ) ) THEN
749*
750*        SP:  symmetric indefinite packed matrices,
751*             with partial (Bunch-Kaufman) pivoting algorithm
752*
753         NTYPES = 11
754         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
755*
756         IF( TSTCHK ) THEN
757            CALL ZCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
758     $                   LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
759     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
760     $                   IWORK, NOUT )
761         ELSE
762            WRITE( NOUT, FMT = 9989 )PATH
763         END IF
764*
765         IF( TSTDRV ) THEN
766            CALL ZDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
767     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
768     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
769     $                   NOUT )
770         ELSE
771            WRITE( NOUT, FMT = 9988 )PATH
772         END IF
773*
774      ELSE IF( LSAMEN( 2, C2, 'TR' ) ) THEN
775*
776*        TR:  triangular matrices
777*
778         NTYPES = 18
779         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
780*
781         IF( TSTCHK ) THEN
782            CALL ZCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
783     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
784     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
785     $                   NOUT )
786         ELSE
787            WRITE( NOUT, FMT = 9989 )PATH
788         END IF
789*
790      ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN
791*
792*        TP:  triangular packed matrices
793*
794         NTYPES = 18
795         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
796*
797         IF( TSTCHK ) THEN
798            CALL ZCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
799     $                   LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
800     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
801         ELSE
802            WRITE( NOUT, FMT = 9989 )PATH
803         END IF
804*
805      ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
806*
807*        TB:  triangular banded matrices
808*
809         NTYPES = 17
810         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
811*
812         IF( TSTCHK ) THEN
813            CALL ZCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
814     $                   LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
815     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
816         ELSE
817            WRITE( NOUT, FMT = 9989 )PATH
818         END IF
819*
820      ELSE IF( LSAMEN( 2, C2, 'QR' ) ) THEN
821*
822*        QR:  QR factorization
823*
824         NTYPES = 8
825         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
826*
827         IF( TSTCHK ) THEN
828            CALL ZCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
829     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
830     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
831     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
832     $                   WORK, RWORK, IWORK, NOUT )
833         ELSE
834            WRITE( NOUT, FMT = 9989 )PATH
835         END IF
836*
837      ELSE IF( LSAMEN( 2, C2, 'LQ' ) ) THEN
838*
839*        LQ:  LQ factorization
840*
841         NTYPES = 8
842         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
843*
844         IF( TSTCHK ) THEN
845            CALL ZCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
846     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
847     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
848     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
849     $                   WORK, RWORK, NOUT )
850         ELSE
851            WRITE( NOUT, FMT = 9989 )PATH
852         END IF
853*
854      ELSE IF( LSAMEN( 2, C2, 'QL' ) ) THEN
855*
856*        QL:  QL factorization
857*
858         NTYPES = 8
859         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
860*
861         IF( TSTCHK ) THEN
862            CALL ZCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
863     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
864     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
865     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
866     $                   WORK, RWORK, NOUT )
867         ELSE
868            WRITE( NOUT, FMT = 9989 )PATH
869         END IF
870*
871      ELSE IF( LSAMEN( 2, C2, 'RQ' ) ) THEN
872*
873*        RQ:  RQ factorization
874*
875         NTYPES = 8
876         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
877*
878         IF( TSTCHK ) THEN
879            CALL ZCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
880     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
881     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
882     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
883     $                   WORK, RWORK, IWORK, NOUT )
884         ELSE
885            WRITE( NOUT, FMT = 9989 )PATH
886         END IF
887*
888      ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN
889*
890*        EQ:  Equilibration routines for general and positive definite
891*             matrices (THREQ should be between 2 and 10)
892*
893         IF( TSTCHK ) THEN
894            CALL ZCHKEQ( THREQ, NOUT )
895         ELSE
896            WRITE( NOUT, FMT = 9989 )PATH
897         END IF
898*
899      ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN
900*
901*        TZ:  Trapezoidal matrix
902*
903         NTYPES = 3
904         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
905*
906         IF( TSTCHK ) THEN
907            CALL ZCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
908     $                   A( 1, 1 ), A( 1, 2 ), S( 1 ),
909     $                   B( 1, 1 ), WORK, RWORK, NOUT )
910         ELSE
911            WRITE( NOUT, FMT = 9989 )PATH
912         END IF
913*
914      ELSE IF( LSAMEN( 2, C2, 'QP' ) ) THEN
915*
916*        QP:  QR factorization with pivoting
917*
918         NTYPES = 6
919         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
920*
921         IF( TSTCHK ) THEN
922            CALL ZCHKQP( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
923     $                   A( 1, 1 ), A( 1, 2 ), S( 1 ),
924     $                   B( 1, 1 ), WORK, RWORK, IWORK, NOUT )
925            CALL ZCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
926     $                   THRESH, A( 1, 1 ), A( 1, 2 ), S( 1 ),
927     $                   B( 1, 1 ), WORK, RWORK, IWORK,
928     $                   NOUT )
929         ELSE
930            WRITE( NOUT, FMT = 9989 )PATH
931         END IF
932*
933      ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN
934*
935*        LS:  Least squares drivers
936*
937         NTYPES = 6
938         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
939*
940         IF( TSTDRV ) THEN
941            CALL ZDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
942     $                   NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
943     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
944     $                   S( 1 ), S( NMAX+1 ), WORK, RWORK, IWORK,
945     $                   NOUT )
946         ELSE
947            WRITE( NOUT, FMT = 9989 )PATH
948         END IF
949*
950*
951      ELSE IF( LSAMEN( 2, C2, 'QT' ) ) THEN
952*
953*        QT:  QRT routines for general matrices
954*
955         IF( TSTCHK ) THEN
956            CALL ZCHKQRT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
957     $                    NBVAL, NOUT )
958         ELSE
959            WRITE( NOUT, FMT = 9989 )PATH
960         END IF
961*
962      ELSE IF( LSAMEN( 2, C2, 'QX' ) ) THEN
963*
964*        QX:  QRT routines for triangular-pentagonal matrices
965*
966         IF( TSTCHK ) THEN
967            CALL ZCHKQRTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
968     $                     NBVAL, NOUT )
969         ELSE
970            WRITE( NOUT, FMT = 9989 )PATH
971         END IF
972*
973      ELSE
974*
975         WRITE( NOUT, FMT = 9990 )PATH
976      END IF
977*
978*     Go back to get another input line.
979*
980      GO TO 80
981*
982*     Branch to this line when the last record is read.
983*
984  140 CONTINUE
985      CLOSE ( NIN )
986      S2 = DSECND( )
987      WRITE( NOUT, FMT = 9998 )
988      WRITE( NOUT, FMT = 9997 )S2 - S1
989*
990 9999 FORMAT( / ' Execution not attempted due to input errors' )
991 9998 FORMAT( / ' End of tests' )
992 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
993 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=',
994     $      I6 )
995 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=',
996     $      I6 )
997 9994 FORMAT( ' Tests of the COMPLEX*16 LAPACK routines ',
998     $      / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
999     $      / / ' The following parameter values will be used:' )
1000 9993 FORMAT( 4X, A4, ':  ', 10I6, / 11X, 10I6 )
1001 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
1002     $      'less than', F8.2, / )
1003 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 )
1004 9990 FORMAT( / 1X, A3, ':  Unrecognized path name' )
1005 9989 FORMAT( / 1X, A3, ' routines were not tested' )
1006 9988 FORMAT( / 1X, A3, ' driver routines were not tested' )
1007*
1008#ifdef __FLAME__
1009      CALL FLA_FINALIZE
1010#endif
1011*
1012*     End of ZCHKAA
1013*
1014      END
1015