| |
| |
| |
| |
| #include "util/f2c.h" |
|
|
| #ifdef HAVE_CONFIG |
| #include "config.h" |
| #else |
| extern doublereal slamch_(char *); |
| #define EPSILON slamch_("Epsilon") |
| #define SAFEMINIMUM slamch_("Safe minimum") |
| #define PRECISION slamch_("Precision") |
| #define BASE slamch_("Base") |
| #endif |
|
|
|
|
| extern doublereal slapy2_(real *, real *); |
|
|
|
|
|
|
| |
|
|
| static integer c__0 = 0; |
| static real c_b163 = 0.f; |
| static real c_b164 = 1.f; |
| static integer c__1 = 1; |
| static real c_b181 = -1.f; |
| static integer c_n1 = -1; |
|
|
| integer ieeeck_(integer *ispec, real *zero, real *one) |
| { |
| |
| integer ret_val; |
|
|
| |
| static real nan1, nan2, nan3, nan4, nan5, nan6, neginf, posinf, negzro, |
| newzro; |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| ret_val = 1; |
|
|
| posinf = *one / *zero; |
| if (posinf <= *one) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| neginf = -(*one) / *zero; |
| if (neginf >= *zero) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| negzro = *one / (neginf + *one); |
| if (negzro != *zero) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| neginf = *one / negzro; |
| if (neginf >= *zero) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| newzro = negzro + *zero; |
| if (newzro != *zero) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| posinf = *one / newzro; |
| if (posinf <= *one) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| neginf *= posinf; |
| if (neginf >= *zero) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| posinf *= posinf; |
| if (posinf <= *one) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
|
|
| |
|
|
| if (*ispec == 0) { |
| return ret_val; |
| } |
|
|
| nan1 = posinf + neginf; |
|
|
| nan2 = posinf / neginf; |
|
|
| nan3 = posinf / posinf; |
|
|
| nan4 = posinf * *zero; |
|
|
| nan5 = neginf * negzro; |
|
|
| nan6 = nan5 * 0.f; |
|
|
| if (nan1 == nan1) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| if (nan2 == nan2) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| if (nan3 == nan3) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| if (nan4 == nan4) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| if (nan5 == nan5) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| if (nan6 == nan6) { |
| ret_val = 0; |
| return ret_val; |
| } |
|
|
| return ret_val; |
| } |
|
|
| integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1, |
| integer *n2, integer *n3, integer *n4, ftnlen name_len, ftnlen |
| opts_len) |
| { |
| |
| integer ret_val; |
|
|
| |
| int s_copy(char *, char *, ftnlen, ftnlen); |
| integer s_cmp(char *, char *, ftnlen, ftnlen); |
|
|
| |
| static integer i__; |
| static char c1[1], c2[2], c3[3], c4[2]; |
| static integer ic, nb, iz, nx; |
| static logical cname, sname; |
| static integer nbmin; |
| extern integer ieeeck_(integer *, real *, real *); |
| static char subnam[6]; |
|
|
| (void)opts; |
| (void)n3; |
| (void)opts_len; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| switch (*ispec) { |
| case 1: goto L100; |
| case 2: goto L100; |
| case 3: goto L100; |
| case 4: goto L400; |
| case 5: goto L500; |
| case 6: goto L600; |
| case 7: goto L700; |
| case 8: goto L800; |
| case 9: goto L900; |
| case 10: goto L1000; |
| case 11: goto L1100; |
| } |
|
|
| |
|
|
| ret_val = -1; |
| return ret_val; |
|
|
| L100: |
|
|
| |
|
|
| ret_val = 1; |
| s_copy(subnam, name__, (ftnlen)6, name_len); |
| ic = *(unsigned char *)subnam; |
| iz = 'Z'; |
| if (iz == 90 || iz == 122) { |
|
|
| |
|
|
| if (ic >= 97 && ic <= 122) { |
| *(unsigned char *)subnam = (char) (ic - 32); |
| for (i__ = 2; i__ <= 6; ++i__) { |
| ic = *(unsigned char *)&subnam[i__ - 1]; |
| if (ic >= 97 && ic <= 122) { |
| *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32); |
| } |
| |
| } |
| } |
|
|
| } else if (iz == 233 || iz == 169) { |
|
|
| |
|
|
| if ((ic >= 129 && ic <= 137) || (ic >= 145 && ic <= 153) || (ic >= 162 && |
| ic <= 169)) { |
| *(unsigned char *)subnam = (char) (ic + 64); |
| for (i__ = 2; i__ <= 6; ++i__) { |
| ic = *(unsigned char *)&subnam[i__ - 1]; |
| if ((ic >= 129 && ic <= 137) || (ic >= 145 && ic <= 153) || (ic >= |
| 162 && ic <= 169)) { |
| *(unsigned char *)&subnam[i__ - 1] = (char) (ic + 64); |
| } |
| |
| } |
| } |
|
|
| } else if (iz == 218 || iz == 250) { |
|
|
| |
|
|
| if (ic >= 225 && ic <= 250) { |
| *(unsigned char *)subnam = (char) (ic - 32); |
| for (i__ = 2; i__ <= 6; ++i__) { |
| ic = *(unsigned char *)&subnam[i__ - 1]; |
| if (ic >= 225 && ic <= 250) { |
| *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32); |
| } |
| |
| } |
| } |
| } |
|
|
| *(unsigned char *)c1 = *(unsigned char *)subnam; |
| sname = *(unsigned char *)c1 == 'S' || *(unsigned char *)c1 == 'D'; |
| cname = *(unsigned char *)c1 == 'C' || *(unsigned char *)c1 == 'Z'; |
| if (! (cname || sname)) { |
| return ret_val; |
| } |
| s_copy(c2, subnam + 1, (ftnlen)2, (ftnlen)2); |
| s_copy(c3, subnam + 3, (ftnlen)3, (ftnlen)3); |
| s_copy(c4, c3 + 1, (ftnlen)2, (ftnlen)2); |
|
|
| switch (*ispec) { |
| case 1: goto L110; |
| case 2: goto L200; |
| case 3: goto L300; |
| } |
|
|
| L110: |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| nb = 1; |
|
|
| if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } else if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, |
| "RQF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen) |
| 3, (ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) |
| == 0) { |
| if (sname) { |
| nb = 32; |
| } else { |
| nb = 32; |
| } |
| } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 32; |
| } else { |
| nb = 32; |
| } |
| } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 32; |
| } else { |
| nb = 32; |
| } |
| } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } |
| } else if (s_cmp(c2, "PO", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } |
| } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 32; |
| } else if (sname && s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 64; |
| } |
| } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 64; |
| } else if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 32; |
| } else if (s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 64; |
| } |
| } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nb = 32; |
| } |
| } else if (*(unsigned char *)c3 == 'M') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nb = 32; |
| } |
| } |
| } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nb = 32; |
| } |
| } else if (*(unsigned char *)c3 == 'M') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nb = 32; |
| } |
| } |
| } else if (s_cmp(c2, "GB", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| if (*n4 <= 64) { |
| nb = 1; |
| } else { |
| nb = 32; |
| } |
| } else { |
| if (*n4 <= 64) { |
| nb = 1; |
| } else { |
| nb = 32; |
| } |
| } |
| } |
| } else if (s_cmp(c2, "PB", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| if (*n2 <= 64) { |
| nb = 1; |
| } else { |
| nb = 32; |
| } |
| } else { |
| if (*n2 <= 64) { |
| nb = 1; |
| } else { |
| nb = 32; |
| } |
| } |
| } |
| } else if (s_cmp(c2, "TR", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } |
| } else if (s_cmp(c2, "LA", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "UUM", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nb = 64; |
| } else { |
| nb = 64; |
| } |
| } |
| } else if (sname && s_cmp(c2, "ST", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "EBZ", (ftnlen)3, (ftnlen)3) == 0) { |
| nb = 1; |
| } |
| } |
| ret_val = nb; |
| return ret_val; |
|
|
| L200: |
|
|
| |
|
|
| nbmin = 2; |
| if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", ( |
| ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, ( |
| ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0) |
| { |
| if (sname) { |
| nbmin = 2; |
| } else { |
| nbmin = 2; |
| } |
| } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nbmin = 2; |
| } else { |
| nbmin = 2; |
| } |
| } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nbmin = 2; |
| } else { |
| nbmin = 2; |
| } |
| } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nbmin = 2; |
| } else { |
| nbmin = 2; |
| } |
| } |
| } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nbmin = 8; |
| } else { |
| nbmin = 8; |
| } |
| } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nbmin = 2; |
| } |
| } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nbmin = 2; |
| } |
| } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nbmin = 2; |
| } |
| } else if (*(unsigned char *)c3 == 'M') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nbmin = 2; |
| } |
| } |
| } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nbmin = 2; |
| } |
| } else if (*(unsigned char *)c3 == 'M') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nbmin = 2; |
| } |
| } |
| } |
| ret_val = nbmin; |
| return ret_val; |
|
|
| L300: |
|
|
| |
|
|
| nx = 0; |
| if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", ( |
| ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, ( |
| ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0) |
| { |
| if (sname) { |
| nx = 128; |
| } else { |
| nx = 128; |
| } |
| } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nx = 128; |
| } else { |
| nx = 128; |
| } |
| } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { |
| if (sname) { |
| nx = 128; |
| } else { |
| nx = 128; |
| } |
| } |
| } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { |
| if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nx = 32; |
| } |
| } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { |
| if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { |
| nx = 32; |
| } |
| } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nx = 128; |
| } |
| } |
| } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { |
| if (*(unsigned char *)c3 == 'G') { |
| if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", |
| (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( |
| ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == |
| 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( |
| c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( |
| ftnlen)2, (ftnlen)2) == 0) { |
| nx = 128; |
| } |
| } |
| } |
| ret_val = nx; |
| return ret_val; |
|
|
| L400: |
|
|
| |
|
|
| ret_val = 6; |
| return ret_val; |
|
|
| L500: |
|
|
| |
|
|
| ret_val = 2; |
| return ret_val; |
|
|
| L600: |
|
|
| |
|
|
| ret_val = (integer) ((real) min(*n1,*n2) * 1.6f); |
| return ret_val; |
|
|
| L700: |
|
|
| |
|
|
| ret_val = 1; |
| return ret_val; |
|
|
| L800: |
|
|
| |
|
|
| ret_val = 50; |
| return ret_val; |
|
|
| L900: |
|
|
| |
| |
| |
| |
| |
|
|
| ret_val = 25; |
| return ret_val; |
|
|
| L1000: |
|
|
| |
| |
| |
| |
| |
| ret_val = 1; |
| if (ret_val == 1) { |
| ret_val = ieeeck_(&c__0, &c_b163, &c_b164); |
| } |
| return ret_val; |
|
|
| L1100: |
|
|
| |
| |
| |
| |
| |
| ret_val = 1; |
| if (ret_val == 1) { |
| ret_val = ieeeck_(&c__1, &c_b163, &c_b164); |
| } |
| return ret_val; |
|
|
| |
|
|
| } |
|
|
| int sposv_(char *uplo, integer *n, integer *nrhs, real *a, |
| integer *lda, real *b, integer *ldb, integer *info) |
| { |
| |
| integer a_dim1, a_offset, b_dim1, b_offset, i__1; |
|
|
| |
| extern logical lsame_(char *, char *); |
| extern int xerbla_(char *, integer *), spotrf_( |
| char *, integer *, real *, integer *, integer *), spotrs_( |
| char *, integer *, integer *, real *, integer *, real *, integer * |
| , integer *); |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| a_dim1 = *lda; |
| a_offset = 1 + a_dim1; |
| a -= a_offset; |
| b_dim1 = *ldb; |
| b_offset = 1 + b_dim1; |
| b -= b_offset; |
|
|
| |
| *info = 0; |
| if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) { |
| *info = -1; |
| } else if (*n < 0) { |
| *info = -2; |
| } else if (*nrhs < 0) { |
| *info = -3; |
| } else if (*lda < max(1,*n)) { |
| *info = -5; |
| } else if (*ldb < max(1,*n)) { |
| *info = -7; |
| } |
| if (*info != 0) { |
| i__1 = -(*info); |
| xerbla_("SPOSV ", &i__1); |
| return 0; |
| } |
|
|
| |
|
|
| spotrf_(uplo, n, &a[a_offset], lda, info); |
| if (*info == 0) { |
|
|
| |
|
|
| spotrs_(uplo, n, nrhs, &a[a_offset], lda, &b[b_offset], ldb, info); |
|
|
| } |
| return 0; |
|
|
| |
|
|
| } |
|
|
| int spotf2_(char *uplo, integer *n, real *a, integer *lda, |
| integer *info) |
| { |
| |
| integer a_dim1, a_offset, i__1, i__2, i__3; |
| real r__1; |
|
|
| |
| double sqrt(doublereal); |
|
|
| |
| static integer j; |
| static real ajj; |
| extern doublereal sdot_(integer *, real *, integer *, real *, integer *); |
| extern logical lsame_(char *, char *); |
| extern int sscal_(integer *, real *, real *, integer *), |
| sgemv_(char *, integer *, integer *, real *, real *, integer *, |
| real *, integer *, real *, real *, integer *); |
| static logical upper; |
| extern int xerbla_(char *, integer *); |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| a_dim1 = *lda; |
| a_offset = 1 + a_dim1; |
| a -= a_offset; |
|
|
| |
| *info = 0; |
| upper = lsame_(uplo, "U"); |
| if (! upper && ! lsame_(uplo, "L")) { |
| *info = -1; |
| } else if (*n < 0) { |
| *info = -2; |
| } else if (*lda < max(1,*n)) { |
| *info = -4; |
| } |
| if (*info != 0) { |
| i__1 = -(*info); |
| xerbla_("SPOTF2", &i__1); |
| return 0; |
| } |
|
|
| |
|
|
| if (*n == 0) { |
| return 0; |
| } |
|
|
| if (upper) { |
|
|
| |
|
|
| i__1 = *n; |
| for (j = 1; j <= i__1; ++j) { |
|
|
| |
|
|
| i__2 = j - 1; |
| ajj = a[j + j * a_dim1] - sdot_(&i__2, &a[j * a_dim1 + 1], &c__1, |
| &a[j * a_dim1 + 1], &c__1); |
| if (ajj <= 0.f) { |
| a[j + j * a_dim1] = ajj; |
| goto L30; |
| } |
| ajj = sqrt(ajj); |
| a[j + j * a_dim1] = ajj; |
|
|
| |
|
|
| if (j < *n) { |
| i__2 = j - 1; |
| i__3 = *n - j; |
| sgemv_("Transpose", &i__2, &i__3, &c_b181, &a[(j + 1) * |
| a_dim1 + 1], lda, &a[j * a_dim1 + 1], &c__1, &c_b164, |
| &a[j + (j + 1) * a_dim1], lda); |
| i__2 = *n - j; |
| r__1 = 1.f / ajj; |
| sscal_(&i__2, &r__1, &a[j + (j + 1) * a_dim1], lda); |
| } |
| |
| } |
| } else { |
|
|
| |
|
|
| i__1 = *n; |
| for (j = 1; j <= i__1; ++j) { |
|
|
| |
|
|
| i__2 = j - 1; |
| ajj = a[j + j * a_dim1] - sdot_(&i__2, &a[j + a_dim1], lda, &a[j |
| + a_dim1], lda); |
| if (ajj <= 0.f) { |
| a[j + j * a_dim1] = ajj; |
| goto L30; |
| } |
| ajj = sqrt(ajj); |
| a[j + j * a_dim1] = ajj; |
|
|
| |
|
|
| if (j < *n) { |
| i__2 = *n - j; |
| i__3 = j - 1; |
| sgemv_("No transpose", &i__2, &i__3, &c_b181, &a[j + 1 + |
| a_dim1], lda, &a[j + a_dim1], lda, &c_b164, &a[j + 1 |
| + j * a_dim1], &c__1); |
| i__2 = *n - j; |
| r__1 = 1.f / ajj; |
| sscal_(&i__2, &r__1, &a[j + 1 + j * a_dim1], &c__1); |
| } |
| |
| } |
| } |
| goto L40; |
|
|
| L30: |
| *info = j; |
|
|
| L40: |
| return 0; |
|
|
| |
|
|
| } |
|
|
| int spotrf_(char *uplo, integer *n, real *a, integer *lda, |
| integer *info) |
| { |
| |
| integer a_dim1, a_offset, i__1, i__2, i__3, i__4; |
|
|
| |
| static integer j, jb, nb; |
| extern logical lsame_(char *, char *); |
| extern int sgemm_(char *, char *, integer *, integer *, |
| integer *, real *, real *, integer *, real *, integer *, real *, |
| real *, integer *); |
| static logical upper; |
| extern int strsm_(char *, char *, char *, char *, |
| integer *, integer *, real *, real *, integer *, real *, integer * |
| ), ssyrk_(char *, char *, integer |
| *, integer *, real *, real *, integer *, real *, real *, integer * |
| ), spotf2_(char *, integer *, real *, integer *, |
| integer *), xerbla_(char *, integer *); |
| extern integer ilaenv_(integer *, char *, char *, integer *, integer *, |
| integer *, integer *, ftnlen, ftnlen); |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| a_dim1 = *lda; |
| a_offset = 1 + a_dim1; |
| a -= a_offset; |
|
|
| |
| *info = 0; |
| upper = lsame_(uplo, "U"); |
| if (! upper && ! lsame_(uplo, "L")) { |
| *info = -1; |
| } else if (*n < 0) { |
| *info = -2; |
| } else if (*lda < max(1,*n)) { |
| *info = -4; |
| } |
| if (*info != 0) { |
| i__1 = -(*info); |
| xerbla_("SPOTRF", &i__1); |
| return 0; |
| } |
|
|
| |
|
|
| if (*n == 0) { |
| return 0; |
| } |
|
|
| |
|
|
| nb = ilaenv_(&c__1, "SPOTRF", uplo, n, &c_n1, &c_n1, &c_n1, (ftnlen)6, ( |
| ftnlen)1); |
| if (nb <= 1 || nb >= *n) { |
|
|
| |
|
|
| spotf2_(uplo, n, &a[a_offset], lda, info); |
| } else { |
|
|
| |
|
|
| if (upper) { |
|
|
| |
|
|
| i__1 = *n; |
| i__2 = nb; |
| for (j = 1; i__2 < 0 ? j >= i__1 : j <= i__1; j += i__2) { |
|
|
| |
| |
| |
| |
| |
| |
| i__3 = nb, i__4 = *n - j + 1; |
| jb = min(i__3,i__4); |
| i__3 = j - 1; |
| ssyrk_("Upper", "Transpose", &jb, &i__3, &c_b181, &a[j * |
| a_dim1 + 1], lda, &c_b164, &a[j + j * a_dim1], lda); |
| spotf2_("Upper", &jb, &a[j + j * a_dim1], lda, info); |
| if (*info != 0) { |
| goto L30; |
| } |
| if (j + jb <= *n) { |
|
|
| |
|
|
| i__3 = *n - j - jb + 1; |
| i__4 = j - 1; |
| sgemm_("Transpose", "No transpose", &jb, &i__3, &i__4, & |
| c_b181, &a[j * a_dim1 + 1], lda, &a[(j + jb) * |
| a_dim1 + 1], lda, &c_b164, &a[j + (j + jb) * |
| a_dim1], lda); |
| i__3 = *n - j - jb + 1; |
| strsm_("Left", "Upper", "Transpose", "Non-unit", &jb, & |
| i__3, &c_b164, &a[j + j * a_dim1], lda, &a[j + (j |
| + jb) * a_dim1], lda); |
| } |
| |
| } |
|
|
| } else { |
|
|
| |
|
|
| i__2 = *n; |
| i__1 = nb; |
| for (j = 1; i__1 < 0 ? j >= i__2 : j <= i__2; j += i__1) { |
|
|
| |
| |
| |
| |
| |
| |
| i__3 = nb, i__4 = *n - j + 1; |
| jb = min(i__3,i__4); |
| i__3 = j - 1; |
| ssyrk_("Lower", "No transpose", &jb, &i__3, &c_b181, &a[j + |
| a_dim1], lda, &c_b164, &a[j + j * a_dim1], lda); |
| spotf2_("Lower", &jb, &a[j + j * a_dim1], lda, info); |
| if (*info != 0) { |
| goto L30; |
| } |
| if (j + jb <= *n) { |
|
|
| |
|
|
| i__3 = *n - j - jb + 1; |
| i__4 = j - 1; |
| sgemm_("No transpose", "Transpose", &i__3, &jb, &i__4, & |
| c_b181, &a[j + jb + a_dim1], lda, &a[j + a_dim1], |
| lda, &c_b164, &a[j + jb + j * a_dim1], lda); |
| i__3 = *n - j - jb + 1; |
| strsm_("Right", "Lower", "Transpose", "Non-unit", &i__3, & |
| jb, &c_b164, &a[j + j * a_dim1], lda, &a[j + jb + |
| j * a_dim1], lda); |
| } |
| |
| } |
| } |
| } |
| goto L40; |
|
|
| L30: |
| *info = *info + j - 1; |
|
|
| L40: |
| return 0; |
|
|
| |
|
|
| } |
|
|
| int spotrs_(char *uplo, integer *n, integer *nrhs, real *a, |
| integer *lda, real *b, integer *ldb, integer *info) |
| { |
| |
| integer a_dim1, a_offset, b_dim1, b_offset, i__1; |
|
|
| |
| extern logical lsame_(char *, char *); |
| static logical upper; |
| extern int strsm_(char *, char *, char *, char *, |
| integer *, integer *, real *, real *, integer *, real *, integer * |
| ), xerbla_(char *, integer *); |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| a_dim1 = *lda; |
| a_offset = 1 + a_dim1; |
| a -= a_offset; |
| b_dim1 = *ldb; |
| b_offset = 1 + b_dim1; |
| b -= b_offset; |
|
|
| |
| *info = 0; |
| upper = lsame_(uplo, "U"); |
| if (! upper && ! lsame_(uplo, "L")) { |
| *info = -1; |
| } else if (*n < 0) { |
| *info = -2; |
| } else if (*nrhs < 0) { |
| *info = -3; |
| } else if (*lda < max(1,*n)) { |
| *info = -5; |
| } else if (*ldb < max(1,*n)) { |
| *info = -7; |
| } |
| if (*info != 0) { |
| i__1 = -(*info); |
| xerbla_("SPOTRS", &i__1); |
| return 0; |
| } |
|
|
| |
|
|
| if (*n == 0 || *nrhs == 0) { |
| return 0; |
| } |
|
|
| if (upper) { |
|
|
| |
| |
| |
| |
| |
|
|
| strsm_("Left", "Upper", "Transpose", "Non-unit", n, nrhs, &c_b164, &a[ |
| a_offset], lda, &b[b_offset], ldb); |
|
|
| |
|
|
| strsm_("Left", "Upper", "No transpose", "Non-unit", n, nrhs, &c_b164, |
| &a[a_offset], lda, &b[b_offset], ldb); |
| } else { |
|
|
| |
| |
| |
| |
| |
|
|
| strsm_("Left", "Lower", "No transpose", "Non-unit", n, nrhs, &c_b164, |
| &a[a_offset], lda, &b[b_offset], ldb); |
|
|
| |
|
|
| strsm_("Left", "Lower", "Transpose", "Non-unit", n, nrhs, &c_b164, &a[ |
| a_offset], lda, &b[b_offset], ldb); |
| } |
|
|
| return 0; |
|
|
| |
|
|
| } |
|
|
|
|