00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016 int cherk_(char *uplo, char *trans, integer *n, integer *k,
00017 real *alpha, complex *a, integer *lda, real *beta, complex *c__,
00018 integer *ldc)
00019 {
00020
00021 integer a_dim1, a_offset, c_dim1, c_offset, i__1, i__2, i__3, i__4, i__5,
00022 i__6;
00023 real r__1;
00024 complex q__1, q__2, q__3;
00025
00026
00027 void r_cnjg(complex *, complex *);
00028
00029
00030 integer i__, j, l, info;
00031 complex temp;
00032 extern logical lsame_(char *, char *);
00033 integer nrowa;
00034 real rtemp;
00035 logical upper;
00036 extern int xerbla_(char *, integer *);
00037
00038
00039
00040
00041
00042
00043
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
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169 a_dim1 = *lda;
00170 a_offset = 1 + a_dim1;
00171 a -= a_offset;
00172 c_dim1 = *ldc;
00173 c_offset = 1 + c_dim1;
00174 c__ -= c_offset;
00175
00176
00177 if (lsame_(trans, "N")) {
00178 nrowa = *n;
00179 } else {
00180 nrowa = *k;
00181 }
00182 upper = lsame_(uplo, "U");
00183
00184 info = 0;
00185 if (! upper && ! lsame_(uplo, "L")) {
00186 info = 1;
00187 } else if (! lsame_(trans, "N") && ! lsame_(trans,
00188 "C")) {
00189 info = 2;
00190 } else if (*n < 0) {
00191 info = 3;
00192 } else if (*k < 0) {
00193 info = 4;
00194 } else if (*lda < max(1,nrowa)) {
00195 info = 7;
00196 } else if (*ldc < max(1,*n)) {
00197 info = 10;
00198 }
00199 if (info != 0) {
00200 xerbla_("CHERK ", &info);
00201 return 0;
00202 }
00203
00204
00205
00206 if (*n == 0 || (*alpha == 0.f || *k == 0) && *beta == 1.f) {
00207 return 0;
00208 }
00209
00210
00211
00212 if (*alpha == 0.f) {
00213 if (upper) {
00214 if (*beta == 0.f) {
00215 i__1 = *n;
00216 for (j = 1; j <= i__1; ++j) {
00217 i__2 = j;
00218 for (i__ = 1; i__ <= i__2; ++i__) {
00219 i__3 = i__ + j * c_dim1;
00220 c__[i__3].r = 0.f, c__[i__3].i = 0.f;
00221
00222 }
00223
00224 }
00225 } else {
00226 i__1 = *n;
00227 for (j = 1; j <= i__1; ++j) {
00228 i__2 = j - 1;
00229 for (i__ = 1; i__ <= i__2; ++i__) {
00230 i__3 = i__ + j * c_dim1;
00231 i__4 = i__ + j * c_dim1;
00232 q__1.r = *beta * c__[i__4].r, q__1.i = *beta * c__[
00233 i__4].i;
00234 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00235
00236 }
00237 i__2 = j + j * c_dim1;
00238 i__3 = j + j * c_dim1;
00239 r__1 = *beta * c__[i__3].r;
00240 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00241
00242 }
00243 }
00244 } else {
00245 if (*beta == 0.f) {
00246 i__1 = *n;
00247 for (j = 1; j <= i__1; ++j) {
00248 i__2 = *n;
00249 for (i__ = j; i__ <= i__2; ++i__) {
00250 i__3 = i__ + j * c_dim1;
00251 c__[i__3].r = 0.f, c__[i__3].i = 0.f;
00252
00253 }
00254
00255 }
00256 } else {
00257 i__1 = *n;
00258 for (j = 1; j <= i__1; ++j) {
00259 i__2 = j + j * c_dim1;
00260 i__3 = j + j * c_dim1;
00261 r__1 = *beta * c__[i__3].r;
00262 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00263 i__2 = *n;
00264 for (i__ = j + 1; i__ <= i__2; ++i__) {
00265 i__3 = i__ + j * c_dim1;
00266 i__4 = i__ + j * c_dim1;
00267 q__1.r = *beta * c__[i__4].r, q__1.i = *beta * c__[
00268 i__4].i;
00269 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00270
00271 }
00272
00273 }
00274 }
00275 }
00276 return 0;
00277 }
00278
00279
00280
00281 if (lsame_(trans, "N")) {
00282
00283
00284
00285 if (upper) {
00286 i__1 = *n;
00287 for (j = 1; j <= i__1; ++j) {
00288 if (*beta == 0.f) {
00289 i__2 = j;
00290 for (i__ = 1; i__ <= i__2; ++i__) {
00291 i__3 = i__ + j * c_dim1;
00292 c__[i__3].r = 0.f, c__[i__3].i = 0.f;
00293
00294 }
00295 } else if (*beta != 1.f) {
00296 i__2 = j - 1;
00297 for (i__ = 1; i__ <= i__2; ++i__) {
00298 i__3 = i__ + j * c_dim1;
00299 i__4 = i__ + j * c_dim1;
00300 q__1.r = *beta * c__[i__4].r, q__1.i = *beta * c__[
00301 i__4].i;
00302 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00303
00304 }
00305 i__2 = j + j * c_dim1;
00306 i__3 = j + j * c_dim1;
00307 r__1 = *beta * c__[i__3].r;
00308 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00309 } else {
00310 i__2 = j + j * c_dim1;
00311 i__3 = j + j * c_dim1;
00312 r__1 = c__[i__3].r;
00313 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00314 }
00315 i__2 = *k;
00316 for (l = 1; l <= i__2; ++l) {
00317 i__3 = j + l * a_dim1;
00318 if (a[i__3].r != 0.f || a[i__3].i != 0.f) {
00319 r_cnjg(&q__2, &a[j + l * a_dim1]);
00320 q__1.r = *alpha * q__2.r, q__1.i = *alpha * q__2.i;
00321 temp.r = q__1.r, temp.i = q__1.i;
00322 i__3 = j - 1;
00323 for (i__ = 1; i__ <= i__3; ++i__) {
00324 i__4 = i__ + j * c_dim1;
00325 i__5 = i__ + j * c_dim1;
00326 i__6 = i__ + l * a_dim1;
00327 q__2.r = temp.r * a[i__6].r - temp.i * a[i__6].i,
00328 q__2.i = temp.r * a[i__6].i + temp.i * a[
00329 i__6].r;
00330 q__1.r = c__[i__5].r + q__2.r, q__1.i = c__[i__5]
00331 .i + q__2.i;
00332 c__[i__4].r = q__1.r, c__[i__4].i = q__1.i;
00333
00334 }
00335 i__3 = j + j * c_dim1;
00336 i__4 = j + j * c_dim1;
00337 i__5 = i__ + l * a_dim1;
00338 q__1.r = temp.r * a[i__5].r - temp.i * a[i__5].i,
00339 q__1.i = temp.r * a[i__5].i + temp.i * a[i__5]
00340 .r;
00341 r__1 = c__[i__4].r + q__1.r;
00342 c__[i__3].r = r__1, c__[i__3].i = 0.f;
00343 }
00344
00345 }
00346
00347 }
00348 } else {
00349 i__1 = *n;
00350 for (j = 1; j <= i__1; ++j) {
00351 if (*beta == 0.f) {
00352 i__2 = *n;
00353 for (i__ = j; i__ <= i__2; ++i__) {
00354 i__3 = i__ + j * c_dim1;
00355 c__[i__3].r = 0.f, c__[i__3].i = 0.f;
00356
00357 }
00358 } else if (*beta != 1.f) {
00359 i__2 = j + j * c_dim1;
00360 i__3 = j + j * c_dim1;
00361 r__1 = *beta * c__[i__3].r;
00362 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00363 i__2 = *n;
00364 for (i__ = j + 1; i__ <= i__2; ++i__) {
00365 i__3 = i__ + j * c_dim1;
00366 i__4 = i__ + j * c_dim1;
00367 q__1.r = *beta * c__[i__4].r, q__1.i = *beta * c__[
00368 i__4].i;
00369 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00370
00371 }
00372 } else {
00373 i__2 = j + j * c_dim1;
00374 i__3 = j + j * c_dim1;
00375 r__1 = c__[i__3].r;
00376 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00377 }
00378 i__2 = *k;
00379 for (l = 1; l <= i__2; ++l) {
00380 i__3 = j + l * a_dim1;
00381 if (a[i__3].r != 0.f || a[i__3].i != 0.f) {
00382 r_cnjg(&q__2, &a[j + l * a_dim1]);
00383 q__1.r = *alpha * q__2.r, q__1.i = *alpha * q__2.i;
00384 temp.r = q__1.r, temp.i = q__1.i;
00385 i__3 = j + j * c_dim1;
00386 i__4 = j + j * c_dim1;
00387 i__5 = j + l * a_dim1;
00388 q__1.r = temp.r * a[i__5].r - temp.i * a[i__5].i,
00389 q__1.i = temp.r * a[i__5].i + temp.i * a[i__5]
00390 .r;
00391 r__1 = c__[i__4].r + q__1.r;
00392 c__[i__3].r = r__1, c__[i__3].i = 0.f;
00393 i__3 = *n;
00394 for (i__ = j + 1; i__ <= i__3; ++i__) {
00395 i__4 = i__ + j * c_dim1;
00396 i__5 = i__ + j * c_dim1;
00397 i__6 = i__ + l * a_dim1;
00398 q__2.r = temp.r * a[i__6].r - temp.i * a[i__6].i,
00399 q__2.i = temp.r * a[i__6].i + temp.i * a[
00400 i__6].r;
00401 q__1.r = c__[i__5].r + q__2.r, q__1.i = c__[i__5]
00402 .i + q__2.i;
00403 c__[i__4].r = q__1.r, c__[i__4].i = q__1.i;
00404
00405 }
00406 }
00407
00408 }
00409
00410 }
00411 }
00412 } else {
00413
00414
00415
00416 if (upper) {
00417 i__1 = *n;
00418 for (j = 1; j <= i__1; ++j) {
00419 i__2 = j - 1;
00420 for (i__ = 1; i__ <= i__2; ++i__) {
00421 temp.r = 0.f, temp.i = 0.f;
00422 i__3 = *k;
00423 for (l = 1; l <= i__3; ++l) {
00424 r_cnjg(&q__3, &a[l + i__ * a_dim1]);
00425 i__4 = l + j * a_dim1;
00426 q__2.r = q__3.r * a[i__4].r - q__3.i * a[i__4].i,
00427 q__2.i = q__3.r * a[i__4].i + q__3.i * a[i__4]
00428 .r;
00429 q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
00430 temp.r = q__1.r, temp.i = q__1.i;
00431
00432 }
00433 if (*beta == 0.f) {
00434 i__3 = i__ + j * c_dim1;
00435 q__1.r = *alpha * temp.r, q__1.i = *alpha * temp.i;
00436 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00437 } else {
00438 i__3 = i__ + j * c_dim1;
00439 q__2.r = *alpha * temp.r, q__2.i = *alpha * temp.i;
00440 i__4 = i__ + j * c_dim1;
00441 q__3.r = *beta * c__[i__4].r, q__3.i = *beta * c__[
00442 i__4].i;
00443 q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
00444 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00445 }
00446
00447 }
00448 rtemp = 0.f;
00449 i__2 = *k;
00450 for (l = 1; l <= i__2; ++l) {
00451 r_cnjg(&q__3, &a[l + j * a_dim1]);
00452 i__3 = l + j * a_dim1;
00453 q__2.r = q__3.r * a[i__3].r - q__3.i * a[i__3].i, q__2.i =
00454 q__3.r * a[i__3].i + q__3.i * a[i__3].r;
00455 q__1.r = rtemp + q__2.r, q__1.i = q__2.i;
00456 rtemp = q__1.r;
00457
00458 }
00459 if (*beta == 0.f) {
00460 i__2 = j + j * c_dim1;
00461 r__1 = *alpha * rtemp;
00462 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00463 } else {
00464 i__2 = j + j * c_dim1;
00465 i__3 = j + j * c_dim1;
00466 r__1 = *alpha * rtemp + *beta * c__[i__3].r;
00467 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00468 }
00469
00470 }
00471 } else {
00472 i__1 = *n;
00473 for (j = 1; j <= i__1; ++j) {
00474 rtemp = 0.f;
00475 i__2 = *k;
00476 for (l = 1; l <= i__2; ++l) {
00477 r_cnjg(&q__3, &a[l + j * a_dim1]);
00478 i__3 = l + j * a_dim1;
00479 q__2.r = q__3.r * a[i__3].r - q__3.i * a[i__3].i, q__2.i =
00480 q__3.r * a[i__3].i + q__3.i * a[i__3].r;
00481 q__1.r = rtemp + q__2.r, q__1.i = q__2.i;
00482 rtemp = q__1.r;
00483
00484 }
00485 if (*beta == 0.f) {
00486 i__2 = j + j * c_dim1;
00487 r__1 = *alpha * rtemp;
00488 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00489 } else {
00490 i__2 = j + j * c_dim1;
00491 i__3 = j + j * c_dim1;
00492 r__1 = *alpha * rtemp + *beta * c__[i__3].r;
00493 c__[i__2].r = r__1, c__[i__2].i = 0.f;
00494 }
00495 i__2 = *n;
00496 for (i__ = j + 1; i__ <= i__2; ++i__) {
00497 temp.r = 0.f, temp.i = 0.f;
00498 i__3 = *k;
00499 for (l = 1; l <= i__3; ++l) {
00500 r_cnjg(&q__3, &a[l + i__ * a_dim1]);
00501 i__4 = l + j * a_dim1;
00502 q__2.r = q__3.r * a[i__4].r - q__3.i * a[i__4].i,
00503 q__2.i = q__3.r * a[i__4].i + q__3.i * a[i__4]
00504 .r;
00505 q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
00506 temp.r = q__1.r, temp.i = q__1.i;
00507
00508 }
00509 if (*beta == 0.f) {
00510 i__3 = i__ + j * c_dim1;
00511 q__1.r = *alpha * temp.r, q__1.i = *alpha * temp.i;
00512 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00513 } else {
00514 i__3 = i__ + j * c_dim1;
00515 q__2.r = *alpha * temp.r, q__2.i = *alpha * temp.i;
00516 i__4 = i__ + j * c_dim1;
00517 q__3.r = *beta * c__[i__4].r, q__3.i = *beta * c__[
00518 i__4].i;
00519 q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
00520 c__[i__3].r = q__1.r, c__[i__3].i = q__1.i;
00521 }
00522
00523 }
00524
00525 }
00526 }
00527 }
00528
00529 return 0;
00530
00531
00532
00533 }