![]() |
LAPACK
3.4.0
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b CCHKAA 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 * Definition: 00009 * =========== 00010 * 00011 * PROGRAM CCHKAA 00012 * 00013 * 00014 *> \par Purpose: 00015 * ============= 00016 *> 00017 *> \verbatim 00018 *> 00019 *> CCHKAA is the main test program for the COMPLEX linear equation 00020 *> routines. 00021 *> 00022 *> The program must be driven by a short data file. The first 14 records 00023 *> specify problem dimensions and program options using list-directed 00024 *> input. The remaining lines specify the LAPACK test paths and the 00025 *> number of matrix types to use in testing. An annotated example of a 00026 *> data file can be obtained by deleting the first 3 characters from the 00027 *> following 38 lines: 00028 *> Data file for testing COMPLEX LAPACK linear equation routines 00029 *> 7 Number of values of M 00030 *> 0 1 2 3 5 10 16 Values of M (row dimension) 00031 *> 7 Number of values of N 00032 *> 0 1 2 3 5 10 16 Values of N (column dimension) 00033 *> 1 Number of values of NRHS 00034 *> 2 Values of NRHS (number of right hand sides) 00035 *> 5 Number of values of NB 00036 *> 1 3 3 3 20 Values of NB (the blocksize) 00037 *> 1 0 5 9 1 Values of NX (crossover point) 00038 *> 3 Number of values of RANK 00039 *> 30 50 90 Values of rank (as a % of N) 00040 *> 30.0 Threshold value of test ratio 00041 *> T Put T to test the LAPACK routines 00042 *> T Put T to test the driver routines 00043 *> T Put T to test the error exits 00044 *> CGE 11 List types on next line if 0 < NTYPES < 11 00045 *> CGB 8 List types on next line if 0 < NTYPES < 8 00046 *> CGT 12 List types on next line if 0 < NTYPES < 12 00047 *> CPO 9 List types on next line if 0 < NTYPES < 9 00048 *> CPO 9 List types on next line if 0 < NTYPES < 9 00049 *> CPP 9 List types on next line if 0 < NTYPES < 9 00050 *> CPB 8 List types on next line if 0 < NTYPES < 8 00051 *> CPT 12 List types on next line if 0 < NTYPES < 12 00052 *> CHE 10 List types on next line if 0 < NTYPES < 10 00053 *> CHP 10 List types on next line if 0 < NTYPES < 10 00054 *> CSY 11 List types on next line if 0 < NTYPES < 11 00055 *> CSP 11 List types on next line if 0 < NTYPES < 11 00056 *> CTR 18 List types on next line if 0 < NTYPES < 18 00057 *> CTP 18 List types on next line if 0 < NTYPES < 18 00058 *> CTB 17 List types on next line if 0 < NTYPES < 17 00059 *> CQR 8 List types on next line if 0 < NTYPES < 8 00060 *> CRQ 8 List types on next line if 0 < NTYPES < 8 00061 *> CLQ 8 List types on next line if 0 < NTYPES < 8 00062 *> CQL 8 List types on next line if 0 < NTYPES < 8 00063 *> CQP 6 List types on next line if 0 < NTYPES < 6 00064 *> CTZ 3 List types on next line if 0 < NTYPES < 3 00065 *> CLS 6 List types on next line if 0 < NTYPES < 6 00066 *> CEQ 00067 *> \endverbatim 00068 * 00069 * Arguments: 00070 * ========== 00071 * 00072 *> \verbatim 00073 *> NMAX INTEGER 00074 *> The maximum allowable value for N. 00075 *> 00076 *> MAXIN INTEGER 00077 *> The number of different values that can be used for each of 00078 *> M, N, or NB 00079 *> 00080 *> MAXRHS INTEGER 00081 *> The maximum number of right hand sides 00082 *> 00083 *> NIN INTEGER 00084 *> The unit number for input 00085 *> 00086 *> NOUT INTEGER 00087 *> The unit number for output 00088 *> \endverbatim 00089 * 00090 * Authors: 00091 * ======== 00092 * 00093 *> \author Univ. of Tennessee 00094 *> \author Univ. of California Berkeley 00095 *> \author Univ. of Colorado Denver 00096 *> \author NAG Ltd. 00097 * 00098 *> \date November 2011 00099 * 00100 *> \ingroup complex_lin 00101 * 00102 * ===================================================================== PROGRAM CCHKAA 00103 * 00104 * -- LAPACK test routine (version 3.4.0) -- 00105 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00106 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00107 * November 2011 00108 * 00109 * ===================================================================== 00110 * 00111 * .. Parameters .. 00112 INTEGER NMAX 00113 PARAMETER ( NMAX = 132 ) 00114 INTEGER MAXIN 00115 PARAMETER ( MAXIN = 12 ) 00116 INTEGER MAXRHS 00117 PARAMETER ( MAXRHS = 16 ) 00118 INTEGER MATMAX 00119 PARAMETER ( MATMAX = 30 ) 00120 INTEGER NIN, NOUT 00121 PARAMETER ( NIN = 5, NOUT = 6 ) 00122 INTEGER KDMAX 00123 PARAMETER ( KDMAX = NMAX+( NMAX+1 ) / 4 ) 00124 * .. 00125 * .. Local Scalars .. 00126 LOGICAL FATAL, TSTCHK, TSTDRV, TSTERR 00127 CHARACTER C1 00128 CHARACTER*2 C2 00129 CHARACTER*3 PATH 00130 CHARACTER*10 INTSTR 00131 CHARACTER*72 ALINE 00132 INTEGER I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN, 00133 $ NNB, NNB2, NNS, NRHS, NTYPES, NRANK, 00134 $ VERS_MAJOR, VERS_MINOR, VERS_PATCH 00135 REAL EPS, S1, S2, THREQ, THRESH 00136 * .. 00137 * .. Local Arrays .. 00138 LOGICAL DOTYPE( MATMAX ) 00139 INTEGER IWORK( 25*NMAX ), MVAL( MAXIN ), 00140 $ NBVAL( MAXIN ), NBVAL2( MAXIN ), 00141 $ NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ), 00142 $ RANKVAL( MAXIN ), PIV( NMAX ) 00143 REAL RWORK( 150*NMAX+2*MAXRHS ), S( 2*NMAX ) 00144 COMPLEX A( ( KDMAX+1 )*NMAX, 7 ), B( NMAX*MAXRHS, 4 ), 00145 $ WORK( NMAX, NMAX+MAXRHS+10 ) 00146 * .. 00147 * .. External Functions .. 00148 LOGICAL LSAME, LSAMEN 00149 REAL SECOND, SLAMCH 00150 EXTERNAL LSAME, LSAMEN, SECOND, SLAMCH 00151 * .. 00152 * .. External Subroutines .. 00153 EXTERNAL ALAREQ, CCHKEQ, CCHKGB, CCHKGE, CCHKGT, CCHKHE, 00154 $ CCHKHP, CCHKLQ, CCHKPB, CCHKPO, CCHKPS, CCHKPP, 00155 $ CCHKPT, CCHKQ3, CCHKQL, CCHKQP, CCHKQR, CCHKRQ, 00156 $ CCHKSP, CCHKSY, CCHKTB, CCHKTP, CCHKTR, CCHKTZ, 00157 $ CDRVGB, CDRVGE, CDRVGT, CDRVHE, CDRVHP, CDRVLS, 00158 $ CDRVPB, CDRVPO, CDRVPP, CDRVPT, CDRVSP, CDRVSY, 00159 $ ILAVER 00160 * .. 00161 * .. Scalars in Common .. 00162 LOGICAL LERR, OK 00163 CHARACTER*32 SRNAMT 00164 INTEGER INFOT, NUNIT 00165 * .. 00166 * .. Arrays in Common .. 00167 INTEGER IPARMS( 100 ) 00168 * .. 00169 * .. Common blocks .. 00170 COMMON / CLAENV / IPARMS 00171 COMMON / INFOC / INFOT, NUNIT, OK, LERR 00172 COMMON / SRNAMC / SRNAMT 00173 * .. 00174 * .. Data statements .. 00175 DATA THREQ / 2.0 / , INTSTR / '0123456789' / 00176 * .. 00177 * .. Executable Statements .. 00178 * 00179 S1 = SECOND( ) 00180 LDA = NMAX 00181 FATAL = .FALSE. 00182 * 00183 * Read a dummy line. 00184 * 00185 READ( NIN, FMT = * ) 00186 * 00187 * Report values of parameters. 00188 * 00189 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH ) 00190 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH 00191 * 00192 * Read the values of M 00193 * 00194 READ( NIN, FMT = * )NM 00195 IF( NM.LT.1 ) THEN 00196 WRITE( NOUT, FMT = 9996 )' NM ', NM, 1 00197 NM = 0 00198 FATAL = .TRUE. 00199 ELSE IF( NM.GT.MAXIN ) THEN 00200 WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN 00201 NM = 0 00202 FATAL = .TRUE. 00203 END IF 00204 READ( NIN, FMT = * )( MVAL( I ), I = 1, NM ) 00205 DO 10 I = 1, NM 00206 IF( MVAL( I ).LT.0 ) THEN 00207 WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0 00208 FATAL = .TRUE. 00209 ELSE IF( MVAL( I ).GT.NMAX ) THEN 00210 WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX 00211 FATAL = .TRUE. 00212 END IF 00213 10 CONTINUE 00214 IF( NM.GT.0 ) 00215 $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM ) 00216 * 00217 * Read the values of N 00218 * 00219 READ( NIN, FMT = * )NN 00220 IF( NN.LT.1 ) THEN 00221 WRITE( NOUT, FMT = 9996 )' NN ', NN, 1 00222 NN = 0 00223 FATAL = .TRUE. 00224 ELSE IF( NN.GT.MAXIN ) THEN 00225 WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN 00226 NN = 0 00227 FATAL = .TRUE. 00228 END IF 00229 READ( NIN, FMT = * )( NVAL( I ), I = 1, NN ) 00230 DO 20 I = 1, NN 00231 IF( NVAL( I ).LT.0 ) THEN 00232 WRITE( NOUT, FMT = 9996 )' N ', NVAL( I ), 0 00233 FATAL = .TRUE. 00234 ELSE IF( NVAL( I ).GT.NMAX ) THEN 00235 WRITE( NOUT, FMT = 9995 )' N ', NVAL( I ), NMAX 00236 FATAL = .TRUE. 00237 END IF 00238 20 CONTINUE 00239 IF( NN.GT.0 ) 00240 $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN ) 00241 * 00242 * Read the values of NRHS 00243 * 00244 READ( NIN, FMT = * )NNS 00245 IF( NNS.LT.1 ) THEN 00246 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1 00247 NNS = 0 00248 FATAL = .TRUE. 00249 ELSE IF( NNS.GT.MAXIN ) THEN 00250 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN 00251 NNS = 0 00252 FATAL = .TRUE. 00253 END IF 00254 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS ) 00255 DO 30 I = 1, NNS 00256 IF( NSVAL( I ).LT.0 ) THEN 00257 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0 00258 FATAL = .TRUE. 00259 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN 00260 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS 00261 FATAL = .TRUE. 00262 END IF 00263 30 CONTINUE 00264 IF( NNS.GT.0 ) 00265 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS ) 00266 * 00267 * Read the values of NB 00268 * 00269 READ( NIN, FMT = * )NNB 00270 IF( NNB.LT.1 ) THEN 00271 WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1 00272 NNB = 0 00273 FATAL = .TRUE. 00274 ELSE IF( NNB.GT.MAXIN ) THEN 00275 WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN 00276 NNB = 0 00277 FATAL = .TRUE. 00278 END IF 00279 READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB ) 00280 DO 40 I = 1, NNB 00281 IF( NBVAL( I ).LT.0 ) THEN 00282 WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0 00283 FATAL = .TRUE. 00284 END IF 00285 40 CONTINUE 00286 IF( NNB.GT.0 ) 00287 $ WRITE( NOUT, FMT = 9993 )'NB ', ( NBVAL( I ), I = 1, NNB ) 00288 * 00289 * Set NBVAL2 to be the set of unique values of NB 00290 * 00291 NNB2 = 0 00292 DO 60 I = 1, NNB 00293 NB = NBVAL( I ) 00294 DO 50 J = 1, NNB2 00295 IF( NB.EQ.NBVAL2( J ) ) 00296 $ GO TO 60 00297 50 CONTINUE 00298 NNB2 = NNB2 + 1 00299 NBVAL2( NNB2 ) = NB 00300 60 CONTINUE 00301 * 00302 * Read the values of NX 00303 * 00304 READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB ) 00305 DO 70 I = 1, NNB 00306 IF( NXVAL( I ).LT.0 ) THEN 00307 WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0 00308 FATAL = .TRUE. 00309 END IF 00310 70 CONTINUE 00311 IF( NNB.GT.0 ) 00312 $ WRITE( NOUT, FMT = 9993 )'NX ', ( NXVAL( I ), I = 1, NNB ) 00313 * 00314 * Read the values of RANKVAL 00315 * 00316 READ( NIN, FMT = * )NRANK 00317 IF( NN.LT.1 ) THEN 00318 WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1 00319 NRANK = 0 00320 FATAL = .TRUE. 00321 ELSE IF( NN.GT.MAXIN ) THEN 00322 WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN 00323 NRANK = 0 00324 FATAL = .TRUE. 00325 END IF 00326 READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK ) 00327 DO I = 1, NRANK 00328 IF( RANKVAL( I ).LT.0 ) THEN 00329 WRITE( NOUT, FMT = 9996 )' RANK ', RANKVAL( I ), 0 00330 FATAL = .TRUE. 00331 ELSE IF( RANKVAL( I ).GT.100 ) THEN 00332 WRITE( NOUT, FMT = 9995 )' RANK ', RANKVAL( I ), 100 00333 FATAL = .TRUE. 00334 END IF 00335 END DO 00336 IF( NRANK.GT.0 ) 00337 $ WRITE( NOUT, FMT = 9993 )'RANK % OF N', 00338 $ ( RANKVAL( I ), I = 1, NRANK ) 00339 * 00340 * Read the threshold value for the test ratios. 00341 * 00342 READ( NIN, FMT = * )THRESH 00343 WRITE( NOUT, FMT = 9992 )THRESH 00344 * 00345 * Read the flag that indicates whether to test the LAPACK routines. 00346 * 00347 READ( NIN, FMT = * )TSTCHK 00348 * 00349 * Read the flag that indicates whether to test the driver routines. 00350 * 00351 READ( NIN, FMT = * )TSTDRV 00352 * 00353 * Read the flag that indicates whether to test the error exits. 00354 * 00355 READ( NIN, FMT = * )TSTERR 00356 * 00357 IF( FATAL ) THEN 00358 WRITE( NOUT, FMT = 9999 ) 00359 STOP 00360 END IF 00361 * 00362 * Calculate and print the machine dependent constants. 00363 * 00364 EPS = SLAMCH( 'Underflow threshold' ) 00365 WRITE( NOUT, FMT = 9991 )'underflow', EPS 00366 EPS = SLAMCH( 'Overflow threshold' ) 00367 WRITE( NOUT, FMT = 9991 )'overflow ', EPS 00368 EPS = SLAMCH( 'Epsilon' ) 00369 WRITE( NOUT, FMT = 9991 )'precision', EPS 00370 WRITE( NOUT, FMT = * ) 00371 NRHS = NSVAL( 1 ) 00372 * 00373 80 CONTINUE 00374 * 00375 * Read a test path and the number of matrix types to use. 00376 * 00377 READ( NIN, FMT = '(A72)', END = 140 )ALINE 00378 PATH = ALINE( 1: 3 ) 00379 NMATS = MATMAX 00380 I = 3 00381 90 CONTINUE 00382 I = I + 1 00383 IF( I.GT.72 ) 00384 $ GO TO 130 00385 IF( ALINE( I: I ).EQ.' ' ) 00386 $ GO TO 90 00387 NMATS = 0 00388 100 CONTINUE 00389 C1 = ALINE( I: I ) 00390 DO 110 K = 1, 10 00391 IF( C1.EQ.INTSTR( K: K ) ) THEN 00392 IC = K - 1 00393 GO TO 120 00394 END IF 00395 110 CONTINUE 00396 GO TO 130 00397 120 CONTINUE 00398 NMATS = NMATS*10 + IC 00399 I = I + 1 00400 IF( I.GT.72 ) 00401 $ GO TO 130 00402 GO TO 100 00403 130 CONTINUE 00404 C1 = PATH( 1: 1 ) 00405 C2 = PATH( 2: 3 ) 00406 * 00407 * Check first character for correct precision. 00408 * 00409 IF( .NOT.LSAME( C1, 'Complex precision' ) ) THEN 00410 WRITE( NOUT, FMT = 9990 )PATH 00411 * 00412 ELSE IF( NMATS.LE.0 ) THEN 00413 * 00414 * Check for a positive number of tests requested. 00415 * 00416 WRITE( NOUT, FMT = 9989 )PATH 00417 * 00418 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN 00419 * 00420 * GE: general matrices 00421 * 00422 NTYPES = 11 00423 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00424 * 00425 IF( TSTCHK ) THEN 00426 CALL CCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS, 00427 $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ), 00428 $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), 00429 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 00430 ELSE 00431 WRITE( NOUT, FMT = 9989 )PATH 00432 END IF 00433 * 00434 IF( TSTDRV ) THEN 00435 CALL CDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00436 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00437 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 00438 $ RWORK, IWORK, NOUT ) 00439 ELSE 00440 WRITE( NOUT, FMT = 9988 )PATH 00441 END IF 00442 * 00443 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN 00444 * 00445 * GB: general banded matrices 00446 * 00447 LA = ( 2*KDMAX+1 )*NMAX 00448 LAFAC = ( 3*KDMAX+1 )*NMAX 00449 NTYPES = 8 00450 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00451 * 00452 IF( TSTCHK ) THEN 00453 CALL CCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS, 00454 $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA, 00455 $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ), 00456 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 00457 ELSE 00458 WRITE( NOUT, FMT = 9989 )PATH 00459 END IF 00460 * 00461 IF( TSTDRV ) THEN 00462 CALL CDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 00463 $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ), 00464 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, 00465 $ WORK, RWORK, IWORK, NOUT ) 00466 ELSE 00467 WRITE( NOUT, FMT = 9988 )PATH 00468 END IF 00469 * 00470 ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN 00471 * 00472 * GT: general tridiagonal matrices 00473 * 00474 NTYPES = 12 00475 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00476 * 00477 IF( TSTCHK ) THEN 00478 CALL CCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00479 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 00480 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 00481 ELSE 00482 WRITE( NOUT, FMT = 9989 )PATH 00483 END IF 00484 * 00485 IF( TSTDRV ) THEN 00486 CALL CDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 00487 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 00488 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 00489 ELSE 00490 WRITE( NOUT, FMT = 9988 )PATH 00491 END IF 00492 * 00493 ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN 00494 * 00495 * PO: positive definite matrices 00496 * 00497 NTYPES = 9 00498 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00499 * 00500 IF( TSTCHK ) THEN 00501 CALL CCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 00502 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 00503 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 00504 $ WORK, RWORK, NOUT ) 00505 ELSE 00506 WRITE( NOUT, FMT = 9989 )PATH 00507 END IF 00508 * 00509 IF( TSTDRV ) THEN 00510 CALL CDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00511 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00512 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 00513 $ RWORK, NOUT ) 00514 ELSE 00515 WRITE( NOUT, FMT = 9988 )PATH 00516 END IF 00517 * 00518 ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN 00519 * 00520 * PS: positive semi-definite matrices 00521 * 00522 NTYPES = 9 00523 * 00524 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00525 * 00526 IF( TSTCHK ) THEN 00527 CALL CCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK, 00528 $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ), 00529 $ A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK, 00530 $ NOUT ) 00531 ELSE 00532 WRITE( NOUT, FMT = 9989 )PATH 00533 END IF 00534 * 00535 ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN 00536 * 00537 * PP: positive definite packed matrices 00538 * 00539 NTYPES = 9 00540 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00541 * 00542 IF( TSTCHK ) THEN 00543 CALL CCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00544 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 00545 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 00546 $ NOUT ) 00547 ELSE 00548 WRITE( NOUT, FMT = 9989 )PATH 00549 END IF 00550 * 00551 IF( TSTDRV ) THEN 00552 CALL CDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00553 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00554 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 00555 $ RWORK, NOUT ) 00556 ELSE 00557 WRITE( NOUT, FMT = 9988 )PATH 00558 END IF 00559 * 00560 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN 00561 * 00562 * PB: positive definite banded matrices 00563 * 00564 NTYPES = 8 00565 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00566 * 00567 IF( TSTCHK ) THEN 00568 CALL CCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 00569 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 00570 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 00571 $ WORK, RWORK, NOUT ) 00572 ELSE 00573 WRITE( NOUT, FMT = 9989 )PATH 00574 END IF 00575 * 00576 IF( TSTDRV ) THEN 00577 CALL CDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00578 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00579 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 00580 $ RWORK, NOUT ) 00581 ELSE 00582 WRITE( NOUT, FMT = 9988 )PATH 00583 END IF 00584 * 00585 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN 00586 * 00587 * PT: positive definite tridiagonal matrices 00588 * 00589 NTYPES = 12 00590 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00591 * 00592 IF( TSTCHK ) THEN 00593 CALL CCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00594 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 00595 $ B( 1, 3 ), WORK, RWORK, NOUT ) 00596 ELSE 00597 WRITE( NOUT, FMT = 9989 )PATH 00598 END IF 00599 * 00600 IF( TSTDRV ) THEN 00601 CALL CDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 00602 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 00603 $ B( 1, 3 ), WORK, RWORK, NOUT ) 00604 ELSE 00605 WRITE( NOUT, FMT = 9988 )PATH 00606 END IF 00607 * 00608 ELSE IF( LSAMEN( 2, C2, 'HE' ) ) THEN 00609 * 00610 * HE: Hermitian indefinite matrices 00611 * 00612 NTYPES = 10 00613 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00614 * 00615 IF( TSTCHK ) THEN 00616 CALL CCHKHE( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 00617 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 00618 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 00619 $ WORK, RWORK, IWORK, NOUT ) 00620 ELSE 00621 WRITE( NOUT, FMT = 9989 )PATH 00622 END IF 00623 * 00624 IF( TSTDRV ) THEN 00625 CALL CDRVHE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00626 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00627 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 00628 $ NOUT ) 00629 ELSE 00630 WRITE( NOUT, FMT = 9988 )PATH 00631 END IF 00632 * 00633 ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN 00634 * 00635 * HP: Hermitian indefinite packed matrices 00636 * 00637 NTYPES = 10 00638 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00639 * 00640 IF( TSTCHK ) THEN 00641 CALL CCHKHP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00642 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 00643 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 00644 $ IWORK, NOUT ) 00645 ELSE 00646 WRITE( NOUT, FMT = 9989 )PATH 00647 END IF 00648 * 00649 IF( TSTDRV ) THEN 00650 CALL CDRVHP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00651 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00652 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 00653 $ NOUT ) 00654 ELSE 00655 WRITE( NOUT, FMT = 9988 )PATH 00656 END IF 00657 * 00658 ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN 00659 * 00660 * SY: symmetric indefinite matrices 00661 * 00662 NTYPES = 11 00663 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00664 * 00665 IF( TSTCHK ) THEN 00666 CALL CCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 00667 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 00668 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 00669 $ WORK, RWORK, IWORK, NOUT ) 00670 ELSE 00671 WRITE( NOUT, FMT = 9989 )PATH 00672 END IF 00673 * 00674 IF( TSTDRV ) THEN 00675 CALL CDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00676 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00677 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 00678 $ NOUT ) 00679 ELSE 00680 WRITE( NOUT, FMT = 9988 )PATH 00681 END IF 00682 * 00683 ELSE IF( LSAMEN( 2, C2, 'SP' ) ) THEN 00684 * 00685 * SP: symmetric indefinite packed matrices 00686 * 00687 NTYPES = 11 00688 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00689 * 00690 IF( TSTCHK ) THEN 00691 CALL CCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00692 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 00693 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 00694 $ IWORK, NOUT ) 00695 ELSE 00696 WRITE( NOUT, FMT = 9989 )PATH 00697 END IF 00698 * 00699 IF( TSTDRV ) THEN 00700 CALL CDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 00701 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 00702 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 00703 $ NOUT ) 00704 ELSE 00705 WRITE( NOUT, FMT = 9988 )PATH 00706 END IF 00707 * 00708 ELSE IF( LSAMEN( 2, C2, 'TR' ) ) THEN 00709 * 00710 * TR: triangular matrices 00711 * 00712 NTYPES = 18 00713 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00714 * 00715 IF( TSTCHK ) THEN 00716 CALL CCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 00717 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 00718 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 00719 $ NOUT ) 00720 ELSE 00721 WRITE( NOUT, FMT = 9989 )PATH 00722 END IF 00723 * 00724 ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN 00725 * 00726 * TP: triangular packed matrices 00727 * 00728 NTYPES = 18 00729 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00730 * 00731 IF( TSTCHK ) THEN 00732 CALL CCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00733 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), 00734 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT ) 00735 ELSE 00736 WRITE( NOUT, FMT = 9989 )PATH 00737 END IF 00738 * 00739 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN 00740 * 00741 * TB: triangular banded matrices 00742 * 00743 NTYPES = 17 00744 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00745 * 00746 IF( TSTCHK ) THEN 00747 CALL CCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 00748 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), 00749 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT ) 00750 ELSE 00751 WRITE( NOUT, FMT = 9989 )PATH 00752 END IF 00753 * 00754 ELSE IF( LSAMEN( 2, C2, 'QR' ) ) THEN 00755 * 00756 * QR: QR factorization 00757 * 00758 NTYPES = 8 00759 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00760 * 00761 IF( TSTCHK ) THEN 00762 CALL CCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 00763 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 00764 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 00765 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 00766 $ WORK, RWORK, IWORK, NOUT ) 00767 ELSE 00768 WRITE( NOUT, FMT = 9989 )PATH 00769 END IF 00770 * 00771 ELSE IF( LSAMEN( 2, C2, 'LQ' ) ) THEN 00772 * 00773 * LQ: LQ factorization 00774 * 00775 NTYPES = 8 00776 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00777 * 00778 IF( TSTCHK ) THEN 00779 CALL CCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 00780 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 00781 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 00782 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 00783 $ WORK, RWORK, IWORK, NOUT ) 00784 ELSE 00785 WRITE( NOUT, FMT = 9989 )PATH 00786 END IF 00787 * 00788 ELSE IF( LSAMEN( 2, C2, 'QL' ) ) THEN 00789 * 00790 * QL: QL factorization 00791 * 00792 NTYPES = 8 00793 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00794 * 00795 IF( TSTCHK ) THEN 00796 CALL CCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 00797 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 00798 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 00799 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 00800 $ WORK, RWORK, NOUT ) 00801 ELSE 00802 WRITE( NOUT, FMT = 9989 )PATH 00803 END IF 00804 00805 * 00806 ELSE IF( LSAMEN( 2, C2, 'RQ' ) ) THEN 00807 * 00808 * RQ: RQ factorization 00809 * 00810 NTYPES = 8 00811 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00812 * 00813 IF( TSTCHK ) THEN 00814 CALL CCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 00815 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 00816 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 00817 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 00818 $ WORK, RWORK, IWORK, NOUT ) 00819 ELSE 00820 WRITE( NOUT, FMT = 9989 )PATH 00821 END IF 00822 * 00823 ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN 00824 * 00825 * EQ: Equilibration routines for general and positive definite 00826 * matrices (THREQ should be between 2 and 10) 00827 * 00828 IF( TSTCHK ) THEN 00829 CALL CCHKEQ( THREQ, NOUT ) 00830 ELSE 00831 WRITE( NOUT, FMT = 9989 )PATH 00832 END IF 00833 * 00834 ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN 00835 * 00836 * TZ: Trapezoidal matrix 00837 * 00838 NTYPES = 3 00839 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00840 * 00841 IF( TSTCHK ) THEN 00842 CALL CCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, 00843 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), 00844 $ B( 1, 1 ), WORK, RWORK, NOUT ) 00845 ELSE 00846 WRITE( NOUT, FMT = 9989 )PATH 00847 END IF 00848 * 00849 ELSE IF( LSAMEN( 2, C2, 'QP' ) ) THEN 00850 * 00851 * QP: QR factorization with pivoting 00852 * 00853 NTYPES = 6 00854 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00855 * 00856 IF( TSTCHK ) THEN 00857 CALL CCHKQP( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, 00858 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), 00859 $ B( 1, 1 ), WORK, RWORK, IWORK, NOUT ) 00860 CALL CCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 00861 $ THRESH, A( 1, 1 ), A( 1, 2 ), S( 1 ), 00862 $ B( 1, 1 ), WORK, RWORK, IWORK, NOUT ) 00863 ELSE 00864 WRITE( NOUT, FMT = 9989 )PATH 00865 END IF 00866 00867 * 00868 ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN 00869 * 00870 * LS: Least squares drivers 00871 * 00872 NTYPES = 6 00873 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00874 * 00875 IF( TSTDRV ) THEN 00876 CALL CDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB, 00877 $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ), 00878 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 00879 $ S( 1 ), S( NMAX+1 ), WORK, RWORK, IWORK, 00880 $ NOUT ) 00881 ELSE 00882 WRITE( NOUT, FMT = 9989 )PATH 00883 END IF 00884 * 00885 ELSE 00886 * 00887 WRITE( NOUT, FMT = 9990 )PATH 00888 END IF 00889 00890 * 00891 * Go back to get another input line. 00892 * 00893 GO TO 80 00894 * 00895 * Branch to this line when the last record is read. 00896 * 00897 140 CONTINUE 00898 CLOSE ( NIN ) 00899 S2 = SECOND( ) 00900 WRITE( NOUT, FMT = 9998 ) 00901 WRITE( NOUT, FMT = 9997 )S2 - S1 00902 * 00903 9999 FORMAT( / ' Execution not attempted due to input errors' ) 00904 9998 FORMAT( / ' End of tests' ) 00905 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / ) 00906 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=', 00907 $ I6 ) 00908 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=', 00909 $ I6 ) 00910 9994 FORMAT( ' Tests of the COMPLEX LAPACK routines ', 00911 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1, 00912 $ / / ' The following parameter values will be used:' ) 00913 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 ) 00914 9992 FORMAT( / ' Routines pass computational tests if test ratio is ', 00915 $ 'less than', F8.2, / ) 00916 9991 FORMAT( ' Relative machine ', A, ' is taken to be', E16.6 ) 00917 9990 FORMAT( / 1X, A3, ': Unrecognized path name' ) 00918 9989 FORMAT( / 1X, A3, ' routines were not tested' ) 00919 9988 FORMAT( / 1X, A3, ' driver routines were not tested' ) 00920 * 00921 * End of CCHKAA 00922 * 00923 END