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