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