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