00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016
00017
00018 static integer c__1 = 1;
00019
00020 int cppt05_(char *uplo, integer *n, integer *nrhs, complex *
00021 ap, complex *b, integer *ldb, complex *x, integer *ldx, complex *xact,
00022 integer *ldxact, real *ferr, real *berr, real *reslts)
00023 {
00024
00025 integer b_dim1, b_offset, x_dim1, x_offset, xact_dim1, xact_offset, i__1,
00026 i__2, i__3, i__4, i__5;
00027 real r__1, r__2, r__3, r__4;
00028 complex q__1, q__2;
00029
00030
00031 double r_imag(complex *);
00032
00033
00034 integer i__, j, k, jc;
00035 real eps, tmp, diff, axbi;
00036 integer imax;
00037 real unfl, ovfl;
00038 extern logical lsame_(char *, char *);
00039 logical upper;
00040 real xnorm;
00041 extern integer icamax_(integer *, complex *, integer *);
00042 extern doublereal slamch_(char *);
00043 real errbnd;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 --ap;
00152 b_dim1 = *ldb;
00153 b_offset = 1 + b_dim1;
00154 b -= b_offset;
00155 x_dim1 = *ldx;
00156 x_offset = 1 + x_dim1;
00157 x -= x_offset;
00158 xact_dim1 = *ldxact;
00159 xact_offset = 1 + xact_dim1;
00160 xact -= xact_offset;
00161 --ferr;
00162 --berr;
00163 --reslts;
00164
00165
00166 if (*n <= 0 || *nrhs <= 0) {
00167 reslts[1] = 0.f;
00168 reslts[2] = 0.f;
00169 return 0;
00170 }
00171
00172 eps = slamch_("Epsilon");
00173 unfl = slamch_("Safe minimum");
00174 ovfl = 1.f / unfl;
00175 upper = lsame_(uplo, "U");
00176
00177
00178
00179
00180
00181 errbnd = 0.f;
00182 i__1 = *nrhs;
00183 for (j = 1; j <= i__1; ++j) {
00184 imax = icamax_(n, &x[j * x_dim1 + 1], &c__1);
00185
00186 i__2 = imax + j * x_dim1;
00187 r__3 = (r__1 = x[i__2].r, dabs(r__1)) + (r__2 = r_imag(&x[imax + j *
00188 x_dim1]), dabs(r__2));
00189 xnorm = dmax(r__3,unfl);
00190 diff = 0.f;
00191 i__2 = *n;
00192 for (i__ = 1; i__ <= i__2; ++i__) {
00193 i__3 = i__ + j * x_dim1;
00194 i__4 = i__ + j * xact_dim1;
00195 q__2.r = x[i__3].r - xact[i__4].r, q__2.i = x[i__3].i - xact[i__4]
00196 .i;
00197 q__1.r = q__2.r, q__1.i = q__2.i;
00198
00199 r__3 = diff, r__4 = (r__1 = q__1.r, dabs(r__1)) + (r__2 = r_imag(&
00200 q__1), dabs(r__2));
00201 diff = dmax(r__3,r__4);
00202
00203 }
00204
00205 if (xnorm > 1.f) {
00206 goto L20;
00207 } else if (diff <= ovfl * xnorm) {
00208 goto L20;
00209 } else {
00210 errbnd = 1.f / eps;
00211 goto L30;
00212 }
00213
00214 L20:
00215 if (diff / xnorm <= ferr[j]) {
00216
00217 r__1 = errbnd, r__2 = diff / xnorm / ferr[j];
00218 errbnd = dmax(r__1,r__2);
00219 } else {
00220 errbnd = 1.f / eps;
00221 }
00222 L30:
00223 ;
00224 }
00225 reslts[1] = errbnd;
00226
00227
00228
00229
00230 i__1 = *nrhs;
00231 for (k = 1; k <= i__1; ++k) {
00232 i__2 = *n;
00233 for (i__ = 1; i__ <= i__2; ++i__) {
00234 i__3 = i__ + k * b_dim1;
00235 tmp = (r__1 = b[i__3].r, dabs(r__1)) + (r__2 = r_imag(&b[i__ + k *
00236 b_dim1]), dabs(r__2));
00237 if (upper) {
00238 jc = (i__ - 1) * i__ / 2;
00239 i__3 = i__ - 1;
00240 for (j = 1; j <= i__3; ++j) {
00241 i__4 = jc + j;
00242 i__5 = j + k * x_dim1;
00243 tmp += ((r__1 = ap[i__4].r, dabs(r__1)) + (r__2 = r_imag(&
00244 ap[jc + j]), dabs(r__2))) * ((r__3 = x[i__5].r,
00245 dabs(r__3)) + (r__4 = r_imag(&x[j + k * x_dim1]),
00246 dabs(r__4)));
00247
00248 }
00249 i__3 = jc + i__;
00250 i__4 = i__ + k * x_dim1;
00251 tmp += (r__1 = ap[i__3].r, dabs(r__1)) * ((r__2 = x[i__4].r,
00252 dabs(r__2)) + (r__3 = r_imag(&x[i__ + k * x_dim1]),
00253 dabs(r__3)));
00254 jc = jc + i__ + i__;
00255 i__3 = *n;
00256 for (j = i__ + 1; j <= i__3; ++j) {
00257 i__4 = jc;
00258 i__5 = j + k * x_dim1;
00259 tmp += ((r__1 = ap[i__4].r, dabs(r__1)) + (r__2 = r_imag(&
00260 ap[jc]), dabs(r__2))) * ((r__3 = x[i__5].r, dabs(
00261 r__3)) + (r__4 = r_imag(&x[j + k * x_dim1]), dabs(
00262 r__4)));
00263 jc += j;
00264
00265 }
00266 } else {
00267 jc = i__;
00268 i__3 = i__ - 1;
00269 for (j = 1; j <= i__3; ++j) {
00270 i__4 = jc;
00271 i__5 = j + k * x_dim1;
00272 tmp += ((r__1 = ap[i__4].r, dabs(r__1)) + (r__2 = r_imag(&
00273 ap[jc]), dabs(r__2))) * ((r__3 = x[i__5].r, dabs(
00274 r__3)) + (r__4 = r_imag(&x[j + k * x_dim1]), dabs(
00275 r__4)));
00276 jc = jc + *n - j;
00277
00278 }
00279 i__3 = jc;
00280 i__4 = i__ + k * x_dim1;
00281 tmp += (r__1 = ap[i__3].r, dabs(r__1)) * ((r__2 = x[i__4].r,
00282 dabs(r__2)) + (r__3 = r_imag(&x[i__ + k * x_dim1]),
00283 dabs(r__3)));
00284 i__3 = *n;
00285 for (j = i__ + 1; j <= i__3; ++j) {
00286 i__4 = jc + j - i__;
00287 i__5 = j + k * x_dim1;
00288 tmp += ((r__1 = ap[i__4].r, dabs(r__1)) + (r__2 = r_imag(&
00289 ap[jc + j - i__]), dabs(r__2))) * ((r__3 = x[i__5]
00290 .r, dabs(r__3)) + (r__4 = r_imag(&x[j + k *
00291 x_dim1]), dabs(r__4)));
00292
00293 }
00294 }
00295 if (i__ == 1) {
00296 axbi = tmp;
00297 } else {
00298 axbi = dmin(axbi,tmp);
00299 }
00300
00301 }
00302
00303 r__1 = axbi, r__2 = (*n + 1) * unfl;
00304 tmp = berr[k] / ((*n + 1) * eps + (*n + 1) * unfl / dmax(r__1,r__2));
00305 if (k == 1) {
00306 reslts[2] = tmp;
00307 } else {
00308 reslts[2] = dmax(reslts[2],tmp);
00309 }
00310
00311 }
00312
00313 return 0;
00314
00315
00316
00317 }