1*> \brief \b ZCHKRFP 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* PROGRAM ZCHKRFP 12* 13* 14*> \par Purpose: 15* ============= 16*> 17*> \verbatim 18*> 19*> ZCHKRFP is the main test program for the COMPLEX*16 linear equation 20*> routines with RFP storage format 21*> 22*> \endverbatim 23* 24* Arguments: 25* ========== 26* 27*> \verbatim 28*> MAXIN INTEGER 29*> The number of different values that can be used for each of 30*> M, N, or NB 31*> 32*> MAXRHS INTEGER 33*> The maximum number of right hand sides 34*> 35*> NTYPES INTEGER 36*> 37*> NMAX INTEGER 38*> The maximum allowable value for N. 39*> 40*> NIN INTEGER 41*> The unit number for input 42*> 43*> NOUT INTEGER 44*> The unit number for output 45*> \endverbatim 46* 47* Authors: 48* ======== 49* 50*> \author Univ. of Tennessee 51*> \author Univ. of California Berkeley 52*> \author Univ. of Colorado Denver 53*> \author NAG Ltd. 54* 55*> \ingroup complex16_lin 56* 57* ===================================================================== 58 PROGRAM ZCHKRFP 59* 60* -- LAPACK test routine -- 61* -- LAPACK is a software package provided by Univ. of Tennessee, -- 62* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 63* 64* ===================================================================== 65* 66* .. Parameters .. 67 INTEGER MAXIN 68 PARAMETER ( MAXIN = 12 ) 69 INTEGER NMAX 70 PARAMETER ( NMAX = 50 ) 71 INTEGER MAXRHS 72 PARAMETER ( MAXRHS = 16 ) 73 INTEGER NTYPES 74 PARAMETER ( NTYPES = 9 ) 75 INTEGER NIN, NOUT 76 PARAMETER ( NIN = 5, NOUT = 6 ) 77* .. 78* .. Local Scalars .. 79 LOGICAL FATAL, TSTERR 80 INTEGER VERS_MAJOR, VERS_MINOR, VERS_PATCH 81 INTEGER I, NN, NNS, NNT 82 DOUBLE PRECISION EPS, S1, S2, THRESH 83 84* .. 85* .. Local Arrays .. 86 INTEGER NVAL( MAXIN ), NSVAL( MAXIN ), NTVAL( NTYPES ) 87 COMPLEX*16 WORKA( NMAX, NMAX ) 88 COMPLEX*16 WORKASAV( NMAX, NMAX ) 89 COMPLEX*16 WORKB( NMAX, MAXRHS ) 90 COMPLEX*16 WORKXACT( NMAX, MAXRHS ) 91 COMPLEX*16 WORKBSAV( NMAX, MAXRHS ) 92 COMPLEX*16 WORKX( NMAX, MAXRHS ) 93 COMPLEX*16 WORKAFAC( NMAX, NMAX ) 94 COMPLEX*16 WORKAINV( NMAX, NMAX ) 95 COMPLEX*16 WORKARF( (NMAX*(NMAX+1))/2 ) 96 COMPLEX*16 WORKAP( (NMAX*(NMAX+1))/2 ) 97 COMPLEX*16 WORKARFINV( (NMAX*(NMAX+1))/2 ) 98 COMPLEX*16 Z_WORK_ZLATMS( 3 * NMAX ) 99 COMPLEX*16 Z_WORK_ZPOT02( NMAX, MAXRHS ) 100 COMPLEX*16 Z_WORK_ZPOT03( NMAX, NMAX ) 101 DOUBLE PRECISION D_WORK_ZLATMS( NMAX ) 102 DOUBLE PRECISION D_WORK_ZLANHE( NMAX ) 103 DOUBLE PRECISION D_WORK_ZPOT01( NMAX ) 104 DOUBLE PRECISION D_WORK_ZPOT02( NMAX ) 105 DOUBLE PRECISION D_WORK_ZPOT03( NMAX ) 106* .. 107* .. External Functions .. 108 DOUBLE PRECISION DLAMCH, DSECND 109 EXTERNAL DLAMCH, DSECND 110* .. 111* .. External Subroutines .. 112 EXTERNAL ILAVER, ZDRVRFP, ZDRVRF1, ZDRVRF2, ZDRVRF3, 113 + ZDRVRF4 114* .. 115* .. Executable Statements .. 116* 117 S1 = DSECND( ) 118 FATAL = .FALSE. 119* 120* Read a dummy line. 121* 122 READ( NIN, FMT = * ) 123* 124* Report LAPACK version tag (e.g. LAPACK-3.2.0) 125* 126 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH ) 127 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH 128* 129* Read the values of N 130* 131 READ( NIN, FMT = * )NN 132 IF( NN.LT.1 ) THEN 133 WRITE( NOUT, FMT = 9996 )' NN ', NN, 1 134 NN = 0 135 FATAL = .TRUE. 136 ELSE IF( NN.GT.MAXIN ) THEN 137 WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN 138 NN = 0 139 FATAL = .TRUE. 140 END IF 141 READ( NIN, FMT = * )( NVAL( I ), I = 1, NN ) 142 DO 10 I = 1, NN 143 IF( NVAL( I ).LT.0 ) THEN 144 WRITE( NOUT, FMT = 9996 )' M ', NVAL( I ), 0 145 FATAL = .TRUE. 146 ELSE IF( NVAL( I ).GT.NMAX ) THEN 147 WRITE( NOUT, FMT = 9995 )' M ', NVAL( I ), NMAX 148 FATAL = .TRUE. 149 END IF 150 10 CONTINUE 151 IF( NN.GT.0 ) 152 $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN ) 153* 154* Read the values of NRHS 155* 156 READ( NIN, FMT = * )NNS 157 IF( NNS.LT.1 ) THEN 158 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1 159 NNS = 0 160 FATAL = .TRUE. 161 ELSE IF( NNS.GT.MAXIN ) THEN 162 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN 163 NNS = 0 164 FATAL = .TRUE. 165 END IF 166 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS ) 167 DO 30 I = 1, NNS 168 IF( NSVAL( I ).LT.0 ) THEN 169 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0 170 FATAL = .TRUE. 171 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN 172 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS 173 FATAL = .TRUE. 174 END IF 175 30 CONTINUE 176 IF( NNS.GT.0 ) 177 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS ) 178* 179* Read the matrix types 180* 181 READ( NIN, FMT = * )NNT 182 IF( NNT.LT.1 ) THEN 183 WRITE( NOUT, FMT = 9996 )' NMA', NNT, 1 184 NNT = 0 185 FATAL = .TRUE. 186 ELSE IF( NNT.GT.NTYPES ) THEN 187 WRITE( NOUT, FMT = 9995 )' NMA', NNT, NTYPES 188 NNT = 0 189 FATAL = .TRUE. 190 END IF 191 READ( NIN, FMT = * )( NTVAL( I ), I = 1, NNT ) 192 DO 320 I = 1, NNT 193 IF( NTVAL( I ).LT.0 ) THEN 194 WRITE( NOUT, FMT = 9996 )'TYPE', NTVAL( I ), 0 195 FATAL = .TRUE. 196 ELSE IF( NTVAL( I ).GT.NTYPES ) THEN 197 WRITE( NOUT, FMT = 9995 )'TYPE', NTVAL( I ), NTYPES 198 FATAL = .TRUE. 199 END IF 200 320 CONTINUE 201 IF( NNT.GT.0 ) 202 $ WRITE( NOUT, FMT = 9993 )'TYPE', ( NTVAL( I ), I = 1, NNT ) 203* 204* Read the threshold value for the test ratios. 205* 206 READ( NIN, FMT = * )THRESH 207 WRITE( NOUT, FMT = 9992 )THRESH 208* 209* Read the flag that indicates whether to test the error exits. 210* 211 READ( NIN, FMT = * )TSTERR 212* 213 IF( FATAL ) THEN 214 WRITE( NOUT, FMT = 9999 ) 215 STOP 216 END IF 217* 218* Calculate and print the machine dependent constants. 219* 220 EPS = DLAMCH( 'Underflow threshold' ) 221 WRITE( NOUT, FMT = 9991 )'underflow', EPS 222 EPS = DLAMCH( 'Overflow threshold' ) 223 WRITE( NOUT, FMT = 9991 )'overflow ', EPS 224 EPS = DLAMCH( 'Epsilon' ) 225 WRITE( NOUT, FMT = 9991 )'precision', EPS 226 WRITE( NOUT, FMT = * ) 227* 228* Test the error exit of: 229* 230 IF( TSTERR ) 231 $ CALL ZERRRFP( NOUT ) 232* 233* Test the routines: zpftrf, zpftri, zpftrs (as in ZDRVPO). 234* This also tests the routines: ztfsm, ztftri, ztfttr, ztrttf. 235* 236 CALL ZDRVRFP( NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH, 237 $ WORKA, WORKASAV, WORKAFAC, WORKAINV, WORKB, 238 $ WORKBSAV, WORKXACT, WORKX, WORKARF, WORKARFINV, 239 $ Z_WORK_ZLATMS, Z_WORK_ZPOT02, 240 $ Z_WORK_ZPOT03, D_WORK_ZLATMS, D_WORK_ZLANHE, 241 $ D_WORK_ZPOT01, D_WORK_ZPOT02, D_WORK_ZPOT03 ) 242* 243* Test the routine: zlanhf 244* 245 CALL ZDRVRF1( NOUT, NN, NVAL, THRESH, WORKA, NMAX, WORKARF, 246 + D_WORK_ZLANHE ) 247* 248* Test the conversion routines: 249* zhfttp, ztpthf, ztfttr, ztrttf, ztrttp and ztpttr. 250* 251 CALL ZDRVRF2( NOUT, NN, NVAL, WORKA, NMAX, WORKARF, 252 + WORKAP, WORKASAV ) 253* 254* Test the routine: ztfsm 255* 256 CALL ZDRVRF3( NOUT, NN, NVAL, THRESH, WORKA, NMAX, WORKARF, 257 + WORKAINV, WORKAFAC, D_WORK_ZLANHE, 258 + Z_WORK_ZPOT03, Z_WORK_ZPOT02 ) 259 260* 261* Test the routine: zhfrk 262* 263 CALL ZDRVRF4( NOUT, NN, NVAL, THRESH, WORKA, WORKAFAC, NMAX, 264 + WORKARF, WORKAINV, NMAX,D_WORK_ZLANHE) 265* 266 CLOSE ( NIN ) 267 S2 = DSECND( ) 268 WRITE( NOUT, FMT = 9998 ) 269 WRITE( NOUT, FMT = 9997 )S2 - S1 270* 271 9999 FORMAT( / ' Execution not attempted due to input errors' ) 272 9998 FORMAT( / ' End of tests' ) 273 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / ) 274 9996 FORMAT( ' !! Invalid input value: ', A4, '=', I6, '; must be >=', 275 $ I6 ) 276 9995 FORMAT( ' !! Invalid input value: ', A4, '=', I6, '; must be <=', 277 $ I6 ) 278 9994 FORMAT( / ' Tests of the COMPLEX*16 LAPACK RFP routines ', 279 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1, 280 $ / / ' The following parameter values will be used:' ) 281 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 ) 282 9992 FORMAT( / ' Routines pass computational tests if test ratio is ', 283 $ 'less than', F8.2, / ) 284 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 ) 285* 286* End of ZCHKRFP 287* 288 END 289