00001 PROGRAM ZCHKAB
00002 IMPLICIT NONE
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 INTEGER NMAX
00057 PARAMETER ( NMAX = 132 )
00058 INTEGER MAXIN
00059 PARAMETER ( MAXIN = 12 )
00060 INTEGER MAXRHS
00061 PARAMETER ( MAXRHS = 16 )
00062 INTEGER MATMAX
00063 PARAMETER ( MATMAX = 30 )
00064 INTEGER NIN, NOUT
00065 PARAMETER ( NIN = 5, NOUT = 6 )
00066 INTEGER LDAMAX
00067 PARAMETER ( LDAMAX = NMAX )
00068
00069
00070 LOGICAL FATAL, TSTDRV, TSTERR
00071 CHARACTER C1
00072 CHARACTER*2 C2
00073 CHARACTER*3 PATH
00074 CHARACTER*10 INTSTR
00075 CHARACTER*72 ALINE
00076 INTEGER I, IC, K, LDA, NM, NMATS,
00077 $ NNS, NRHS, NTYPES,
00078 $ VERS_MAJOR, VERS_MINOR, VERS_PATCH
00079 DOUBLE PRECISION EPS, S1, S2, THRESH
00080 REAL SEPS
00081
00082
00083 LOGICAL DOTYPE( MATMAX )
00084 INTEGER IWORK( NMAX ), MVAL( MAXIN ), NSVAL( MAXIN )
00085 DOUBLE PRECISION RWORK(NMAX)
00086 COMPLEX*16 A( LDAMAX*NMAX, 2 ), B( NMAX*MAXRHS, 2 ),
00087 $ WORK( NMAX*MAXRHS*2 )
00088 COMPLEX SWORK(NMAX*(NMAX+MAXRHS))
00089
00090
00091 DOUBLE PRECISION DLAMCH, DSECND
00092 LOGICAL LSAME, LSAMEN
00093 REAL SLAMCH
00094 EXTERNAL DLAMCH, DSECND, LSAME, LSAMEN, SLAMCH
00095
00096
00097 EXTERNAL ALAREQ, ZDRVAB, ZDRVAC, ZERRAB, ZERRAC,
00098 $ ILAVER
00099
00100
00101 LOGICAL LERR, OK
00102 CHARACTER*32 SRNAMT
00103 INTEGER INFOT, NUNIT
00104
00105
00106 COMMON / INFOC / INFOT, NUNIT, OK, LERR
00107 COMMON / SRNAMC / SRNAMT
00108
00109
00110 DATA INTSTR / '0123456789' /
00111
00112
00113
00114 S1 = DSECND( )
00115 LDA = NMAX
00116 FATAL = .FALSE.
00117
00118
00119
00120 READ( NIN, FMT = * )
00121
00122
00123
00124 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
00125 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
00126
00127
00128
00129 READ( NIN, FMT = * )NM
00130 IF( NM.LT.1 ) THEN
00131 WRITE( NOUT, FMT = 9996 )' NM ', NM, 1
00132 NM = 0
00133 FATAL = .TRUE.
00134 ELSE IF( NM.GT.MAXIN ) THEN
00135 WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN
00136 NM = 0
00137 FATAL = .TRUE.
00138 END IF
00139 READ( NIN, FMT = * )( MVAL( I ), I = 1, NM )
00140 DO 10 I = 1, NM
00141 IF( MVAL( I ).LT.0 ) THEN
00142 WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0
00143 FATAL = .TRUE.
00144 ELSE IF( MVAL( I ).GT.NMAX ) THEN
00145 WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX
00146 FATAL = .TRUE.
00147 END IF
00148 10 CONTINUE
00149 IF( NM.GT.0 )
00150 $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM )
00151
00152
00153
00154 READ( NIN, FMT = * )NNS
00155 IF( NNS.LT.1 ) THEN
00156 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
00157 NNS = 0
00158 FATAL = .TRUE.
00159 ELSE IF( NNS.GT.MAXIN ) THEN
00160 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
00161 NNS = 0
00162 FATAL = .TRUE.
00163 END IF
00164 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
00165 DO 30 I = 1, NNS
00166 IF( NSVAL( I ).LT.0 ) THEN
00167 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
00168 FATAL = .TRUE.
00169 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
00170 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
00171 FATAL = .TRUE.
00172 END IF
00173 30 CONTINUE
00174 IF( NNS.GT.0 )
00175 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
00176
00177
00178
00179 READ( NIN, FMT = * )THRESH
00180 WRITE( NOUT, FMT = 9992 )THRESH
00181
00182
00183
00184 READ( NIN, FMT = * )TSTDRV
00185
00186
00187
00188 READ( NIN, FMT = * )TSTERR
00189
00190 IF( FATAL ) THEN
00191 WRITE( NOUT, FMT = 9999 )
00192 STOP
00193 END IF
00194
00195
00196
00197 SEPS = SLAMCH( 'Underflow threshold' )
00198 WRITE( NOUT, FMT = 9991 )'(single precision) underflow', SEPS
00199 SEPS = SLAMCH( 'Overflow threshold' )
00200 WRITE( NOUT, FMT = 9991 )'(single precision) overflow ', SEPS
00201 SEPS = SLAMCH( 'Epsilon' )
00202 WRITE( NOUT, FMT = 9991 )'(single precision) precision', SEPS
00203 WRITE( NOUT, FMT = * )
00204
00205 EPS = DLAMCH( 'Underflow threshold' )
00206 WRITE( NOUT, FMT = 9991 )'(double precision) underflow', EPS
00207 EPS = DLAMCH( 'Overflow threshold' )
00208 WRITE( NOUT, FMT = 9991 )'(double precision) overflow ', EPS
00209 EPS = DLAMCH( 'Epsilon' )
00210 WRITE( NOUT, FMT = 9991 )'(double precision) precision', EPS
00211 WRITE( NOUT, FMT = * )
00212
00213 80 CONTINUE
00214
00215
00216
00217 READ( NIN, FMT = '(A72)', END = 140 )ALINE
00218 PATH = ALINE( 1: 3 )
00219 NMATS = MATMAX
00220 I = 3
00221 90 CONTINUE
00222 I = I + 1
00223 IF( I.GT.72 ) THEN
00224 NMATS = MATMAX
00225 GO TO 130
00226 END IF
00227 IF( ALINE( I: I ).EQ.' ' )
00228 $ GO TO 90
00229 NMATS = 0
00230 100 CONTINUE
00231 C1 = ALINE( I: I )
00232 DO 110 K = 1, 10
00233 IF( C1.EQ.INTSTR( K: K ) ) THEN
00234 IC = K - 1
00235 GO TO 120
00236 END IF
00237 110 CONTINUE
00238 GO TO 130
00239 120 CONTINUE
00240 NMATS = NMATS*10 + IC
00241 I = I + 1
00242 IF( I.GT.72 )
00243 $ GO TO 130
00244 GO TO 100
00245 130 CONTINUE
00246 C1 = PATH( 1: 1 )
00247 C2 = PATH( 2: 3 )
00248 NRHS = NSVAL( 1 )
00249 NRHS = NSVAL( 1 )
00250
00251
00252
00253 IF( .NOT.LSAME( C1, 'Zomplex precision' ) ) THEN
00254 WRITE( NOUT, FMT = 9990 )PATH
00255
00256 ELSE IF( NMATS.LE.0 ) THEN
00257
00258
00259
00260 WRITE( NOUT, FMT = 9990 )'ZCGESV'
00261 GO TO 140
00262
00263 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
00264
00265
00266
00267 NTYPES = 11
00268 CALL ALAREQ( 'ZGE', NMATS, DOTYPE, NTYPES, NIN, NOUT )
00269
00270
00271
00272 IF( TSTERR )
00273 $ CALL ZERRAB( NOUT )
00274
00275 IF( TSTDRV ) THEN
00276 CALL ZDRVAB( DOTYPE, NM, MVAL, NNS,
00277 $ NSVAL, THRESH, LDA, A( 1, 1 ),
00278 $ A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
00279 $ WORK, RWORK, SWORK, IWORK, NOUT )
00280 ELSE
00281 WRITE( NOUT, FMT = 9989 )'ZCGESV'
00282 END IF
00283
00284 ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN
00285
00286
00287
00288 NTYPES = 9
00289 CALL ALAREQ( 'DPO', NMATS, DOTYPE, NTYPES, NIN, NOUT )
00290
00291 IF( TSTERR )
00292 $ CALL ZERRAC( NOUT )
00293
00294
00295 IF( TSTDRV ) THEN
00296 CALL ZDRVAC( DOTYPE, NM, MVAL, NNS, NSVAL,
00297 $ THRESH, LDA, A( 1, 1 ), A( 1, 2 ),
00298 $ B( 1, 1 ), B( 1, 2 ),
00299 $ WORK, RWORK, SWORK, NOUT )
00300 ELSE
00301 WRITE( NOUT, FMT = 9989 )'ZCPOSV'
00302 END IF
00303
00304 ELSE
00305
00306 END IF
00307
00308
00309
00310 GO TO 80
00311
00312
00313
00314 140 CONTINUE
00315 CLOSE ( NIN )
00316 S2 = DSECND( )
00317 WRITE( NOUT, FMT = 9998 )
00318 WRITE( NOUT, FMT = 9997 )S2 - S1
00319
00320 9999 FORMAT( / ' Execution not attempted due to input errors' )
00321 9998 FORMAT( / ' End of tests' )
00322 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
00323 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=',
00324 $ I6 )
00325 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=',
00326 $ I6 )
00327 9994 FORMAT( ' Tests of the COMPLEX*16 LAPACK ZCGESV/ZCPOSV routines ',
00328 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
00329 $ / / ' The following parameter values will be used:' )
00330 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 )
00331 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
00332 $ 'less than', F8.2, / )
00333 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 )
00334 9990 FORMAT( / 1X, A6, ' routines were not tested' )
00335 9989 FORMAT( / 1X, A6, ' driver routines were not tested' )
00336 9988 FORMAT( / 1X, A3, ': Unrecognized path name' )
00337
00338
00339
00340 END