00001 SUBROUTINE CERRHE( 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
00031
00032
00033
00034 INTEGER NMAX
00035 PARAMETER ( NMAX = 4 )
00036
00037
00038 CHARACTER EQ
00039 CHARACTER*2 C2
00040 INTEGER I, INFO, J, N_ERR_BNDS, NPARAMS
00041 REAL ANRM, RCOND, BERR
00042
00043
00044 INTEGER IP( NMAX )
00045 REAL R( NMAX ), R1( NMAX ), R2( NMAX ),
00046 $ S( NMAX ), ERR_BNDS_N( NMAX, 3 ),
00047 $ ERR_BNDS_C( NMAX, 3 ), PARAMS( 1 )
00048 COMPLEX A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
00049 $ W( 2*NMAX ), X( NMAX )
00050
00051
00052 LOGICAL LSAMEN
00053 EXTERNAL LSAMEN
00054
00055
00056 EXTERNAL ALAESM, CHECON, CHERFS, CHETF2, CHETRF, CHETRI,
00057 $ CHETRS, CHKXER, CHPCON, CHPRFS, CHPTRF, CHPTRI,
00058 $ CHPTRS, CHERFSX
00059
00060
00061 LOGICAL LERR, OK
00062 CHARACTER*32 SRNAMT
00063 INTEGER INFOT, NOUT
00064
00065
00066 COMMON / INFOC / INFOT, NOUT, OK, LERR
00067 COMMON / SRNAMC / SRNAMT
00068
00069
00070 INTRINSIC CMPLX, REAL
00071
00072
00073
00074 NOUT = NUNIT
00075 WRITE( NOUT, FMT = * )
00076 C2 = PATH( 2: 3 )
00077
00078
00079
00080 DO 20 J = 1, NMAX
00081 DO 10 I = 1, NMAX
00082 A( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
00083 AF( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
00084 10 CONTINUE
00085 B( J ) = 0.
00086 R1( J ) = 0.
00087 R2( J ) = 0.
00088 W( J ) = 0.
00089 X( J ) = 0.
00090 S( J ) = 0.
00091 IP( J ) = J
00092 20 CONTINUE
00093 ANRM = 1.0
00094 OK = .TRUE.
00095
00096
00097
00098
00099 IF( LSAMEN( 2, C2, 'HE' ) ) THEN
00100
00101
00102
00103 SRNAMT = 'CHETRF'
00104 INFOT = 1
00105 CALL CHETRF( '/', 0, A, 1, IP, W, 1, INFO )
00106 CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
00107 INFOT = 2
00108 CALL CHETRF( 'U', -1, A, 1, IP, W, 1, INFO )
00109 CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
00110 INFOT = 4
00111 CALL CHETRF( 'U', 2, A, 1, IP, W, 4, INFO )
00112 CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
00113
00114
00115
00116 SRNAMT = 'CHETF2'
00117 INFOT = 1
00118 CALL CHETF2( '/', 0, A, 1, IP, INFO )
00119 CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
00120 INFOT = 2
00121 CALL CHETF2( 'U', -1, A, 1, IP, INFO )
00122 CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
00123 INFOT = 4
00124 CALL CHETF2( 'U', 2, A, 1, IP, INFO )
00125 CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
00126
00127
00128
00129 SRNAMT = 'CHETRI'
00130 INFOT = 1
00131 CALL CHETRI( '/', 0, A, 1, IP, W, INFO )
00132 CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
00133 INFOT = 2
00134 CALL CHETRI( 'U', -1, A, 1, IP, W, INFO )
00135 CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
00136 INFOT = 4
00137 CALL CHETRI( 'U', 2, A, 1, IP, W, INFO )
00138 CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
00139
00140
00141
00142 SRNAMT = 'CHETRS'
00143 INFOT = 1
00144 CALL CHETRS( '/', 0, 0, A, 1, IP, B, 1, INFO )
00145 CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
00146 INFOT = 2
00147 CALL CHETRS( 'U', -1, 0, A, 1, IP, B, 1, INFO )
00148 CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
00149 INFOT = 3
00150 CALL CHETRS( 'U', 0, -1, A, 1, IP, B, 1, INFO )
00151 CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
00152 INFOT = 5
00153 CALL CHETRS( 'U', 2, 1, A, 1, IP, B, 2, INFO )
00154 CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
00155 INFOT = 8
00156 CALL CHETRS( 'U', 2, 1, A, 2, IP, B, 1, INFO )
00157 CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
00158
00159
00160
00161 SRNAMT = 'CHERFS'
00162 INFOT = 1
00163 CALL CHERFS( '/', 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2, W,
00164 $ R, INFO )
00165 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00166 INFOT = 2
00167 CALL CHERFS( 'U', -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
00168 $ W, R, INFO )
00169 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00170 INFOT = 3
00171 CALL CHERFS( 'U', 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
00172 $ W, R, INFO )
00173 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00174 INFOT = 5
00175 CALL CHERFS( 'U', 2, 1, A, 1, AF, 2, IP, B, 2, X, 2, R1, R2, W,
00176 $ R, INFO )
00177 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00178 INFOT = 7
00179 CALL CHERFS( 'U', 2, 1, A, 2, AF, 1, IP, B, 2, X, 2, R1, R2, W,
00180 $ R, INFO )
00181 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00182 INFOT = 10
00183 CALL CHERFS( 'U', 2, 1, A, 2, AF, 2, IP, B, 1, X, 2, R1, R2, W,
00184 $ R, INFO )
00185 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00186 INFOT = 12
00187 CALL CHERFS( 'U', 2, 1, A, 2, AF, 2, IP, B, 2, X, 1, R1, R2, W,
00188 $ R, INFO )
00189 CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
00190
00191
00192
00193 SRNAMT = 'CHECON'
00194 INFOT = 1
00195 CALL CHECON( '/', 0, A, 1, IP, ANRM, RCOND, W, INFO )
00196 CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
00197 INFOT = 2
00198 CALL CHECON( 'U', -1, A, 1, IP, ANRM, RCOND, W, INFO )
00199 CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
00200 INFOT = 4
00201 CALL CHECON( 'U', 2, A, 1, IP, ANRM, RCOND, W, INFO )
00202 CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
00203 INFOT = 6
00204 CALL CHECON( 'U', 1, A, 1, IP, -ANRM, RCOND, W, INFO )
00205 CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
00206
00207
00208
00209
00210 ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN
00211
00212
00213
00214 SRNAMT = 'CHPTRF'
00215 INFOT = 1
00216 CALL CHPTRF( '/', 0, A, IP, INFO )
00217 CALL CHKXER( 'CHPTRF', INFOT, NOUT, LERR, OK )
00218 INFOT = 2
00219 CALL CHPTRF( 'U', -1, A, IP, INFO )
00220 CALL CHKXER( 'CHPTRF', INFOT, NOUT, LERR, OK )
00221
00222
00223
00224 SRNAMT = 'CHPTRI'
00225 INFOT = 1
00226 CALL CHPTRI( '/', 0, A, IP, W, INFO )
00227 CALL CHKXER( 'CHPTRI', INFOT, NOUT, LERR, OK )
00228 INFOT = 2
00229 CALL CHPTRI( 'U', -1, A, IP, W, INFO )
00230 CALL CHKXER( 'CHPTRI', INFOT, NOUT, LERR, OK )
00231
00232
00233
00234 SRNAMT = 'CHPTRS'
00235 INFOT = 1
00236 CALL CHPTRS( '/', 0, 0, A, IP, B, 1, INFO )
00237 CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
00238 INFOT = 2
00239 CALL CHPTRS( 'U', -1, 0, A, IP, B, 1, INFO )
00240 CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
00241 INFOT = 3
00242 CALL CHPTRS( 'U', 0, -1, A, IP, B, 1, INFO )
00243 CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
00244 INFOT = 7
00245 CALL CHPTRS( 'U', 2, 1, A, IP, B, 1, INFO )
00246 CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
00247
00248
00249
00250 SRNAMT = 'CHPRFS'
00251 INFOT = 1
00252 CALL CHPRFS( '/', 0, 0, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
00253 $ INFO )
00254 CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
00255 INFOT = 2
00256 CALL CHPRFS( 'U', -1, 0, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
00257 $ INFO )
00258 CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
00259 INFOT = 3
00260 CALL CHPRFS( 'U', 0, -1, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
00261 $ INFO )
00262 CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
00263 INFOT = 8
00264 CALL CHPRFS( 'U', 2, 1, A, AF, IP, B, 1, X, 2, R1, R2, W, R,
00265 $ INFO )
00266 CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
00267 INFOT = 10
00268 CALL CHPRFS( 'U', 2, 1, A, AF, IP, B, 2, X, 1, R1, R2, W, R,
00269 $ INFO )
00270 CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
00271
00272
00273
00274 N_ERR_BNDS = 3
00275 NPARAMS = 0
00276 SRNAMT = 'CHERFSX'
00277 INFOT = 1
00278 CALL CHERFSX( '/', EQ, 0, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
00279 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00280 $ PARAMS, W, R, INFO )
00281 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00282 INFOT = 2
00283 CALL CHERFSX( 'U', EQ, -1, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
00284 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00285 $ PARAMS, W, R, INFO )
00286 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00287 EQ = 'N'
00288 INFOT = 3
00289 CALL CHERFSX( 'U', EQ, -1, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
00290 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00291 $ PARAMS, W, R, INFO )
00292 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00293 INFOT = 4
00294 CALL CHERFSX( 'U', EQ, 0, -1, A, 1, AF, 1, IP, S, B, 1, X, 1,
00295 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00296 $ PARAMS, W, R, INFO )
00297 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00298 INFOT = 6
00299 CALL CHERFSX( 'U', EQ, 2, 1, A, 1, AF, 2, IP, S, B, 2, X, 2,
00300 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00301 $ PARAMS, W, R, INFO )
00302 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00303 INFOT = 8
00304 CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 1, IP, S, B, 2, X, 2,
00305 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00306 $ PARAMS, W, R, INFO )
00307 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00308 INFOT = 11
00309 CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
00310 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00311 $ PARAMS, W, R, INFO )
00312 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00313 INFOT = 13
00314 CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
00315 $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
00316 $ PARAMS, W, R, INFO )
00317 CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
00318
00319
00320
00321 SRNAMT = 'CHPCON'
00322 INFOT = 1
00323 CALL CHPCON( '/', 0, A, IP, ANRM, RCOND, W, INFO )
00324 CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
00325 INFOT = 2
00326 CALL CHPCON( 'U', -1, A, IP, ANRM, RCOND, W, INFO )
00327 CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
00328 INFOT = 5
00329 CALL CHPCON( 'U', 1, A, IP, -ANRM, RCOND, W, INFO )
00330 CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
00331 END IF
00332
00333
00334
00335 CALL ALAESM( PATH, OK, NOUT )
00336
00337 RETURN
00338
00339
00340
00341 END