LAPACK 3.3.0
|
00001 SUBROUTINE SERRHS( PATH, NUNIT ) 00002 * 00003 * -- LAPACK test routine (version 3.1) -- 00004 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 00005 * November 2006 00006 * 00007 * .. Scalar Arguments .. 00008 CHARACTER*3 PATH 00009 INTEGER NUNIT 00010 * .. 00011 * 00012 * Purpose 00013 * ======= 00014 * 00015 * SERRHS tests the error exits for SGEBAK, SGEBAL, SGEHRD, SORGHR, 00016 * SORMHR, SHSEQR, SHSEIN, and STREVC. 00017 * 00018 * Arguments 00019 * ========= 00020 * 00021 * PATH (input) CHARACTER*3 00022 * The LAPACK path name for the routines to be tested. 00023 * 00024 * NUNIT (input) INTEGER 00025 * The unit number for output. 00026 * 00027 * ===================================================================== 00028 * 00029 * .. Parameters .. 00030 INTEGER NMAX, LW 00031 PARAMETER ( NMAX = 3, LW = ( NMAX+2 )*( NMAX+2 )+NMAX ) 00032 * .. 00033 * .. Local Scalars .. 00034 CHARACTER*2 C2 00035 INTEGER I, ILO, IHI, INFO, J, M, NT 00036 * .. 00037 * .. Local Arrays .. 00038 LOGICAL SEL( NMAX ) 00039 INTEGER IFAILL( NMAX ), IFAILR( NMAX ) 00040 REAL A( NMAX, NMAX ), C( NMAX, NMAX ), TAU( NMAX ), 00041 $ VL( NMAX, NMAX ), VR( NMAX, NMAX ), W( LW ), 00042 $ WI( NMAX ), WR( NMAX ), S( NMAX ) 00043 * .. 00044 * .. External Functions .. 00045 LOGICAL LSAMEN 00046 EXTERNAL LSAMEN 00047 * .. 00048 * .. External Subroutines .. 00049 EXTERNAL CHKXER, SGEBAK, SGEBAL, SGEHRD, SHSEIN, SHSEQR, 00050 $ SORGHR, SORMHR, STREVC 00051 * .. 00052 * .. Intrinsic Functions .. 00053 INTRINSIC REAL 00054 * .. 00055 * .. Scalars in Common .. 00056 LOGICAL LERR, OK 00057 CHARACTER*32 SRNAMT 00058 INTEGER INFOT, NOUT 00059 * .. 00060 * .. Common blocks .. 00061 COMMON / INFOC / INFOT, NOUT, OK, LERR 00062 COMMON / SRNAMC / SRNAMT 00063 * .. 00064 * .. Executable Statements .. 00065 * 00066 NOUT = NUNIT 00067 WRITE( NOUT, FMT = * ) 00068 C2 = PATH( 2: 3 ) 00069 * 00070 * Set the variables to innocuous values. 00071 * 00072 DO 20 J = 1, NMAX 00073 DO 10 I = 1, NMAX 00074 A( I, J ) = 1. / REAL( I+J ) 00075 10 CONTINUE 00076 WI( J ) = REAL( J ) 00077 SEL( J ) = .TRUE. 00078 20 CONTINUE 00079 OK = .TRUE. 00080 NT = 0 00081 * 00082 * Test error exits of the nonsymmetric eigenvalue routines. 00083 * 00084 IF( LSAMEN( 2, C2, 'HS' ) ) THEN 00085 * 00086 * SGEBAL 00087 * 00088 SRNAMT = 'SGEBAL' 00089 INFOT = 1 00090 CALL SGEBAL( '/', 0, A, 1, ILO, IHI, S, INFO ) 00091 CALL CHKXER( 'SGEBAL', INFOT, NOUT, LERR, OK ) 00092 INFOT = 2 00093 CALL SGEBAL( 'N', -1, A, 1, ILO, IHI, S, INFO ) 00094 CALL CHKXER( 'SGEBAL', INFOT, NOUT, LERR, OK ) 00095 INFOT = 4 00096 CALL SGEBAL( 'N', 2, A, 1, ILO, IHI, S, INFO ) 00097 CALL CHKXER( 'SGEBAL', INFOT, NOUT, LERR, OK ) 00098 NT = NT + 3 00099 * 00100 * SGEBAK 00101 * 00102 SRNAMT = 'SGEBAK' 00103 INFOT = 1 00104 CALL SGEBAK( '/', 'R', 0, 1, 0, S, 0, A, 1, INFO ) 00105 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00106 INFOT = 2 00107 CALL SGEBAK( 'N', '/', 0, 1, 0, S, 0, A, 1, INFO ) 00108 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00109 INFOT = 3 00110 CALL SGEBAK( 'N', 'R', -1, 1, 0, S, 0, A, 1, INFO ) 00111 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00112 INFOT = 4 00113 CALL SGEBAK( 'N', 'R', 0, 0, 0, S, 0, A, 1, INFO ) 00114 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00115 INFOT = 4 00116 CALL SGEBAK( 'N', 'R', 0, 2, 0, S, 0, A, 1, INFO ) 00117 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00118 INFOT = 5 00119 CALL SGEBAK( 'N', 'R', 2, 2, 1, S, 0, A, 2, INFO ) 00120 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00121 INFOT = 5 00122 CALL SGEBAK( 'N', 'R', 0, 1, 1, S, 0, A, 1, INFO ) 00123 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00124 INFOT = 7 00125 CALL SGEBAK( 'N', 'R', 0, 1, 0, S, -1, A, 1, INFO ) 00126 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00127 INFOT = 9 00128 CALL SGEBAK( 'N', 'R', 2, 1, 2, S, 0, A, 1, INFO ) 00129 CALL CHKXER( 'SGEBAK', INFOT, NOUT, LERR, OK ) 00130 NT = NT + 9 00131 * 00132 * SGEHRD 00133 * 00134 SRNAMT = 'SGEHRD' 00135 INFOT = 1 00136 CALL SGEHRD( -1, 1, 1, A, 1, TAU, W, 1, INFO ) 00137 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00138 INFOT = 2 00139 CALL SGEHRD( 0, 0, 0, A, 1, TAU, W, 1, INFO ) 00140 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00141 INFOT = 2 00142 CALL SGEHRD( 0, 2, 0, A, 1, TAU, W, 1, INFO ) 00143 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00144 INFOT = 3 00145 CALL SGEHRD( 1, 1, 0, A, 1, TAU, W, 1, INFO ) 00146 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00147 INFOT = 3 00148 CALL SGEHRD( 0, 1, 1, A, 1, TAU, W, 1, INFO ) 00149 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00150 INFOT = 5 00151 CALL SGEHRD( 2, 1, 1, A, 1, TAU, W, 2, INFO ) 00152 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00153 INFOT = 8 00154 CALL SGEHRD( 2, 1, 2, A, 2, TAU, W, 1, INFO ) 00155 CALL CHKXER( 'SGEHRD', INFOT, NOUT, LERR, OK ) 00156 NT = NT + 7 00157 * 00158 * SORGHR 00159 * 00160 SRNAMT = 'SORGHR' 00161 INFOT = 1 00162 CALL SORGHR( -1, 1, 1, A, 1, TAU, W, 1, INFO ) 00163 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00164 INFOT = 2 00165 CALL SORGHR( 0, 0, 0, A, 1, TAU, W, 1, INFO ) 00166 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00167 INFOT = 2 00168 CALL SORGHR( 0, 2, 0, A, 1, TAU, W, 1, INFO ) 00169 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00170 INFOT = 3 00171 CALL SORGHR( 1, 1, 0, A, 1, TAU, W, 1, INFO ) 00172 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00173 INFOT = 3 00174 CALL SORGHR( 0, 1, 1, A, 1, TAU, W, 1, INFO ) 00175 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00176 INFOT = 5 00177 CALL SORGHR( 2, 1, 1, A, 1, TAU, W, 1, INFO ) 00178 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00179 INFOT = 8 00180 CALL SORGHR( 3, 1, 3, A, 3, TAU, W, 1, INFO ) 00181 CALL CHKXER( 'SORGHR', INFOT, NOUT, LERR, OK ) 00182 NT = NT + 7 00183 * 00184 * SORMHR 00185 * 00186 SRNAMT = 'SORMHR' 00187 INFOT = 1 00188 CALL SORMHR( '/', 'N', 0, 0, 1, 0, A, 1, TAU, C, 1, W, 1, 00189 $ INFO ) 00190 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00191 INFOT = 2 00192 CALL SORMHR( 'L', '/', 0, 0, 1, 0, A, 1, TAU, C, 1, W, 1, 00193 $ INFO ) 00194 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00195 INFOT = 3 00196 CALL SORMHR( 'L', 'N', -1, 0, 1, 0, A, 1, TAU, C, 1, W, 1, 00197 $ INFO ) 00198 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00199 INFOT = 4 00200 CALL SORMHR( 'L', 'N', 0, -1, 1, 0, A, 1, TAU, C, 1, W, 1, 00201 $ INFO ) 00202 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00203 INFOT = 5 00204 CALL SORMHR( 'L', 'N', 0, 0, 0, 0, A, 1, TAU, C, 1, W, 1, 00205 $ INFO ) 00206 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00207 INFOT = 5 00208 CALL SORMHR( 'L', 'N', 0, 0, 2, 0, A, 1, TAU, C, 1, W, 1, 00209 $ INFO ) 00210 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00211 INFOT = 5 00212 CALL SORMHR( 'L', 'N', 1, 2, 2, 1, A, 1, TAU, C, 1, W, 2, 00213 $ INFO ) 00214 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00215 INFOT = 5 00216 CALL SORMHR( 'R', 'N', 2, 1, 2, 1, A, 1, TAU, C, 2, W, 2, 00217 $ INFO ) 00218 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00219 INFOT = 6 00220 CALL SORMHR( 'L', 'N', 1, 1, 1, 0, A, 1, TAU, C, 1, W, 1, 00221 $ INFO ) 00222 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00223 INFOT = 6 00224 CALL SORMHR( 'L', 'N', 0, 1, 1, 1, A, 1, TAU, C, 1, W, 1, 00225 $ INFO ) 00226 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00227 INFOT = 6 00228 CALL SORMHR( 'R', 'N', 1, 0, 1, 1, A, 1, TAU, C, 1, W, 1, 00229 $ INFO ) 00230 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00231 INFOT = 8 00232 CALL SORMHR( 'L', 'N', 2, 1, 1, 1, A, 1, TAU, C, 2, W, 1, 00233 $ INFO ) 00234 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00235 INFOT = 8 00236 CALL SORMHR( 'R', 'N', 1, 2, 1, 1, A, 1, TAU, C, 1, W, 1, 00237 $ INFO ) 00238 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00239 INFOT = 11 00240 CALL SORMHR( 'L', 'N', 2, 1, 1, 1, A, 2, TAU, C, 1, W, 1, 00241 $ INFO ) 00242 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00243 INFOT = 13 00244 CALL SORMHR( 'L', 'N', 1, 2, 1, 1, A, 1, TAU, C, 1, W, 1, 00245 $ INFO ) 00246 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00247 INFOT = 13 00248 CALL SORMHR( 'R', 'N', 2, 1, 1, 1, A, 1, TAU, C, 2, W, 1, 00249 $ INFO ) 00250 CALL CHKXER( 'SORMHR', INFOT, NOUT, LERR, OK ) 00251 NT = NT + 16 00252 * 00253 * SHSEQR 00254 * 00255 SRNAMT = 'SHSEQR' 00256 INFOT = 1 00257 CALL SHSEQR( '/', 'N', 0, 1, 0, A, 1, WR, WI, C, 1, W, 1, 00258 $ INFO ) 00259 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00260 INFOT = 2 00261 CALL SHSEQR( 'E', '/', 0, 1, 0, A, 1, WR, WI, C, 1, W, 1, 00262 $ INFO ) 00263 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00264 INFOT = 3 00265 CALL SHSEQR( 'E', 'N', -1, 1, 0, A, 1, WR, WI, C, 1, W, 1, 00266 $ INFO ) 00267 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00268 INFOT = 4 00269 CALL SHSEQR( 'E', 'N', 0, 0, 0, A, 1, WR, WI, C, 1, W, 1, 00270 $ INFO ) 00271 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00272 INFOT = 4 00273 CALL SHSEQR( 'E', 'N', 0, 2, 0, A, 1, WR, WI, C, 1, W, 1, 00274 $ INFO ) 00275 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00276 INFOT = 5 00277 CALL SHSEQR( 'E', 'N', 1, 1, 0, A, 1, WR, WI, C, 1, W, 1, 00278 $ INFO ) 00279 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00280 INFOT = 5 00281 CALL SHSEQR( 'E', 'N', 1, 1, 2, A, 1, WR, WI, C, 1, W, 1, 00282 $ INFO ) 00283 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00284 INFOT = 7 00285 CALL SHSEQR( 'E', 'N', 2, 1, 2, A, 1, WR, WI, C, 2, W, 1, 00286 $ INFO ) 00287 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00288 INFOT = 11 00289 CALL SHSEQR( 'E', 'V', 2, 1, 2, A, 2, WR, WI, C, 1, W, 1, 00290 $ INFO ) 00291 CALL CHKXER( 'SHSEQR', INFOT, NOUT, LERR, OK ) 00292 NT = NT + 9 00293 * 00294 * SHSEIN 00295 * 00296 SRNAMT = 'SHSEIN' 00297 INFOT = 1 00298 CALL SHSEIN( '/', 'N', 'N', SEL, 0, A, 1, WR, WI, VL, 1, VR, 1, 00299 $ 0, M, W, IFAILL, IFAILR, INFO ) 00300 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00301 INFOT = 2 00302 CALL SHSEIN( 'R', '/', 'N', SEL, 0, A, 1, WR, WI, VL, 1, VR, 1, 00303 $ 0, M, W, IFAILL, IFAILR, INFO ) 00304 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00305 INFOT = 3 00306 CALL SHSEIN( 'R', 'N', '/', SEL, 0, A, 1, WR, WI, VL, 1, VR, 1, 00307 $ 0, M, W, IFAILL, IFAILR, INFO ) 00308 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00309 INFOT = 5 00310 CALL SHSEIN( 'R', 'N', 'N', SEL, -1, A, 1, WR, WI, VL, 1, VR, 00311 $ 1, 0, M, W, IFAILL, IFAILR, INFO ) 00312 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00313 INFOT = 7 00314 CALL SHSEIN( 'R', 'N', 'N', SEL, 2, A, 1, WR, WI, VL, 1, VR, 2, 00315 $ 4, M, W, IFAILL, IFAILR, INFO ) 00316 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00317 INFOT = 11 00318 CALL SHSEIN( 'L', 'N', 'N', SEL, 2, A, 2, WR, WI, VL, 1, VR, 1, 00319 $ 4, M, W, IFAILL, IFAILR, INFO ) 00320 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00321 INFOT = 13 00322 CALL SHSEIN( 'R', 'N', 'N', SEL, 2, A, 2, WR, WI, VL, 1, VR, 1, 00323 $ 4, M, W, IFAILL, IFAILR, INFO ) 00324 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00325 INFOT = 14 00326 CALL SHSEIN( 'R', 'N', 'N', SEL, 2, A, 2, WR, WI, VL, 1, VR, 2, 00327 $ 1, M, W, IFAILL, IFAILR, INFO ) 00328 CALL CHKXER( 'SHSEIN', INFOT, NOUT, LERR, OK ) 00329 NT = NT + 8 00330 * 00331 * STREVC 00332 * 00333 SRNAMT = 'STREVC' 00334 INFOT = 1 00335 CALL STREVC( '/', 'A', SEL, 0, A, 1, VL, 1, VR, 1, 0, M, W, 00336 $ INFO ) 00337 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00338 INFOT = 2 00339 CALL STREVC( 'L', '/', SEL, 0, A, 1, VL, 1, VR, 1, 0, M, W, 00340 $ INFO ) 00341 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00342 INFOT = 4 00343 CALL STREVC( 'L', 'A', SEL, -1, A, 1, VL, 1, VR, 1, 0, M, W, 00344 $ INFO ) 00345 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00346 INFOT = 6 00347 CALL STREVC( 'L', 'A', SEL, 2, A, 1, VL, 2, VR, 1, 4, M, W, 00348 $ INFO ) 00349 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00350 INFOT = 8 00351 CALL STREVC( 'L', 'A', SEL, 2, A, 2, VL, 1, VR, 1, 4, M, W, 00352 $ INFO ) 00353 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00354 INFOT = 10 00355 CALL STREVC( 'R', 'A', SEL, 2, A, 2, VL, 1, VR, 1, 4, M, W, 00356 $ INFO ) 00357 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00358 INFOT = 11 00359 CALL STREVC( 'L', 'A', SEL, 2, A, 2, VL, 2, VR, 1, 1, M, W, 00360 $ INFO ) 00361 CALL CHKXER( 'STREVC', INFOT, NOUT, LERR, OK ) 00362 NT = NT + 7 00363 END IF 00364 * 00365 * Print a summary line. 00366 * 00367 IF( OK ) THEN 00368 WRITE( NOUT, FMT = 9999 )PATH, NT 00369 ELSE 00370 WRITE( NOUT, FMT = 9998 )PATH 00371 END IF 00372 * 00373 9999 FORMAT( 1X, A3, ' routines passed the tests of the error exits', 00374 $ ' (', I3, ' tests done)' ) 00375 9998 FORMAT( ' *** ', A3, ' routines failed the tests of the error ', 00376 $ 'exits ***' ) 00377 * 00378 RETURN 00379 * 00380 * End of SERRHS 00381 * 00382 END