1*> \brief \b DCHKAA
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 DCHKAA
12*
13*
14*> \par Purpose:
15*  =============
16*>
17*> \verbatim
18*>
19*> DCHKAA is the main test program for the DOUBLE PRECISION LAPACK
20*> linear equation 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 40 lines:
28*> Data file for testing DOUBLE PRECISION LAPACK linear eqn. 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*> 20.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*> DGE   11               List types on next line if 0 < NTYPES < 11
45*> DGB    8               List types on next line if 0 < NTYPES <  8
46*> DGT   12               List types on next line if 0 < NTYPES < 12
47*> DPO    9               List types on next line if 0 < NTYPES <  9
48*> DPS    9               List types on next line if 0 < NTYPES <  9
49*> DPP    9               List types on next line if 0 < NTYPES <  9
50*> DPB    8               List types on next line if 0 < NTYPES <  8
51*> DPT   12               List types on next line if 0 < NTYPES < 12
52*> DSY   10               List types on next line if 0 < NTYPES < 10
53*> DSR   10               List types on next line if 0 < NTYPES < 10
54*> DSK   10               List types on next line if 0 < NTYPES < 10
55*> DSA   10               List types on next line if 0 < NTYPES < 10
56*> DS2   10               List types on next line if 0 < NTYPES < 10
57*> DSP   10               List types on next line if 0 < NTYPES < 10
58*> DTR   18               List types on next line if 0 < NTYPES < 18
59*> DTP   18               List types on next line if 0 < NTYPES < 18
60*> DTB   17               List types on next line if 0 < NTYPES < 17
61*> DQR    8               List types on next line if 0 < NTYPES <  8
62*> DRQ    8               List types on next line if 0 < NTYPES <  8
63*> DLQ    8               List types on next line if 0 < NTYPES <  8
64*> DQL    8               List types on next line if 0 < NTYPES <  8
65*> DQP    6               List types on next line if 0 < NTYPES <  6
66*> DTZ    3               List types on next line if 0 < NTYPES <  3
67*> DLS    6               List types on next line if 0 < NTYPES <  6
68*> DEQ
69*> DQT
70*> DQX
71*> DTQ
72*> DXQ
73*> DTS
74*> DHH
75*> \endverbatim
76*
77*  Parameters:
78*  ==========
79*
80*> \verbatim
81*>  NMAX    INTEGER
82*>          The maximum allowable value for M and N.
83*>
84*>  MAXIN   INTEGER
85*>          The number of different values that can be used for each of
86*>          M, N, NRHS, NB, NX and RANK
87*>
88*>  MAXRHS  INTEGER
89*>          The maximum number of right hand sides
90*>
91*>  MATMAX  INTEGER
92*>          The maximum number of matrix types to use for testing
93*>
94*>  NIN     INTEGER
95*>          The unit number for input
96*>
97*>  NOUT    INTEGER
98*>          The unit number for output
99*> \endverbatim
100*
101*  Authors:
102*  ========
103*
104*> \author Univ. of Tennessee
105*> \author Univ. of California Berkeley
106*> \author Univ. of Colorado Denver
107*> \author NAG Ltd.
108*
109*> \ingroup double_lin
110*
111*  =====================================================================
112      PROGRAM DCHKAA
113*
114*  -- LAPACK test routine --
115*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
116*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
117*
118*  =====================================================================
119*
120*     .. Parameters ..
121      INTEGER            NMAX
122      PARAMETER          ( NMAX = 132 )
123      INTEGER            MAXIN
124      PARAMETER          ( MAXIN = 12 )
125      INTEGER            MAXRHS
126      PARAMETER          ( MAXRHS = 16 )
127      INTEGER            MATMAX
128      PARAMETER          ( MATMAX = 30 )
129      INTEGER            NIN, NOUT
130      PARAMETER          ( NIN = 5, NOUT = 6 )
131      INTEGER            KDMAX
132      PARAMETER          ( KDMAX = NMAX+( NMAX+1 ) / 4 )
133*     ..
134*     .. Local Scalars ..
135      LOGICAL            FATAL, TSTCHK, TSTDRV, TSTERR
136      CHARACTER          C1
137      CHARACTER*2        C2
138      CHARACTER*3        PATH
139      CHARACTER*10       INTSTR
140      CHARACTER*72       ALINE
141      INTEGER            I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN,
142     $                   NNB, NNB2, NNS, NRHS, NTYPES, NRANK,
143     $                   VERS_MAJOR, VERS_MINOR, VERS_PATCH
144      DOUBLE PRECISION   EPS, S1, S2, THREQ, THRESH
145*     ..
146*     .. Local Arrays ..
147      LOGICAL            DOTYPE( MATMAX )
148      INTEGER            IWORK( 25*NMAX ), MVAL( MAXIN ),
149     $                   NBVAL( MAXIN ), NBVAL2( MAXIN ),
150     $                   NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ),
151     $                   RANKVAL( MAXIN ), PIV( NMAX )
152      DOUBLE PRECISION   E( NMAX ), S( 2*NMAX )
153*     ..
154*     .. Allocatable Arrays ..
155      INTEGER AllocateStatus
156      DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RWORK
157      DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: A, B, WORK
158*     ..
159*     .. External Functions ..
160      LOGICAL            LSAME, LSAMEN
161      DOUBLE PRECISION   DLAMCH, DSECND
162      EXTERNAL           LSAME, LSAMEN, DLAMCH, DSECND
163*     ..
164*     .. External Subroutines ..
165      EXTERNAL           ALAREQ, DCHKEQ, DCHKGB, DCHKGE, DCHKGT, DCHKLQ,
166     $                   DCHKORHR_COL, DCHKPB, DCHKPO, DCHKPS, DCHKPP,
167     $                   DCHKPT, DCHKQ3, DCHKQL, DCHKQR, DCHKRQ, DCHKSP,
168     $                   DCHKSY, DCHKSY_ROOK, DCHKSY_RK, DCHKSY_AA,
169     $                   DCHKTB, DCHKTP, DCHKTR, DCHKTZ, DDRVGB, DDRVGE,
170     $                   DDRVGT, DDRVLS, DDRVPB, DDRVPO, DDRVPP, DDRVPT,
171     $                   DDRVSP, DDRVSY, DDRVSY_ROOK, DDRVSY_RK,
172     $                   DDRVSY_AA, ILAVER, DCHKLQTP, DCHKQRT, DCHKQRTP,
173     $                   DCHKLQT,DCHKTSQR
174*     ..
175*     .. Scalars in Common ..
176      LOGICAL            LERR, OK
177      CHARACTER*32       SRNAMT
178      INTEGER            INFOT, NUNIT
179*     ..
180*     .. Arrays in Common ..
181      INTEGER            IPARMS( 100 )
182*     ..
183*     .. Common blocks ..
184      COMMON             / INFOC / INFOT, NUNIT, OK, LERR
185      COMMON             / SRNAMC / SRNAMT
186      COMMON             / CLAENV / IPARMS
187*     ..
188*     .. Data statements ..
189      DATA               THREQ / 2.0D0 / , INTSTR / '0123456789' /
190*     ..
191*     ..
192*     .. Allocate memory dynamically ..
193*
194      ALLOCATE ( A( ( KDMAX+1 )*NMAX, 7 ), STAT = AllocateStatus )
195      IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
196      ALLOCATE ( B( NMAX*MAXRHS, 4 ), STAT = AllocateStatus )
197      IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
198      ALLOCATE ( WORK( NMAX, 3*NMAX+MAXRHS+30 ), STAT = AllocateStatus )
199      IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
200      ALLOCATE ( RWORK( 5*NMAX+2*MAXRHS ), STAT = AllocateStatus )
201      IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
202*
203*     .. Executable Statements ..
204*
205      S1 = DSECND( )
206      LDA = NMAX
207      FATAL = .FALSE.
208*
209*     Read a dummy line.
210*
211      READ( NIN, FMT = * )
212*
213*     Report values of parameters.
214*
215      CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
216      WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
217*
218*     Read the values of M
219*
220      READ( NIN, FMT = * )NM
221      IF( NM.LT.1 ) THEN
222         WRITE( NOUT, FMT = 9996 )' NM ', NM, 1
223         NM = 0
224         FATAL = .TRUE.
225      ELSE IF( NM.GT.MAXIN ) THEN
226         WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN
227         NM = 0
228         FATAL = .TRUE.
229      END IF
230      READ( NIN, FMT = * )( MVAL( I ), I = 1, NM )
231      DO 10 I = 1, NM
232         IF( MVAL( I ).LT.0 ) THEN
233            WRITE( NOUT, FMT = 9996 )' M  ', MVAL( I ), 0
234            FATAL = .TRUE.
235         ELSE IF( MVAL( I ).GT.NMAX ) THEN
236            WRITE( NOUT, FMT = 9995 )' M  ', MVAL( I ), NMAX
237            FATAL = .TRUE.
238         END IF
239   10 CONTINUE
240      IF( NM.GT.0 )
241     $   WRITE( NOUT, FMT = 9993 )'M   ', ( MVAL( I ), I = 1, NM )
242*
243*     Read the values of N
244*
245      READ( NIN, FMT = * )NN
246      IF( NN.LT.1 ) THEN
247         WRITE( NOUT, FMT = 9996 )' NN ', NN, 1
248         NN = 0
249         FATAL = .TRUE.
250      ELSE IF( NN.GT.MAXIN ) THEN
251         WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN
252         NN = 0
253         FATAL = .TRUE.
254      END IF
255      READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
256      DO 20 I = 1, NN
257         IF( NVAL( I ).LT.0 ) THEN
258            WRITE( NOUT, FMT = 9996 )' N  ', NVAL( I ), 0
259            FATAL = .TRUE.
260         ELSE IF( NVAL( I ).GT.NMAX ) THEN
261            WRITE( NOUT, FMT = 9995 )' N  ', NVAL( I ), NMAX
262            FATAL = .TRUE.
263         END IF
264   20 CONTINUE
265      IF( NN.GT.0 )
266     $   WRITE( NOUT, FMT = 9993 )'N   ', ( NVAL( I ), I = 1, NN )
267*
268*     Read the values of NRHS
269*
270      READ( NIN, FMT = * )NNS
271      IF( NNS.LT.1 ) THEN
272         WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
273         NNS = 0
274         FATAL = .TRUE.
275      ELSE IF( NNS.GT.MAXIN ) THEN
276         WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
277         NNS = 0
278         FATAL = .TRUE.
279      END IF
280      READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
281      DO 30 I = 1, NNS
282         IF( NSVAL( I ).LT.0 ) THEN
283            WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
284            FATAL = .TRUE.
285         ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
286            WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
287            FATAL = .TRUE.
288         END IF
289   30 CONTINUE
290      IF( NNS.GT.0 )
291     $   WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
292*
293*     Read the values of NB
294*
295      READ( NIN, FMT = * )NNB
296      IF( NNB.LT.1 ) THEN
297         WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1
298         NNB = 0
299         FATAL = .TRUE.
300      ELSE IF( NNB.GT.MAXIN ) THEN
301         WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN
302         NNB = 0
303         FATAL = .TRUE.
304      END IF
305      READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB )
306      DO 40 I = 1, NNB
307         IF( NBVAL( I ).LT.0 ) THEN
308            WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0
309            FATAL = .TRUE.
310         END IF
311   40 CONTINUE
312      IF( NNB.GT.0 )
313     $   WRITE( NOUT, FMT = 9993 )'NB  ', ( NBVAL( I ), I = 1, NNB )
314*
315*     Set NBVAL2 to be the set of unique values of NB
316*
317      NNB2 = 0
318      DO 60 I = 1, NNB
319         NB = NBVAL( I )
320         DO 50 J = 1, NNB2
321            IF( NB.EQ.NBVAL2( J ) )
322     $         GO TO 60
323   50    CONTINUE
324         NNB2 = NNB2 + 1
325         NBVAL2( NNB2 ) = NB
326   60 CONTINUE
327*
328*     Read the values of NX
329*
330      READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB )
331      DO 70 I = 1, NNB
332         IF( NXVAL( I ).LT.0 ) THEN
333            WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0
334            FATAL = .TRUE.
335         END IF
336   70 CONTINUE
337      IF( NNB.GT.0 )
338     $   WRITE( NOUT, FMT = 9993 )'NX  ', ( NXVAL( I ), I = 1, NNB )
339*
340*     Read the values of RANKVAL
341*
342      READ( NIN, FMT = * )NRANK
343      IF( NN.LT.1 ) THEN
344         WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1
345         NRANK = 0
346         FATAL = .TRUE.
347      ELSE IF( NN.GT.MAXIN ) THEN
348         WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN
349         NRANK = 0
350         FATAL = .TRUE.
351      END IF
352      READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK )
353      DO I = 1, NRANK
354         IF( RANKVAL( I ).LT.0 ) THEN
355            WRITE( NOUT, FMT = 9996 )' RANK  ', RANKVAL( I ), 0
356            FATAL = .TRUE.
357         ELSE IF( RANKVAL( I ).GT.100 ) THEN
358            WRITE( NOUT, FMT = 9995 )' RANK  ', RANKVAL( I ), 100
359            FATAL = .TRUE.
360         END IF
361      END DO
362      IF( NRANK.GT.0 )
363     $   WRITE( NOUT, FMT = 9993 )'RANK % OF N',
364     $   ( RANKVAL( I ), I = 1, NRANK )
365*
366*     Read the threshold value for the test ratios.
367*
368      READ( NIN, FMT = * )THRESH
369      WRITE( NOUT, FMT = 9992 )THRESH
370*
371*     Read the flag that indicates whether to test the LAPACK routines.
372*
373      READ( NIN, FMT = * )TSTCHK
374*
375*     Read the flag that indicates whether to test the driver routines.
376*
377      READ( NIN, FMT = * )TSTDRV
378*
379*     Read the flag that indicates whether to test the error exits.
380*
381      READ( NIN, FMT = * )TSTERR
382*
383      IF( FATAL ) THEN
384         WRITE( NOUT, FMT = 9999 )
385         STOP
386      END IF
387*
388*     Calculate and print the machine dependent constants.
389*
390      EPS = DLAMCH( 'Underflow threshold' )
391      WRITE( NOUT, FMT = 9991 )'underflow', EPS
392      EPS = DLAMCH( 'Overflow threshold' )
393      WRITE( NOUT, FMT = 9991 )'overflow ', EPS
394      EPS = DLAMCH( 'Epsilon' )
395      WRITE( NOUT, FMT = 9991 )'precision', EPS
396      WRITE( NOUT, FMT = * )
397*
398   80 CONTINUE
399*
400*     Read a test path and the number of matrix types to use.
401*
402      READ( NIN, FMT = '(A72)', END = 140 )ALINE
403      PATH = ALINE( 1: 3 )
404      NMATS = MATMAX
405      I = 3
406   90 CONTINUE
407      I = I + 1
408      IF( I.GT.72 ) THEN
409         NMATS = MATMAX
410         GO TO 130
411      END IF
412      IF( ALINE( I: I ).EQ.' ' )
413     $   GO TO 90
414      NMATS = 0
415  100 CONTINUE
416      C1 = ALINE( I: I )
417      DO 110 K = 1, 10
418         IF( C1.EQ.INTSTR( K: K ) ) THEN
419            IC = K - 1
420            GO TO 120
421         END IF
422  110 CONTINUE
423      GO TO 130
424  120 CONTINUE
425      NMATS = NMATS*10 + IC
426      I = I + 1
427      IF( I.GT.72 )
428     $   GO TO 130
429      GO TO 100
430  130 CONTINUE
431      C1 = PATH( 1: 1 )
432      C2 = PATH( 2: 3 )
433      NRHS = NSVAL( 1 )
434*
435*     Check first character for correct precision.
436*
437      IF( .NOT.LSAME( C1, 'Double precision' ) ) THEN
438         WRITE( NOUT, FMT = 9990 )PATH
439*
440      ELSE IF( NMATS.LE.0 ) THEN
441*
442*        Check for a positive number of tests requested.
443*
444         WRITE( NOUT, FMT = 9989 )PATH
445*
446      ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
447*
448*        GE:  general matrices
449*
450         NTYPES = 11
451         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
452*
453         IF( TSTCHK ) THEN
454            CALL DCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
455     $                   NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
456     $                   A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
457     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
458         ELSE
459            WRITE( NOUT, FMT = 9989 )PATH
460         END IF
461*
462         IF( TSTDRV ) THEN
463            CALL DDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
464     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
465     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
466     $                   RWORK, IWORK, NOUT )
467         ELSE
468            WRITE( NOUT, FMT = 9988 )PATH
469         END IF
470*
471      ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
472*
473*        GB:  general banded matrices
474*
475         LA = ( 2*KDMAX+1 )*NMAX
476         LAFAC = ( 3*KDMAX+1 )*NMAX
477         NTYPES = 8
478         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
479*
480         IF( TSTCHK ) THEN
481            CALL DCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
482     $                   NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
483     $                   A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
484     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
485         ELSE
486            WRITE( NOUT, FMT = 9989 )PATH
487         END IF
488*
489         IF( TSTDRV ) THEN
490            CALL DDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
491     $                   A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
492     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S,
493     $                   WORK, RWORK, IWORK, NOUT )
494         ELSE
495            WRITE( NOUT, FMT = 9988 )PATH
496         END IF
497*
498      ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
499*
500*        GT:  general tridiagonal matrices
501*
502         NTYPES = 12
503         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
504*
505         IF( TSTCHK ) THEN
506            CALL DCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
507     $                   A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
508     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
509         ELSE
510            WRITE( NOUT, FMT = 9989 )PATH
511         END IF
512*
513         IF( TSTDRV ) THEN
514            CALL DDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
515     $                   A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
516     $                   B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
517         ELSE
518            WRITE( NOUT, FMT = 9988 )PATH
519         END IF
520*
521      ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN
522*
523*        PO:  positive definite matrices
524*
525         NTYPES = 9
526         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
527*
528         IF( TSTCHK ) THEN
529            CALL DCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
530     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
531     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
532     $                   WORK, RWORK, IWORK, NOUT )
533         ELSE
534            WRITE( NOUT, FMT = 9989 )PATH
535         END IF
536*
537         IF( TSTDRV ) THEN
538            CALL DDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
539     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
540     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
541     $                   RWORK, IWORK, NOUT )
542         ELSE
543            WRITE( NOUT, FMT = 9988 )PATH
544         END IF
545*
546      ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN
547*
548*        PS:  positive semi-definite matrices
549*
550         NTYPES = 9
551*
552         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
553*
554         IF( TSTCHK ) THEN
555            CALL DCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
556     $                   RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
557     $                   A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK,
558     $                   NOUT )
559         ELSE
560            WRITE( NOUT, FMT = 9989 )PATH
561         END IF
562*
563      ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
564*
565*        PP:  positive definite packed matrices
566*
567         NTYPES = 9
568         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
569*
570         IF( TSTCHK ) THEN
571            CALL DCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
572     $                   LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
573     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
574     $                   IWORK, NOUT )
575         ELSE
576            WRITE( NOUT, FMT = 9989 )PATH
577         END IF
578*
579         IF( TSTDRV ) THEN
580            CALL DDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
581     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
582     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
583     $                   RWORK, IWORK, NOUT )
584         ELSE
585            WRITE( NOUT, FMT = 9988 )PATH
586         END IF
587*
588      ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
589*
590*        PB:  positive definite banded matrices
591*
592         NTYPES = 8
593         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
594*
595         IF( TSTCHK ) THEN
596            CALL DCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
597     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
598     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
599     $                   WORK, RWORK, IWORK, NOUT )
600         ELSE
601            WRITE( NOUT, FMT = 9989 )PATH
602         END IF
603*
604         IF( TSTDRV ) THEN
605            CALL DDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
606     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
607     $                   B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
608     $                   RWORK, IWORK, NOUT )
609         ELSE
610            WRITE( NOUT, FMT = 9988 )PATH
611         END IF
612*
613      ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
614*
615*        PT:  positive definite tridiagonal matrices
616*
617         NTYPES = 12
618         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
619*
620         IF( TSTCHK ) THEN
621            CALL DCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
622     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
623     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
624         ELSE
625            WRITE( NOUT, FMT = 9989 )PATH
626         END IF
627*
628         IF( TSTDRV ) THEN
629            CALL DDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
630     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
631     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
632         ELSE
633            WRITE( NOUT, FMT = 9988 )PATH
634         END IF
635*
636      ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN
637*
638*        SY:  symmetric indefinite matrices,
639*             with partial (Bunch-Kaufman) pivoting algorithm
640*
641         NTYPES = 10
642         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
643*
644         IF( TSTCHK ) THEN
645            CALL DCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
646     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
647     $                   A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
648     $                   WORK, RWORK, IWORK, NOUT )
649         ELSE
650            WRITE( NOUT, FMT = 9989 )PATH
651         END IF
652*
653         IF( TSTDRV ) THEN
654            CALL DDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
655     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
656     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
657     $                   NOUT )
658         ELSE
659            WRITE( NOUT, FMT = 9988 )PATH
660         END IF
661*
662      ELSE IF( LSAMEN( 2, C2, 'SR' ) ) THEN
663*
664*        SR:  symmetric indefinite matrices,
665*             with bounded Bunch-Kaufman (rook) pivoting algorithm
666*
667         NTYPES = 10
668         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
669*
670         IF( TSTCHK ) THEN
671            CALL DCHKSY_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
672     $                       THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
673     $                       A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
674     $                       WORK, RWORK, IWORK, NOUT )
675         ELSE
676            WRITE( NOUT, FMT = 9989 )PATH
677         END IF
678*
679         IF( TSTDRV ) THEN
680            CALL DDRVSY_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
681     $                        LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
682     $                        B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
683     $                        WORK, RWORK, IWORK, NOUT )
684         ELSE
685            WRITE( NOUT, FMT = 9988 )PATH
686         END IF
687*
688      ELSE IF( LSAMEN( 2, C2, 'SK' ) ) THEN
689*
690*        SK:  symmetric indefinite matrices,
691*             with bounded Bunch-Kaufman (rook) pivoting algorithm,
692*             different matrix storage format than SR path version.
693*
694         NTYPES = 10
695         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
696*
697         IF( TSTCHK ) THEN
698            CALL DCHKSY_RK( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
699     $                      THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
700     $                      E, A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
701     $                      B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
702         ELSE
703            WRITE( NOUT, FMT = 9989 )PATH
704         END IF
705*
706         IF( TSTDRV ) THEN
707            CALL DDRVSY_RK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
708     $                      LDA, A( 1, 1 ), A( 1, 2 ), E, A( 1, 3 ),
709     $                      B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
710     $                      WORK, RWORK, IWORK, NOUT )
711         ELSE
712            WRITE( NOUT, FMT = 9988 )PATH
713         END IF
714*
715      ELSE IF( LSAMEN( 2, C2, 'SA' ) ) THEN
716*
717*        SA:  symmetric indefinite matrices,
718*             with partial (Aasen's) pivoting algorithm
719*
720         NTYPES = 10
721         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
722*
723         IF( TSTCHK ) THEN
724            CALL DCHKSY_AA( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS,
725     $                         NSVAL, THRESH, TSTERR, LDA,
726     $                         A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
727     $                         B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
728     $                         WORK, RWORK, IWORK, NOUT )
729         ELSE
730            WRITE( NOUT, FMT = 9989 )PATH
731         END IF
732*
733         IF( TSTDRV ) THEN
734            CALL DDRVSY_AA( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
735     $                         LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
736     $                         B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
737     $                         WORK, RWORK, IWORK, NOUT )
738         ELSE
739            WRITE( NOUT, FMT = 9988 )PATH
740         END IF
741*
742*
743      ELSE IF( LSAMEN( 2, C2, 'S2' ) ) THEN
744*
745*        SA:  symmetric indefinite matrices,
746*             with partial (Aasen's) pivoting algorithm
747*
748         NTYPES = 10
749         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
750*
751         IF( TSTCHK ) THEN
752            CALL DCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB2, NBVAL2,
753     $                         NNS, NSVAL, THRESH, TSTERR, LDA,
754     $                         A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
755     $                         B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
756     $                         WORK, RWORK, IWORK, NOUT )
757         ELSE
758            WRITE( NOUT, FMT = 9989 )PATH
759         END IF
760*
761         IF( TSTDRV ) THEN
762            CALL DDRVSY_AA_2STAGE(
763     $                         DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
764     $                         LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
765     $                         B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
766     $                         WORK, RWORK, IWORK, NOUT )
767         ELSE
768            WRITE( NOUT, FMT = 9988 )PATH
769         END IF
770*
771*
772      ELSE IF( LSAMEN( 2, C2, 'SP' ) ) THEN
773*
774*        SP:  symmetric indefinite packed matrices,
775*             with partial (Bunch-Kaufman) pivoting algorithm
776*
777         NTYPES = 10
778         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
779*
780         IF( TSTCHK ) THEN
781            CALL DCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
782     $                   LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
783     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
784     $                   IWORK, NOUT )
785         ELSE
786            WRITE( NOUT, FMT = 9989 )PATH
787         END IF
788*
789         IF( TSTDRV ) THEN
790            CALL DDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
791     $                   A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
792     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
793     $                   NOUT )
794         ELSE
795            WRITE( NOUT, FMT = 9988 )PATH
796         END IF
797*
798      ELSE IF( LSAMEN( 2, C2, 'TR' ) ) THEN
799*
800*        TR:  triangular matrices
801*
802         NTYPES = 18
803         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
804*
805         IF( TSTCHK ) THEN
806            CALL DCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
807     $                   THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
808     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
809     $                   IWORK, NOUT )
810         ELSE
811            WRITE( NOUT, FMT = 9989 )PATH
812         END IF
813*
814      ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN
815*
816*        TP:  triangular packed matrices
817*
818         NTYPES = 18
819         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
820*
821         IF( TSTCHK ) THEN
822            CALL DCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
823     $                   LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
824     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
825     $                   NOUT )
826         ELSE
827            WRITE( NOUT, FMT = 9989 )PATH
828         END IF
829*
830      ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
831*
832*        TB:  triangular banded matrices
833*
834         NTYPES = 17
835         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
836*
837         IF( TSTCHK ) THEN
838            CALL DCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
839     $                   LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
840     $                   B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
841     $                   NOUT )
842         ELSE
843            WRITE( NOUT, FMT = 9989 )PATH
844         END IF
845*
846      ELSE IF( LSAMEN( 2, C2, 'QR' ) ) THEN
847*
848*        QR:  QR factorization
849*
850         NTYPES = 8
851         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
852*
853         IF( TSTCHK ) THEN
854            CALL DCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
855     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
856     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
857     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
858     $                   WORK, RWORK, IWORK, NOUT )
859         ELSE
860            WRITE( NOUT, FMT = 9989 )PATH
861         END IF
862*
863      ELSE IF( LSAMEN( 2, C2, 'LQ' ) ) THEN
864*
865*        LQ:  LQ factorization
866*
867         NTYPES = 8
868         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
869*
870         IF( TSTCHK ) THEN
871            CALL DCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
872     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
873     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
874     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
875     $                   WORK, RWORK, NOUT )
876         ELSE
877            WRITE( NOUT, FMT = 9989 )PATH
878         END IF
879*
880      ELSE IF( LSAMEN( 2, C2, 'QL' ) ) THEN
881*
882*        QL:  QL factorization
883*
884         NTYPES = 8
885         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
886*
887         IF( TSTCHK ) THEN
888            CALL DCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
889     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
890     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
891     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
892     $                   WORK, RWORK, NOUT )
893         ELSE
894            WRITE( NOUT, FMT = 9989 )PATH
895         END IF
896*
897      ELSE IF( LSAMEN( 2, C2, 'RQ' ) ) THEN
898*
899*        RQ:  RQ factorization
900*
901         NTYPES = 8
902         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
903*
904         IF( TSTCHK ) THEN
905            CALL DCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
906     $                   NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
907     $                   A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
908     $                   B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
909     $                   WORK, RWORK, IWORK, 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 DCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
923     $                   THRESH, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
924     $                   B( 1, 3 ), WORK, IWORK, NOUT )
925         ELSE
926            WRITE( NOUT, FMT = 9989 )PATH
927         END IF
928*
929      ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN
930*
931*        TZ:  Trapezoidal matrix
932*
933         NTYPES = 3
934         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
935*
936         IF( TSTCHK ) THEN
937            CALL DCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
938     $                   A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
939     $                   B( 1, 3 ), WORK, NOUT )
940         ELSE
941            WRITE( NOUT, FMT = 9989 )PATH
942         END IF
943*
944      ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN
945*
946*        LS:  Least squares drivers
947*
948         NTYPES = 6
949         CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
950*
951         IF( TSTDRV ) THEN
952            CALL DDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
953     $                   NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
954     $                   A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
955     $                   RWORK, RWORK( NMAX+1 ), NOUT )
956         ELSE
957            WRITE( NOUT, FMT = 9988 )PATH
958         END IF
959*
960      ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN
961*
962*        EQ:  Equilibration routines for general and positive definite
963*             matrices (THREQ should be between 2 and 10)
964*
965         IF( TSTCHK ) THEN
966            CALL DCHKEQ( THREQ, NOUT )
967         ELSE
968            WRITE( NOUT, FMT = 9989 )PATH
969         END IF
970*
971      ELSE IF( LSAMEN( 2, C2, 'QT' ) ) THEN
972*
973*        QT:  QRT routines for general matrices
974*
975         IF( TSTCHK ) THEN
976            CALL DCHKQRT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
977     $                    NBVAL, NOUT )
978         ELSE
979            WRITE( NOUT, FMT = 9989 )PATH
980         END IF
981*
982      ELSE IF( LSAMEN( 2, C2, 'QX' ) ) THEN
983*
984*        QX:  QRT routines for triangular-pentagonal matrices
985*
986         IF( TSTCHK ) THEN
987            CALL DCHKQRTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
988     $                     NBVAL, NOUT )
989         ELSE
990            WRITE( NOUT, FMT = 9989 )PATH
991         END IF
992*
993      ELSE IF( LSAMEN( 2, C2, 'TQ' ) ) THEN
994*
995*        TQ:  LQT routines for general matrices
996*
997         IF( TSTCHK ) THEN
998            CALL DCHKLQT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
999     $                    NBVAL, NOUT )
1000         ELSE
1001            WRITE( NOUT, FMT = 9989 )PATH
1002         END IF
1003*
1004      ELSE IF( LSAMEN( 2, C2, 'XQ' ) ) THEN
1005*
1006*        XQ:  LQT routines for triangular-pentagonal matrices
1007*
1008         IF( TSTCHK ) THEN
1009            CALL DCHKLQTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
1010     $                     NBVAL, NOUT )
1011         ELSE
1012            WRITE( NOUT, FMT = 9989 )PATH
1013         END IF
1014*
1015      ELSE IF( LSAMEN( 2, C2, 'TS' ) ) THEN
1016*
1017*        TS:  QR routines for tall-skinny matrices
1018*
1019         IF( TSTCHK ) THEN
1020            CALL DCHKTSQR( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
1021     $                     NBVAL, NOUT )
1022         ELSE
1023            WRITE( NOUT, FMT = 9989 )PATH
1024         END IF
1025*
1026      ELSE IF( LSAMEN( 2, C2, 'HH' ) ) THEN
1027*
1028*        HH:  Householder reconstruction for tall-skinny matrices
1029*
1030         IF( TSTCHK ) THEN
1031            CALL DCHKORHR_COL( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
1032     $                         NBVAL, NOUT )
1033         ELSE
1034            WRITE( NOUT, FMT = 9989 ) PATH
1035         END IF
1036*
1037      ELSE
1038
1039*
1040         WRITE( NOUT, FMT = 9990 )PATH
1041      END IF
1042*
1043*     Go back to get another input line.
1044*
1045      GO TO 80
1046*
1047*     Branch to this line when the last record is read.
1048*
1049  140 CONTINUE
1050      CLOSE ( NIN )
1051      S2 = DSECND( )
1052      WRITE( NOUT, FMT = 9998 )
1053      WRITE( NOUT, FMT = 9997 )S2 - S1
1054*
1055      DEALLOCATE (A, STAT = AllocateStatus)
1056      DEALLOCATE (B, STAT = AllocateStatus)
1057      DEALLOCATE (WORK, STAT = AllocateStatus)
1058      DEALLOCATE (RWORK,  STAT = AllocateStatus)
1059*
1060 9999 FORMAT( / ' Execution not attempted due to input errors' )
1061 9998 FORMAT( / ' End of tests' )
1062 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
1063 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=',
1064     $      I6 )
1065 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=',
1066     $      I6 )
1067 9994 FORMAT( ' Tests of the DOUBLE PRECISION LAPACK routines ',
1068     $      / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
1069     $      / / ' The following parameter values will be used:' )
1070 9993 FORMAT( 4X, A4, ':  ', 10I6, / 11X, 10I6 )
1071 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
1072     $      'less than', F8.2, / )
1073 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 )
1074 9990 FORMAT( / 1X, A3, ':  Unrecognized path name' )
1075 9989 FORMAT( / 1X, A3, ' routines were not tested' )
1076 9988 FORMAT( / 1X, A3, ' driver routines were not tested' )
1077*
1078*     End of DCHKAA
1079*
1080      END
1081