00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016 int zptts2_(integer *iuplo, integer *n, integer *nrhs,
00017 doublereal *d__, doublecomplex *e, doublecomplex *b, integer *ldb)
00018 {
00019
00020 integer b_dim1, b_offset, i__1, i__2, i__3, i__4, i__5, i__6;
00021 doublereal d__1;
00022 doublecomplex z__1, z__2, z__3, z__4;
00023
00024
00025 void d_cnjg(doublecomplex *, doublecomplex *);
00026
00027
00028 integer i__, j;
00029 extern int zdscal_(integer *, doublereal *,
00030 doublecomplex *, integer *);
00031
00032
00033
00034
00035
00036
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 --d__;
00101 --e;
00102 b_dim1 = *ldb;
00103 b_offset = 1 + b_dim1;
00104 b -= b_offset;
00105
00106
00107 if (*n <= 1) {
00108 if (*n == 1) {
00109 d__1 = 1. / d__[1];
00110 zdscal_(nrhs, &d__1, &b[b_offset], ldb);
00111 }
00112 return 0;
00113 }
00114
00115 if (*iuplo == 1) {
00116
00117
00118
00119
00120 if (*nrhs <= 2) {
00121 j = 1;
00122 L10:
00123
00124
00125
00126 i__1 = *n;
00127 for (i__ = 2; i__ <= i__1; ++i__) {
00128 i__2 = i__ + j * b_dim1;
00129 i__3 = i__ + j * b_dim1;
00130 i__4 = i__ - 1 + j * b_dim1;
00131 d_cnjg(&z__3, &e[i__ - 1]);
00132 z__2.r = b[i__4].r * z__3.r - b[i__4].i * z__3.i, z__2.i = b[
00133 i__4].r * z__3.i + b[i__4].i * z__3.r;
00134 z__1.r = b[i__3].r - z__2.r, z__1.i = b[i__3].i - z__2.i;
00135 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00136
00137 }
00138
00139
00140
00141 i__1 = *n;
00142 for (i__ = 1; i__ <= i__1; ++i__) {
00143 i__2 = i__ + j * b_dim1;
00144 i__3 = i__ + j * b_dim1;
00145 i__4 = i__;
00146 z__1.r = b[i__3].r / d__[i__4], z__1.i = b[i__3].i / d__[i__4]
00147 ;
00148 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00149
00150 }
00151 for (i__ = *n - 1; i__ >= 1; --i__) {
00152 i__1 = i__ + j * b_dim1;
00153 i__2 = i__ + j * b_dim1;
00154 i__3 = i__ + 1 + j * b_dim1;
00155 i__4 = i__;
00156 z__2.r = b[i__3].r * e[i__4].r - b[i__3].i * e[i__4].i,
00157 z__2.i = b[i__3].r * e[i__4].i + b[i__3].i * e[i__4]
00158 .r;
00159 z__1.r = b[i__2].r - z__2.r, z__1.i = b[i__2].i - z__2.i;
00160 b[i__1].r = z__1.r, b[i__1].i = z__1.i;
00161
00162 }
00163 if (j < *nrhs) {
00164 ++j;
00165 goto L10;
00166 }
00167 } else {
00168 i__1 = *nrhs;
00169 for (j = 1; j <= i__1; ++j) {
00170
00171
00172
00173 i__2 = *n;
00174 for (i__ = 2; i__ <= i__2; ++i__) {
00175 i__3 = i__ + j * b_dim1;
00176 i__4 = i__ + j * b_dim1;
00177 i__5 = i__ - 1 + j * b_dim1;
00178 d_cnjg(&z__3, &e[i__ - 1]);
00179 z__2.r = b[i__5].r * z__3.r - b[i__5].i * z__3.i, z__2.i =
00180 b[i__5].r * z__3.i + b[i__5].i * z__3.r;
00181 z__1.r = b[i__4].r - z__2.r, z__1.i = b[i__4].i - z__2.i;
00182 b[i__3].r = z__1.r, b[i__3].i = z__1.i;
00183
00184 }
00185
00186
00187
00188 i__2 = *n + j * b_dim1;
00189 i__3 = *n + j * b_dim1;
00190 i__4 = *n;
00191 z__1.r = b[i__3].r / d__[i__4], z__1.i = b[i__3].i / d__[i__4]
00192 ;
00193 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00194 for (i__ = *n - 1; i__ >= 1; --i__) {
00195 i__2 = i__ + j * b_dim1;
00196 i__3 = i__ + j * b_dim1;
00197 i__4 = i__;
00198 z__2.r = b[i__3].r / d__[i__4], z__2.i = b[i__3].i / d__[
00199 i__4];
00200 i__5 = i__ + 1 + j * b_dim1;
00201 i__6 = i__;
00202 z__3.r = b[i__5].r * e[i__6].r - b[i__5].i * e[i__6].i,
00203 z__3.i = b[i__5].r * e[i__6].i + b[i__5].i * e[
00204 i__6].r;
00205 z__1.r = z__2.r - z__3.r, z__1.i = z__2.i - z__3.i;
00206 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00207
00208 }
00209
00210 }
00211 }
00212 } else {
00213
00214
00215
00216
00217 if (*nrhs <= 2) {
00218 j = 1;
00219 L80:
00220
00221
00222
00223 i__1 = *n;
00224 for (i__ = 2; i__ <= i__1; ++i__) {
00225 i__2 = i__ + j * b_dim1;
00226 i__3 = i__ + j * b_dim1;
00227 i__4 = i__ - 1 + j * b_dim1;
00228 i__5 = i__ - 1;
00229 z__2.r = b[i__4].r * e[i__5].r - b[i__4].i * e[i__5].i,
00230 z__2.i = b[i__4].r * e[i__5].i + b[i__4].i * e[i__5]
00231 .r;
00232 z__1.r = b[i__3].r - z__2.r, z__1.i = b[i__3].i - z__2.i;
00233 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00234
00235 }
00236
00237
00238
00239 i__1 = *n;
00240 for (i__ = 1; i__ <= i__1; ++i__) {
00241 i__2 = i__ + j * b_dim1;
00242 i__3 = i__ + j * b_dim1;
00243 i__4 = i__;
00244 z__1.r = b[i__3].r / d__[i__4], z__1.i = b[i__3].i / d__[i__4]
00245 ;
00246 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00247
00248 }
00249 for (i__ = *n - 1; i__ >= 1; --i__) {
00250 i__1 = i__ + j * b_dim1;
00251 i__2 = i__ + j * b_dim1;
00252 i__3 = i__ + 1 + j * b_dim1;
00253 d_cnjg(&z__3, &e[i__]);
00254 z__2.r = b[i__3].r * z__3.r - b[i__3].i * z__3.i, z__2.i = b[
00255 i__3].r * z__3.i + b[i__3].i * z__3.r;
00256 z__1.r = b[i__2].r - z__2.r, z__1.i = b[i__2].i - z__2.i;
00257 b[i__1].r = z__1.r, b[i__1].i = z__1.i;
00258
00259 }
00260 if (j < *nrhs) {
00261 ++j;
00262 goto L80;
00263 }
00264 } else {
00265 i__1 = *nrhs;
00266 for (j = 1; j <= i__1; ++j) {
00267
00268
00269
00270 i__2 = *n;
00271 for (i__ = 2; i__ <= i__2; ++i__) {
00272 i__3 = i__ + j * b_dim1;
00273 i__4 = i__ + j * b_dim1;
00274 i__5 = i__ - 1 + j * b_dim1;
00275 i__6 = i__ - 1;
00276 z__2.r = b[i__5].r * e[i__6].r - b[i__5].i * e[i__6].i,
00277 z__2.i = b[i__5].r * e[i__6].i + b[i__5].i * e[
00278 i__6].r;
00279 z__1.r = b[i__4].r - z__2.r, z__1.i = b[i__4].i - z__2.i;
00280 b[i__3].r = z__1.r, b[i__3].i = z__1.i;
00281
00282 }
00283
00284
00285
00286 i__2 = *n + j * b_dim1;
00287 i__3 = *n + j * b_dim1;
00288 i__4 = *n;
00289 z__1.r = b[i__3].r / d__[i__4], z__1.i = b[i__3].i / d__[i__4]
00290 ;
00291 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00292 for (i__ = *n - 1; i__ >= 1; --i__) {
00293 i__2 = i__ + j * b_dim1;
00294 i__3 = i__ + j * b_dim1;
00295 i__4 = i__;
00296 z__2.r = b[i__3].r / d__[i__4], z__2.i = b[i__3].i / d__[
00297 i__4];
00298 i__5 = i__ + 1 + j * b_dim1;
00299 d_cnjg(&z__4, &e[i__]);
00300 z__3.r = b[i__5].r * z__4.r - b[i__5].i * z__4.i, z__3.i =
00301 b[i__5].r * z__4.i + b[i__5].i * z__4.r;
00302 z__1.r = z__2.r - z__3.r, z__1.i = z__2.i - z__3.i;
00303 b[i__2].r = z__1.r, b[i__2].i = z__1.i;
00304
00305 }
00306
00307 }
00308 }
00309 }
00310
00311 return 0;
00312
00313
00314
00315 }