1 PROGRAM CCHKAA
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 * CCHKAA is the main test program for the COMPLEX 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 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 * CGE 11 List types on next line if 0 < NTYPES < 11
36 * CGB 8 List types on next line if 0 < NTYPES < 8
37 * CGT 12 List types on next line if 0 < NTYPES < 12
38 * CPO 9 List types on next line if 0 < NTYPES < 9
39 * CPO 9 List types on next line if 0 < NTYPES < 9
40 * CPP 9 List types on next line if 0 < NTYPES < 9
41 * CPB 8 List types on next line if 0 < NTYPES < 8
42 * CPT 12 List types on next line if 0 < NTYPES < 12
43 * CHE 10 List types on next line if 0 < NTYPES < 10
44 * CHP 10 List types on next line if 0 < NTYPES < 10
45 * CSY 11 List types on next line if 0 < NTYPES < 11
46 * CSP 11 List types on next line if 0 < NTYPES < 11
47 * CTR 18 List types on next line if 0 < NTYPES < 18
48 * CTP 18 List types on next line if 0 < NTYPES < 18
49 * CTB 17 List types on next line if 0 < NTYPES < 17
50 * CQR 8 List types on next line if 0 < NTYPES < 8
51 * CRQ 8 List types on next line if 0 < NTYPES < 8
52 * CLQ 8 List types on next line if 0 < NTYPES < 8
53 * CQL 8 List types on next line if 0 < NTYPES < 8
54 * CQP 6 List types on next line if 0 < NTYPES < 6
55 * CTZ 3 List types on next line if 0 < NTYPES < 3
56 * CLS 6 List types on next line if 0 < NTYPES < 6
57 * CEQ
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 REAL 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 REAL RWORK( 150*NMAX+2*MAXRHS ), S( 2*NMAX )
113 COMPLEX A( ( KDMAX+1 )*NMAX, 7 ), B( NMAX*MAXRHS, 4 ),
114 $ WORK( NMAX, NMAX+MAXRHS+10 )
115 * ..
116 * .. External Functions ..
117 LOGICAL LSAME, LSAMEN
118 REAL SECOND, SLAMCH
119 EXTERNAL LSAME, LSAMEN, SECOND, SLAMCH
120 * ..
121 * .. External Subroutines ..
122 EXTERNAL ALAREQ, CCHKEQ, CCHKGB, CCHKGE, CCHKGT, CCHKHE,
123 $ CCHKHP, CCHKLQ, CCHKPB, CCHKPO, CCHKPS, CCHKPP,
124 $ CCHKPT, CCHKQ3, CCHKQL, CCHKQP, CCHKQR, CCHKRQ,
125 $ CCHKSP, CCHKSY, CCHKTB, CCHKTP, CCHKTR, CCHKTZ,
126 $ CDRVGB, CDRVGE, CDRVGT, CDRVHE, CDRVHP, CDRVLS,
127 $ CDRVPB, CDRVPO, CDRVPP, CDRVPT, CDRVSP, CDRVSY,
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 / CLAENV / IPARMS
140 COMMON / INFOC / INFOT, NUNIT, OK, LERR
141 COMMON / SRNAMC / SRNAMT
142 * ..
143 * .. Data statements ..
144 DATA THREQ / 2.0 / , INTSTR / '0123456789' /
145 * ..
146 * .. Executable Statements ..
147 *
148 S1 = SECOND( )
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 = SLAMCH( 'Underflow threshold' )
334 WRITE( NOUT, FMT = 9991 )'underflow', EPS
335 EPS = SLAMCH( 'Overflow threshold' )
336 WRITE( NOUT, FMT = 9991 )'overflow ', EPS
337 EPS = SLAMCH( '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( 1: 3 )
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 = 1, 10
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( 1: 1 )
374 C2 = PATH( 2: 3 )
375 *
376 * Check first character for correct precision.
377 *
378 IF( .NOT.LSAME( C1, 'Complex 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 CCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
396 $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
397 $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
398 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
399 ELSE
400 WRITE( NOUT, FMT = 9989 )PATH
401 END IF
402 *
403 IF( TSTDRV ) THEN
404 CALL CDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
405 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
406 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
423 $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
424 $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
425 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
426 ELSE
427 WRITE( NOUT, FMT = 9989 )PATH
428 END IF
429 *
430 IF( TSTDRV ) THEN
431 CALL CDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
432 $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
433 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
448 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
449 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
450 ELSE
451 WRITE( NOUT, FMT = 9989 )PATH
452 END IF
453 *
454 IF( TSTDRV ) THEN
455 CALL CDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
456 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
457 $ B( 1, 3 ), 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 CCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
471 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
472 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
473 $ WORK, RWORK, NOUT )
474 ELSE
475 WRITE( NOUT, FMT = 9989 )PATH
476 END IF
477 *
478 IF( TSTDRV ) THEN
479 CALL CDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
480 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
481 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
497 $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
498 $ A( 1, 2 ), A( 1, 3 ), 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 CCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
513 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
514 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
515 $ NOUT )
516 ELSE
517 WRITE( NOUT, FMT = 9989 )PATH
518 END IF
519 *
520 IF( TSTDRV ) THEN
521 CALL CDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
522 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
523 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
538 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
539 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
540 $ WORK, RWORK, NOUT )
541 ELSE
542 WRITE( NOUT, FMT = 9989 )PATH
543 END IF
544 *
545 IF( TSTDRV ) THEN
546 CALL CDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
547 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
548 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
563 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
564 $ B( 1, 3 ), WORK, RWORK, NOUT )
565 ELSE
566 WRITE( NOUT, FMT = 9989 )PATH
567 END IF
568 *
569 IF( TSTDRV ) THEN
570 CALL CDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
571 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
572 $ B( 1, 3 ), 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 CCHKHE( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
586 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
587 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
588 $ WORK, RWORK, IWORK, NOUT )
589 ELSE
590 WRITE( NOUT, FMT = 9989 )PATH
591 END IF
592 *
593 IF( TSTDRV ) THEN
594 CALL CDRVHE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
595 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
596 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKHP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
611 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
612 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
613 $ IWORK, NOUT )
614 ELSE
615 WRITE( NOUT, FMT = 9989 )PATH
616 END IF
617 *
618 IF( TSTDRV ) THEN
619 CALL CDRVHP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
620 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
621 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
636 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
637 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
638 $ WORK, RWORK, IWORK, NOUT )
639 ELSE
640 WRITE( NOUT, FMT = 9989 )PATH
641 END IF
642 *
643 IF( TSTDRV ) THEN
644 CALL CDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
645 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
646 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
661 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
662 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
663 $ IWORK, NOUT )
664 ELSE
665 WRITE( NOUT, FMT = 9989 )PATH
666 END IF
667 *
668 IF( TSTDRV ) THEN
669 CALL CDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
670 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
671 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
686 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
687 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 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 CCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
702 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
703 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
717 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
718 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
732 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
733 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
734 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
749 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
750 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
751 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
766 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
767 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
768 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
783 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
784 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
785 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKEQ( 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 CCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
811 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), S( NMAX+1 ),
812 $ B( 1, 1 ), 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 CCHKQP( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
826 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), S( NMAX+1 ),
827 $ B( 1, 1 ), WORK, RWORK, IWORK, NOUT )
828 CALL CCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
829 $ THRESH, A( 1, 1 ), A( 1, 2 ), S( 1 ),
830 $ S( NMAX+1 ), B( 1, 1 ), 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 CDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
845 $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
846 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
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 = SECOND( )
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 LAPACK routines ',
878 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
879 $ / / ' The following parameter values will be used:' )
880 9993 FORMAT( 4X, 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', E16.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 CCHKAA
889 *
890 END
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 * CCHKAA is the main test program for the COMPLEX 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 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 * CGE 11 List types on next line if 0 < NTYPES < 11
36 * CGB 8 List types on next line if 0 < NTYPES < 8
37 * CGT 12 List types on next line if 0 < NTYPES < 12
38 * CPO 9 List types on next line if 0 < NTYPES < 9
39 * CPO 9 List types on next line if 0 < NTYPES < 9
40 * CPP 9 List types on next line if 0 < NTYPES < 9
41 * CPB 8 List types on next line if 0 < NTYPES < 8
42 * CPT 12 List types on next line if 0 < NTYPES < 12
43 * CHE 10 List types on next line if 0 < NTYPES < 10
44 * CHP 10 List types on next line if 0 < NTYPES < 10
45 * CSY 11 List types on next line if 0 < NTYPES < 11
46 * CSP 11 List types on next line if 0 < NTYPES < 11
47 * CTR 18 List types on next line if 0 < NTYPES < 18
48 * CTP 18 List types on next line if 0 < NTYPES < 18
49 * CTB 17 List types on next line if 0 < NTYPES < 17
50 * CQR 8 List types on next line if 0 < NTYPES < 8
51 * CRQ 8 List types on next line if 0 < NTYPES < 8
52 * CLQ 8 List types on next line if 0 < NTYPES < 8
53 * CQL 8 List types on next line if 0 < NTYPES < 8
54 * CQP 6 List types on next line if 0 < NTYPES < 6
55 * CTZ 3 List types on next line if 0 < NTYPES < 3
56 * CLS 6 List types on next line if 0 < NTYPES < 6
57 * CEQ
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 REAL 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 REAL RWORK( 150*NMAX+2*MAXRHS ), S( 2*NMAX )
113 COMPLEX A( ( KDMAX+1 )*NMAX, 7 ), B( NMAX*MAXRHS, 4 ),
114 $ WORK( NMAX, NMAX+MAXRHS+10 )
115 * ..
116 * .. External Functions ..
117 LOGICAL LSAME, LSAMEN
118 REAL SECOND, SLAMCH
119 EXTERNAL LSAME, LSAMEN, SECOND, SLAMCH
120 * ..
121 * .. External Subroutines ..
122 EXTERNAL ALAREQ, CCHKEQ, CCHKGB, CCHKGE, CCHKGT, CCHKHE,
123 $ CCHKHP, CCHKLQ, CCHKPB, CCHKPO, CCHKPS, CCHKPP,
124 $ CCHKPT, CCHKQ3, CCHKQL, CCHKQP, CCHKQR, CCHKRQ,
125 $ CCHKSP, CCHKSY, CCHKTB, CCHKTP, CCHKTR, CCHKTZ,
126 $ CDRVGB, CDRVGE, CDRVGT, CDRVHE, CDRVHP, CDRVLS,
127 $ CDRVPB, CDRVPO, CDRVPP, CDRVPT, CDRVSP, CDRVSY,
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 / CLAENV / IPARMS
140 COMMON / INFOC / INFOT, NUNIT, OK, LERR
141 COMMON / SRNAMC / SRNAMT
142 * ..
143 * .. Data statements ..
144 DATA THREQ / 2.0 / , INTSTR / '0123456789' /
145 * ..
146 * .. Executable Statements ..
147 *
148 S1 = SECOND( )
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 = SLAMCH( 'Underflow threshold' )
334 WRITE( NOUT, FMT = 9991 )'underflow', EPS
335 EPS = SLAMCH( 'Overflow threshold' )
336 WRITE( NOUT, FMT = 9991 )'overflow ', EPS
337 EPS = SLAMCH( '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( 1: 3 )
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 = 1, 10
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( 1: 1 )
374 C2 = PATH( 2: 3 )
375 *
376 * Check first character for correct precision.
377 *
378 IF( .NOT.LSAME( C1, 'Complex 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 CCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
396 $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
397 $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
398 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
399 ELSE
400 WRITE( NOUT, FMT = 9989 )PATH
401 END IF
402 *
403 IF( TSTDRV ) THEN
404 CALL CDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
405 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
406 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
423 $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
424 $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
425 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
426 ELSE
427 WRITE( NOUT, FMT = 9989 )PATH
428 END IF
429 *
430 IF( TSTDRV ) THEN
431 CALL CDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
432 $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
433 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
448 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
449 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
450 ELSE
451 WRITE( NOUT, FMT = 9989 )PATH
452 END IF
453 *
454 IF( TSTDRV ) THEN
455 CALL CDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
456 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
457 $ B( 1, 3 ), 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 CCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
471 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
472 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
473 $ WORK, RWORK, NOUT )
474 ELSE
475 WRITE( NOUT, FMT = 9989 )PATH
476 END IF
477 *
478 IF( TSTDRV ) THEN
479 CALL CDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
480 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
481 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
497 $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
498 $ A( 1, 2 ), A( 1, 3 ), 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 CCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
513 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
514 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
515 $ NOUT )
516 ELSE
517 WRITE( NOUT, FMT = 9989 )PATH
518 END IF
519 *
520 IF( TSTDRV ) THEN
521 CALL CDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
522 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
523 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
538 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
539 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
540 $ WORK, RWORK, NOUT )
541 ELSE
542 WRITE( NOUT, FMT = 9989 )PATH
543 END IF
544 *
545 IF( TSTDRV ) THEN
546 CALL CDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
547 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
548 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 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 CCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
563 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
564 $ B( 1, 3 ), WORK, RWORK, NOUT )
565 ELSE
566 WRITE( NOUT, FMT = 9989 )PATH
567 END IF
568 *
569 IF( TSTDRV ) THEN
570 CALL CDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
571 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
572 $ B( 1, 3 ), 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 CCHKHE( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
586 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
587 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
588 $ WORK, RWORK, IWORK, NOUT )
589 ELSE
590 WRITE( NOUT, FMT = 9989 )PATH
591 END IF
592 *
593 IF( TSTDRV ) THEN
594 CALL CDRVHE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
595 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
596 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKHP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
611 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
612 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
613 $ IWORK, NOUT )
614 ELSE
615 WRITE( NOUT, FMT = 9989 )PATH
616 END IF
617 *
618 IF( TSTDRV ) THEN
619 CALL CDRVHP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
620 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
621 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
636 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
637 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
638 $ WORK, RWORK, IWORK, NOUT )
639 ELSE
640 WRITE( NOUT, FMT = 9989 )PATH
641 END IF
642 *
643 IF( TSTDRV ) THEN
644 CALL CDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
645 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
646 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
661 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
662 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
663 $ IWORK, NOUT )
664 ELSE
665 WRITE( NOUT, FMT = 9989 )PATH
666 END IF
667 *
668 IF( TSTDRV ) THEN
669 CALL CDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
670 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
671 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
686 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
687 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 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 CCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
702 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
703 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
717 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
718 $ B( 1, 2 ), B( 1, 3 ), 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 CCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
732 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
733 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
734 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
749 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
750 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
751 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
766 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
767 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
768 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
783 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
784 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
785 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
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 CCHKEQ( 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 CCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
811 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), S( NMAX+1 ),
812 $ B( 1, 1 ), 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 CCHKQP( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
826 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), S( NMAX+1 ),
827 $ B( 1, 1 ), WORK, RWORK, IWORK, NOUT )
828 CALL CCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
829 $ THRESH, A( 1, 1 ), A( 1, 2 ), S( 1 ),
830 $ S( NMAX+1 ), B( 1, 1 ), 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 CDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
845 $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
846 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
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 = SECOND( )
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 LAPACK routines ',
878 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
879 $ / / ' The following parameter values will be used:' )
880 9993 FORMAT( 4X, 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', E16.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 CCHKAA
889 *
890 END