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