00001 PROGRAM CCHKRFP
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 INTEGER MAXIN
00040 PARAMETER ( MAXIN = 12 )
00041 INTEGER NMAX
00042 PARAMETER ( NMAX = 50 )
00043 INTEGER MAXRHS
00044 PARAMETER ( MAXRHS = 16 )
00045 INTEGER NTYPES
00046 PARAMETER ( NTYPES = 9 )
00047 INTEGER NIN, NOUT
00048 PARAMETER ( NIN = 5, NOUT = 6 )
00049
00050
00051 LOGICAL FATAL, TSTERR
00052 INTEGER VERS_MAJOR, VERS_MINOR, VERS_PATCH
00053 INTEGER I, NN, NNS, NNT
00054 REAL EPS, S1, S2, THRESH
00055
00056
00057
00058 INTEGER NVAL( MAXIN ), NSVAL( MAXIN ), NTVAL( NTYPES )
00059 COMPLEX WORKA( NMAX, NMAX )
00060 COMPLEX WORKASAV( NMAX, NMAX )
00061 COMPLEX WORKB( NMAX, MAXRHS )
00062 COMPLEX WORKXACT( NMAX, MAXRHS )
00063 COMPLEX WORKBSAV( NMAX, MAXRHS )
00064 COMPLEX WORKX( NMAX, MAXRHS )
00065 COMPLEX WORKAFAC( NMAX, NMAX )
00066 COMPLEX WORKAINV( NMAX, NMAX )
00067 COMPLEX WORKARF( (NMAX*(NMAX+1))/2 )
00068 COMPLEX WORKAP( (NMAX*(NMAX+1))/2 )
00069 COMPLEX WORKARFINV( (NMAX*(NMAX+1))/2 )
00070 COMPLEX C_WORK_CLATMS( 3 * NMAX )
00071 COMPLEX C_WORK_CPOT02( NMAX, MAXRHS )
00072 COMPLEX C_WORK_CPOT03( NMAX, NMAX )
00073 REAL S_WORK_CLATMS( NMAX )
00074 REAL S_WORK_CLANHE( NMAX )
00075 REAL S_WORK_CPOT01( NMAX )
00076 REAL S_WORK_CPOT02( NMAX )
00077 REAL S_WORK_CPOT03( NMAX )
00078
00079
00080 REAL SLAMCH, SECOND
00081 EXTERNAL SLAMCH, SECOND
00082
00083
00084 EXTERNAL ILAVER, CDRVRFP, CDRVRF1, CDRVRF2, CDRVRF3,
00085 + CDRVRF4
00086
00087
00088
00089 S1 = SECOND( )
00090 FATAL = .FALSE.
00091
00092
00093
00094 READ( NIN, FMT = * )
00095
00096
00097
00098 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
00099 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
00100
00101
00102
00103 READ( NIN, FMT = * )NN
00104 IF( NN.LT.1 ) THEN
00105 WRITE( NOUT, FMT = 9996 )' NN ', NN, 1
00106 NN = 0
00107 FATAL = .TRUE.
00108 ELSE IF( NN.GT.MAXIN ) THEN
00109 WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN
00110 NN = 0
00111 FATAL = .TRUE.
00112 END IF
00113 READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
00114 DO 10 I = 1, NN
00115 IF( NVAL( I ).LT.0 ) THEN
00116 WRITE( NOUT, FMT = 9996 )' M ', NVAL( I ), 0
00117 FATAL = .TRUE.
00118 ELSE IF( NVAL( I ).GT.NMAX ) THEN
00119 WRITE( NOUT, FMT = 9995 )' M ', NVAL( I ), NMAX
00120 FATAL = .TRUE.
00121 END IF
00122 10 CONTINUE
00123 IF( NN.GT.0 )
00124 $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN )
00125
00126
00127
00128 READ( NIN, FMT = * )NNS
00129 IF( NNS.LT.1 ) THEN
00130 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
00131 NNS = 0
00132 FATAL = .TRUE.
00133 ELSE IF( NNS.GT.MAXIN ) THEN
00134 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
00135 NNS = 0
00136 FATAL = .TRUE.
00137 END IF
00138 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
00139 DO 30 I = 1, NNS
00140 IF( NSVAL( I ).LT.0 ) THEN
00141 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
00142 FATAL = .TRUE.
00143 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
00144 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
00145 FATAL = .TRUE.
00146 END IF
00147 30 CONTINUE
00148 IF( NNS.GT.0 )
00149 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
00150
00151
00152
00153 READ( NIN, FMT = * )NNT
00154 IF( NNT.LT.1 ) THEN
00155 WRITE( NOUT, FMT = 9996 )' NMA', NNT, 1
00156 NNT = 0
00157 FATAL = .TRUE.
00158 ELSE IF( NNT.GT.NTYPES ) THEN
00159 WRITE( NOUT, FMT = 9995 )' NMA', NNT, NTYPES
00160 NNT = 0
00161 FATAL = .TRUE.
00162 END IF
00163 READ( NIN, FMT = * )( NTVAL( I ), I = 1, NNT )
00164 DO 320 I = 1, NNT
00165 IF( NTVAL( I ).LT.0 ) THEN
00166 WRITE( NOUT, FMT = 9996 )'TYPE', NTVAL( I ), 0
00167 FATAL = .TRUE.
00168 ELSE IF( NTVAL( I ).GT.NTYPES ) THEN
00169 WRITE( NOUT, FMT = 9995 )'TYPE', NTVAL( I ), NTYPES
00170 FATAL = .TRUE.
00171 END IF
00172 320 CONTINUE
00173 IF( NNT.GT.0 )
00174 $ WRITE( NOUT, FMT = 9993 )'TYPE', ( NTVAL( I ), I = 1, NNT )
00175
00176
00177
00178 READ( NIN, FMT = * )THRESH
00179 WRITE( NOUT, FMT = 9992 )THRESH
00180
00181
00182
00183 READ( NIN, FMT = * )TSTERR
00184
00185 IF( FATAL ) THEN
00186 WRITE( NOUT, FMT = 9999 )
00187 STOP
00188 END IF
00189
00190 IF( FATAL ) THEN
00191 WRITE( NOUT, FMT = 9999 )
00192 STOP
00193 END IF
00194
00195
00196
00197 EPS = SLAMCH( 'Underflow threshold' )
00198 WRITE( NOUT, FMT = 9991 )'underflow', EPS
00199 EPS = SLAMCH( 'Overflow threshold' )
00200 WRITE( NOUT, FMT = 9991 )'overflow ', EPS
00201 EPS = SLAMCH( 'Epsilon' )
00202 WRITE( NOUT, FMT = 9991 )'precision', EPS
00203 WRITE( NOUT, FMT = * )
00204
00205
00206
00207 IF( TSTERR )
00208 $ CALL CERRRFP( NOUT )
00209
00210
00211
00212
00213 CALL CDRVRFP( NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH,
00214 $ WORKA, WORKASAV, WORKAFAC, WORKAINV, WORKB,
00215 $ WORKBSAV, WORKXACT, WORKX, WORKARF, WORKARFINV,
00216 $ C_WORK_CLATMS, C_WORK_CPOT02,
00217 $ C_WORK_CPOT03, S_WORK_CLATMS, S_WORK_CLANHE,
00218 $ S_WORK_CPOT01, S_WORK_CPOT02, S_WORK_CPOT03 )
00219
00220
00221
00222 CALL CDRVRF1( NOUT, NN, NVAL, THRESH, WORKA, NMAX, WORKARF,
00223 + S_WORK_CLANHE )
00224
00225
00226
00227
00228 CALL CDRVRF2( NOUT, NN, NVAL, WORKA, NMAX, WORKARF,
00229 + WORKAP, WORKASAV )
00230
00231
00232
00233 CALL CDRVRF3( NOUT, NN, NVAL, THRESH, WORKA, NMAX, WORKARF,
00234 + WORKAINV, WORKAFAC, S_WORK_CLANHE,
00235 + C_WORK_CPOT03, C_WORK_CPOT02 )
00236
00237
00238
00239
00240 CALL CDRVRF4( NOUT, NN, NVAL, THRESH, WORKA, WORKAFAC, NMAX,
00241 + WORKARF, WORKAINV, NMAX, S_WORK_CLANHE)
00242
00243 CLOSE ( NIN )
00244 S2 = SECOND( )
00245 WRITE( NOUT, FMT = 9998 )
00246 WRITE( NOUT, FMT = 9997 )S2 - S1
00247
00248 9999 FORMAT( / ' Execution not attempted due to input errors' )
00249 9998 FORMAT( / ' End of tests' )
00250 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
00251 9996 FORMAT( ' !! Invalid input value: ', A4, '=', I6, '; must be >=',
00252 $ I6 )
00253 9995 FORMAT( ' !! Invalid input value: ', A4, '=', I6, '; must be <=',
00254 $ I6 )
00255 9994 FORMAT( / ' Tests of the COMPLEX LAPACK RFP routines ',
00256 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
00257 $ / / ' The following parameter values will be used:' )
00258 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 )
00259 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
00260 $ 'less than', F8.2, / )
00261 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 )
00262
00263
00264
00265 END