![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b ZCHKAB 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 ZCHKAB 00012 * 00013 * 00014 *> \par Purpose: 00015 * ============= 00016 *> 00017 *> \verbatim 00018 *> 00019 *> ZCHKAB is the test program for the COMPLEX*16 LAPACK 00020 *> ZCGESV/ZCPOSV routine 00021 *> 00022 *> The program must be driven by a short data file. The first 5 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 9 lines: 00028 *> Data file for testing COMPLEX*16 LAPACK ZCGESV 00029 *> 7 Number of values of M 00030 *> 0 1 2 3 5 10 16 Values of M (row dimension) 00031 *> 1 Number of values of NRHS 00032 *> 2 Values of NRHS (number of right hand sides) 00033 *> 20.0 Threshold value of test ratio 00034 *> T Put T to test the LAPACK routine 00035 *> T Put T to test the error exits 00036 *> DGE 11 List types on next line if 0 < NTYPES < 11 00037 *> DPO 9 List types on next line if 0 < NTYPES < 9 00038 *> \endverbatim 00039 * 00040 * Arguments: 00041 * ========== 00042 * 00043 *> \verbatim 00044 *> NMAX INTEGER 00045 *> The maximum allowable value for N 00046 *> 00047 *> MAXIN INTEGER 00048 *> The number of different values that can be used for each of 00049 *> M, N, NRHS, NB, and NX 00050 *> 00051 *> MAXRHS INTEGER 00052 *> The maximum number of right hand sides 00053 *> 00054 *> NIN INTEGER 00055 *> The unit number for input 00056 *> 00057 *> NOUT INTEGER 00058 *> The unit number for output 00059 *> \endverbatim 00060 * 00061 * Authors: 00062 * ======== 00063 * 00064 *> \author Univ. of Tennessee 00065 *> \author Univ. of California Berkeley 00066 *> \author Univ. of Colorado Denver 00067 *> \author NAG Ltd. 00068 * 00069 *> \date April 2012 00070 * 00071 *> \ingroup complex16_lin 00072 * 00073 * ===================================================================== 00074 PROGRAM ZCHKAB 00075 * 00076 * -- LAPACK test routine (version 3.4.1) -- 00077 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00078 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00079 * April 2012 00080 * 00081 * ===================================================================== 00082 * 00083 * .. Parameters .. 00084 INTEGER NMAX 00085 PARAMETER ( NMAX = 132 ) 00086 INTEGER MAXIN 00087 PARAMETER ( MAXIN = 12 ) 00088 INTEGER MAXRHS 00089 PARAMETER ( MAXRHS = 16 ) 00090 INTEGER MATMAX 00091 PARAMETER ( MATMAX = 30 ) 00092 INTEGER NIN, NOUT 00093 PARAMETER ( NIN = 5, NOUT = 6 ) 00094 INTEGER LDAMAX 00095 PARAMETER ( LDAMAX = NMAX ) 00096 * .. 00097 * .. Local Scalars .. 00098 LOGICAL FATAL, TSTDRV, TSTERR 00099 CHARACTER C1 00100 CHARACTER*2 C2 00101 CHARACTER*3 PATH 00102 CHARACTER*10 INTSTR 00103 CHARACTER*72 ALINE 00104 INTEGER I, IC, K, LDA, NM, NMATS, 00105 $ NNS, NRHS, NTYPES, 00106 $ VERS_MAJOR, VERS_MINOR, VERS_PATCH 00107 DOUBLE PRECISION EPS, S1, S2, THRESH 00108 REAL SEPS 00109 * .. 00110 * .. Local Arrays .. 00111 LOGICAL DOTYPE( MATMAX ) 00112 INTEGER IWORK( NMAX ), MVAL( MAXIN ), NSVAL( MAXIN ) 00113 DOUBLE PRECISION RWORK(NMAX) 00114 COMPLEX*16 A( LDAMAX*NMAX, 2 ), B( NMAX*MAXRHS, 2 ), 00115 $ WORK( NMAX*MAXRHS*2 ) 00116 COMPLEX SWORK(NMAX*(NMAX+MAXRHS)) 00117 * .. 00118 * .. External Functions .. 00119 DOUBLE PRECISION DLAMCH, DSECND 00120 LOGICAL LSAME, LSAMEN 00121 REAL SLAMCH 00122 EXTERNAL DLAMCH, DSECND, LSAME, LSAMEN, SLAMCH 00123 * .. 00124 * .. External Subroutines .. 00125 EXTERNAL ALAREQ, ZDRVAB, ZDRVAC, ZERRAB, ZERRAC, 00126 $ ILAVER 00127 * .. 00128 * .. Scalars in Common .. 00129 LOGICAL LERR, OK 00130 CHARACTER*32 SRNAMT 00131 INTEGER INFOT, NUNIT 00132 * .. 00133 * .. Common blocks .. 00134 COMMON / INFOC / INFOT, NUNIT, OK, LERR 00135 COMMON / SRNAMC / SRNAMT 00136 * 00137 * .. Data statements .. 00138 DATA INTSTR / '0123456789' / 00139 * .. 00140 * .. Executable Statements .. 00141 * 00142 S1 = DSECND( ) 00143 LDA = NMAX 00144 FATAL = .FALSE. 00145 * 00146 * Read a dummy line. 00147 * 00148 READ( NIN, FMT = * ) 00149 * 00150 * Report values of parameters. 00151 * 00152 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH ) 00153 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH 00154 * 00155 * Read the values of M 00156 * 00157 READ( NIN, FMT = * )NM 00158 IF( NM.LT.1 ) THEN 00159 WRITE( NOUT, FMT = 9996 )' NM ', NM, 1 00160 NM = 0 00161 FATAL = .TRUE. 00162 ELSE IF( NM.GT.MAXIN ) THEN 00163 WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN 00164 NM = 0 00165 FATAL = .TRUE. 00166 END IF 00167 READ( NIN, FMT = * )( MVAL( I ), I = 1, NM ) 00168 DO 10 I = 1, NM 00169 IF( MVAL( I ).LT.0 ) THEN 00170 WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0 00171 FATAL = .TRUE. 00172 ELSE IF( MVAL( I ).GT.NMAX ) THEN 00173 WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX 00174 FATAL = .TRUE. 00175 END IF 00176 10 CONTINUE 00177 IF( NM.GT.0 ) 00178 $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM ) 00179 * 00180 * Read the values of NRHS 00181 * 00182 READ( NIN, FMT = * )NNS 00183 IF( NNS.LT.1 ) THEN 00184 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1 00185 NNS = 0 00186 FATAL = .TRUE. 00187 ELSE IF( NNS.GT.MAXIN ) THEN 00188 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN 00189 NNS = 0 00190 FATAL = .TRUE. 00191 END IF 00192 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS ) 00193 DO 30 I = 1, NNS 00194 IF( NSVAL( I ).LT.0 ) THEN 00195 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0 00196 FATAL = .TRUE. 00197 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN 00198 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS 00199 FATAL = .TRUE. 00200 END IF 00201 30 CONTINUE 00202 IF( NNS.GT.0 ) 00203 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS ) 00204 * 00205 * Read the threshold value for the test ratios. 00206 * 00207 READ( NIN, FMT = * )THRESH 00208 WRITE( NOUT, FMT = 9992 )THRESH 00209 * 00210 * Read the flag that indicates whether to test the driver routine. 00211 * 00212 READ( NIN, FMT = * )TSTDRV 00213 * 00214 * Read the flag that indicates whether to test the error exits. 00215 * 00216 READ( NIN, FMT = * )TSTERR 00217 * 00218 IF( FATAL ) THEN 00219 WRITE( NOUT, FMT = 9999 ) 00220 STOP 00221 END IF 00222 * 00223 * Calculate and print the machine dependent constants. 00224 * 00225 SEPS = SLAMCH( 'Underflow threshold' ) 00226 WRITE( NOUT, FMT = 9991 )'(single precision) underflow', SEPS 00227 SEPS = SLAMCH( 'Overflow threshold' ) 00228 WRITE( NOUT, FMT = 9991 )'(single precision) overflow ', SEPS 00229 SEPS = SLAMCH( 'Epsilon' ) 00230 WRITE( NOUT, FMT = 9991 )'(single precision) precision', SEPS 00231 WRITE( NOUT, FMT = * ) 00232 * 00233 EPS = DLAMCH( 'Underflow threshold' ) 00234 WRITE( NOUT, FMT = 9991 )'(double precision) underflow', EPS 00235 EPS = DLAMCH( 'Overflow threshold' ) 00236 WRITE( NOUT, FMT = 9991 )'(double precision) overflow ', EPS 00237 EPS = DLAMCH( 'Epsilon' ) 00238 WRITE( NOUT, FMT = 9991 )'(double precision) precision', EPS 00239 WRITE( NOUT, FMT = * ) 00240 * 00241 80 CONTINUE 00242 * 00243 * Read a test path and the number of matrix types to use. 00244 * 00245 READ( NIN, FMT = '(A72)', END = 140 )ALINE 00246 PATH = ALINE( 1: 3 ) 00247 NMATS = MATMAX 00248 I = 3 00249 90 CONTINUE 00250 I = I + 1 00251 IF( I.GT.72 ) THEN 00252 NMATS = MATMAX 00253 GO TO 130 00254 END IF 00255 IF( ALINE( I: I ).EQ.' ' ) 00256 $ GO TO 90 00257 NMATS = 0 00258 100 CONTINUE 00259 C1 = ALINE( I: I ) 00260 DO 110 K = 1, 10 00261 IF( C1.EQ.INTSTR( K: K ) ) THEN 00262 IC = K - 1 00263 GO TO 120 00264 END IF 00265 110 CONTINUE 00266 GO TO 130 00267 120 CONTINUE 00268 NMATS = NMATS*10 + IC 00269 I = I + 1 00270 IF( I.GT.72 ) 00271 $ GO TO 130 00272 GO TO 100 00273 130 CONTINUE 00274 C1 = PATH( 1: 1 ) 00275 C2 = PATH( 2: 3 ) 00276 NRHS = NSVAL( 1 ) 00277 NRHS = NSVAL( 1 ) 00278 * 00279 * Check first character for correct precision. 00280 * 00281 IF( .NOT.LSAME( C1, 'Zomplex precision' ) ) THEN 00282 WRITE( NOUT, FMT = 9990 )PATH 00283 * 00284 ELSE IF( NMATS.LE.0 ) THEN 00285 * 00286 * Check for a positive number of tests requested. 00287 * 00288 WRITE( NOUT, FMT = 9990 )'ZCGESV' 00289 GO TO 140 00290 * 00291 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN 00292 * 00293 * GE: general matrices 00294 * 00295 NTYPES = 11 00296 CALL ALAREQ( 'ZGE', NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00297 * 00298 * Test the error exits 00299 * 00300 IF( TSTERR ) 00301 $ CALL ZERRAB( NOUT ) 00302 * 00303 IF( TSTDRV ) THEN 00304 CALL ZDRVAB( DOTYPE, NM, MVAL, NNS, 00305 $ NSVAL, THRESH, LDA, A( 1, 1 ), 00306 $ A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 00307 $ WORK, RWORK, SWORK, IWORK, NOUT ) 00308 ELSE 00309 WRITE( NOUT, FMT = 9989 )'ZCGESV' 00310 END IF 00311 * 00312 ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN 00313 * 00314 * PO: positive definite matrices 00315 * 00316 NTYPES = 9 00317 CALL ALAREQ( 'DPO', NMATS, DOTYPE, NTYPES, NIN, NOUT ) 00318 * 00319 IF( TSTERR ) 00320 $ CALL ZERRAC( NOUT ) 00321 * 00322 * 00323 IF( TSTDRV ) THEN 00324 CALL ZDRVAC( DOTYPE, NM, MVAL, NNS, NSVAL, 00325 $ THRESH, LDA, A( 1, 1 ), A( 1, 2 ), 00326 $ B( 1, 1 ), B( 1, 2 ), 00327 $ WORK, RWORK, SWORK, NOUT ) 00328 ELSE 00329 WRITE( NOUT, FMT = 9989 )'ZCPOSV' 00330 END IF 00331 * 00332 ELSE 00333 * 00334 END IF 00335 * 00336 * Go back to get another input line. 00337 * 00338 GO TO 80 00339 * 00340 * Branch to this line when the last record is read. 00341 * 00342 140 CONTINUE 00343 CLOSE ( NIN ) 00344 S2 = DSECND( ) 00345 WRITE( NOUT, FMT = 9998 ) 00346 WRITE( NOUT, FMT = 9997 )S2 - S1 00347 * 00348 9999 FORMAT( / ' Execution not attempted due to input errors' ) 00349 9998 FORMAT( / ' End of tests' ) 00350 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / ) 00351 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=', 00352 $ I6 ) 00353 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=', 00354 $ I6 ) 00355 9994 FORMAT( ' Tests of the COMPLEX*16 LAPACK ZCGESV/ZCPOSV routines ', 00356 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1, 00357 $ / / ' The following parameter values will be used:' ) 00358 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 ) 00359 9992 FORMAT( / ' Routines pass computational tests if test ratio is ', 00360 $ 'less than', F8.2, / ) 00361 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 ) 00362 9990 FORMAT( / 1X, A6, ' routines were not tested' ) 00363 9989 FORMAT( / 1X, A6, ' driver routines were not tested' ) 00364 * 00365 * End of ZCHKAB 00366 * 00367 END