12 #if defined(__GNUC__) && __GNUC__ == 2 && defined(__cplusplus)
16 #include "tbci/specfun/prototypes.h"
17 #include "tbci/specfun/prototypes2.h"
22 #include "tbci/lapack/f2c.h"
30 #define stcom_1 stcom_
135 if (
z_abs(z__) != 0.) {
140 if (
abs(ang) < 1.570796) {
143 ang =
sin(
abs(ang) - 1.570796325) + 1.;
151 z__4.
r = a->
r + nterm, z__4.
i = a->
i;
152 z__3.
r = z__4.
r - 1, z__3.
i = z__4.
i;
153 z__2.
r = z__3.
r * z__->
r - z__3.
i * z__->
i, z__2.
i = z__3.
r * z__->
i +
155 z__7.
r = b->
r + nterm, z__7.
i = b->
i;
156 z__6.
r = z__7.
r - 1, z__6.
i = z__7.
i;
157 z__5.
r = nterm * z__6.
r, z__5.
i = nterm * z__6.
i;
158 z_div(&z__1, &z__2, &z__5);
159 term2 =
z_abs(&z__1);
164 if (a->
r + nterm - 1 > 1.) {
165 if (b->
r + nterm - 1 > 1.) {
166 if (term2 - term1 < 0.) {
179 max__ = max__ * 2 / (
bits_() * .69314718056);
180 i__ = (
integer) (max__ * ang) + 7;
187 chgf_(&z__1, a, b, z__, &i__, lnchf);
188 ret_val->
r = z__1.
r, ret_val->
i = z__1.
i;
219 d__1 = bit * (float)2.;
221 d__1 = bit2 + (float)1.;
223 if (bit - bit2 != (
float)0.) {
288 static doublereal rmax, numi[779], sumi[779], numr[779], sumr[779];
292 static doublereal xi, sigfig, xr, denomi[779], denomr[779], ai2;
294 static doublereal ar2, cr2, qi1[779], qi2[779], xi2, qr1[779], qr2[779],
301 rmax =
pow_di(&c_b8, &i__1);
303 sigfig =
pow_di(&c_b8, &i__1);
306 d__1 = (ar2 - ar) * rmax;
310 d__1 = (ai2 - ai) * rmax;
314 d__1 = (cr2 - cr) * rmax;
318 d__1 = (ci2 - ci) * rmax;
320 xr2 = z__->
r * sigfig;
322 d__1 = (xr2 - xr) * rmax;
324 xi2 =
d_imag(z__) * sigfig;
326 d__1 = (xi2 - xi) * rmax;
335 for (i__ = 0; i__ <= i__1; ++i__) {
340 denomr[i__ + 1] = 0.;
341 denomi[i__ + 1] = 0.;
349 if (sumr[2] < (
float).5) {
351 }
else if (sumi[2] < (
float).5) {
355 d__1 = sumr[*l + 2], d__2 = sumi[*l + 2];
356 mx1 =
max(d__1,d__2);
358 if (numr[2] < (
float).5) {
360 }
else if (numi[2] < (
float).5) {
364 d__1 = numr[*l + 2], d__2 = numi[*l + 2];
365 mx2 =
max(d__1,d__2);
367 if (mx1 - mx2 > (
float)2.) {
369 z__3.
r = ar, z__3.
i = ai;
370 z__4.
r = xr, z__4.
i = xi;
371 z__2.
r = z__3.
r * z__4.
r - z__3.
i * z__4.
i, z__2.
i = z__3.
r *
372 z__4.
i + z__3.
i * z__4.
r;
373 z__6.
r = cr, z__6.
i = ci;
374 z__5.
r = cnt * z__6.
r, z__5.
i = cnt * z__6.
i;
375 z_div(&z__1, &z__2, &z__5);
376 if (
z_abs(&z__1) <= 1.) {
381 cmpmul_(sumr, sumi, &cr, &ci, qr1, qi1, l, &rmax);
382 cmpmul_(sumr, sumi, &cr2, &ci2, qr2, qi2, l, &rmax);
385 cmpadd_(qr1, qi1, qr2, qi2, sumr, sumi, l, &rmax);
386 armult_(sumr, &cnt, sumr, l, &rmax);
387 armult_(sumi, &cnt, sumi, l, &rmax);
388 cmpmul_(denomr, denomi, &cr, &ci, qr1, qi1, l, &rmax);
389 cmpmul_(denomr, denomi, &cr2, &ci2, qr2, qi2, l, &rmax);
392 cmpadd_(qr1, qi1, qr2, qi2, denomr, denomi, l, &rmax);
393 armult_(denomr, &cnt, denomr, l, &rmax);
394 armult_(denomi, &cnt, denomi, l, &rmax);
395 cmpmul_(numr, numi, &ar, &ai, qr1, qi1, l, &rmax);
396 cmpmul_(numr, numi, &ar2, &ai2, qr2, qi2, l, &rmax);
399 cmpadd_(qr1, qi1, qr2, qi2, numr, numi, l, &rmax);
400 cmpmul_(numr, numi, &xr, &xi, qr1, qi1, l, &rmax);
401 cmpmul_(numr, numi, &xr2, &xi2, qr2, qi2, l, &rmax);
404 cmpadd_(qr1, qi1, qr2, qi2, numr, numi, l, &rmax);
405 cmpadd_(sumr, sumi, numr, numi, sumr, sumi, l, &rmax);
411 arydiv_(sumr, sumi, denomr, denomi, &
final, l, lnchf, &rmax, &bit);
412 ret_val->
r =
final.r, ret_val->
i =
final.i;
452 for (i__ = 0; i__ <= i__1; ++i__) {
456 d__1 = a[*l + 1] - b[*l + 1];
458 if (
abs(a[1]) < (float).5 || ediff <= -(*l)) {
461 if (
abs(b[1]) < (float).5 || ediff >= *l) {
467 for (i__ = -1; i__ <= i__1; ++i__) {
474 for (i__ = -1; i__ <= i__1; ++i__) {
481 if ((d__1 = a[-1] - b[-1],
abs(d__1)) < (
float).5) {
485 z__[*l + 2] = a[*l + 1];
489 z__[*l + 2] = b[*l + 1];
494 for (i__ = 1; i__ <= i__1; ++i__) {
495 if (a[i__] > b[i__]) {
496 z__[*l + 2] = a[*l + 1];
499 if (a[i__] < b[i__]) {
500 z__[*l + 2] = b[*l + 1];
514 z__[*l + 2] = a[*l + 1];
515 for (i__ = *l; i__ >= 1; --i__) {
516 z__[i__ + 1] = a[i__] + b[i__] + z__[i__ + 1];
517 if (z__[i__ + 1] >= *rmax) {
518 z__[i__ + 1] -= *rmax;
523 if (z__[1] > (
float).5) {
524 for (i__ = *l; i__ >= 1; --i__) {
525 z__[i__ + 1] = z__[i__];
533 z__[*l + 2] = a[*l + 1];
535 for (i__ = *l; i__ >= i__1; --i__) {
536 z__[i__ + 1] = a[i__] + b[i__ - ediff] + z__[i__ + 1];
537 if (z__[i__ + 1] >= *rmax) {
538 z__[i__ + 1] -= *rmax;
543 for (i__ = ediff; i__ >= 1; --i__) {
544 z__[i__ + 1] = a[i__] + z__[i__ + 1];
545 if (z__[i__ + 1] >= *rmax) {
546 z__[i__ + 1] -= *rmax;
551 if (z__[1] > (
float).5) {
552 for (i__ = *l; i__ >= 1; --i__) {
553 z__[i__ + 1] = z__[i__];
561 z__[*l + 2] = b[*l + 1];
563 for (i__ = *l; i__ >= i__1; --i__) {
564 z__[i__ + 1] = a[i__ + ediff] + b[i__] + z__[i__ + 1];
565 if (z__[i__ + 1] >= *rmax) {
566 z__[i__ + 1] -= *rmax;
571 for (i__ = -ediff; i__ >= 1; --i__) {
572 z__[i__ + 1] = b[i__] + z__[i__ + 1];
573 if (z__[i__ + 1] >= *rmax) {
574 z__[i__ + 1] -= *rmax;
579 if (z__[1] > (
float).5) {
580 for (i__ = *l; i__ >= 1; --i__) {
581 z__[i__ + 1] = z__[i__];
592 for (i__ = *l; i__ >= 1; --i__) {
593 z__[i__ + 1] = a[i__] - b[i__] + z__[i__ + 1];
594 if (z__[i__ + 1] < 0.) {
595 z__[i__ + 1] += *rmax;
603 for (i__ = *l; i__ >= i__1; --i__) {
604 z__[i__ + 1] = a[i__] - b[i__ - ediff] + z__[i__ + 1];
605 if (z__[i__ + 1] < 0.) {
606 z__[i__ + 1] += *rmax;
611 for (i__ = ediff; i__ >= 1; --i__) {
612 z__[i__ + 1] = a[i__] + z__[i__ + 1];
613 if (z__[i__ + 1] < 0.) {
614 z__[i__ + 1] += *rmax;
624 for (i__ = *l; i__ >= 1; --i__) {
625 z__[i__ + 1] = b[i__] - a[i__] + z__[i__ + 1];
626 if (z__[i__ + 1] < 0.) {
627 z__[i__ + 1] += *rmax;
635 for (i__ = *l; i__ >= i__1; --i__) {
636 z__[i__ + 1] = b[i__] - a[i__ + ediff] + z__[i__ + 1];
637 if (z__[i__ + 1] < 0.) {
638 z__[i__ + 1] += *rmax;
643 for (i__ = -ediff; i__ >= 1; --i__) {
644 z__[i__ + 1] = b[i__] + z__[i__ + 1];
645 if (z__[i__ + 1] < 0.) {
646 z__[i__ + 1] += *rmax;
652 if (z__[2] > (
float).5) {
658 if (z__[i__ + 1] < (
float).5 && i__ < *l + 1) {
668 for (j = 1; j <= i__1; ++j) {
669 z__[j + 1] = z__[j + i__];
673 for (j = *l + 2 - i__; j <= i__1; ++j) {
677 z__[*l + 2] = z__[*l + 2] - i__ + 1;
680 for (i__ = -1; i__ <= i__1; ++i__) {
681 c__[i__] = z__[i__ + 1];
685 if (c__[1] < (
float).5) {
724 for (i__ = -1; i__ <= i__1; ++i__) {
725 b2[i__ + 1] = b[i__];
729 aradd_(&a[-1], b2, &c__[-1], l, rmax);
765 z__[0] =
d_sign(&c_b53, b) * a[-1];
767 z__[*l + 2] = a[*l + 1];
769 for (i__ = 0; i__ <= i__1; ++i__) {
773 if (b2 <= 1e-10 || a[1] <= 1e-10) {
778 for (i__ = *l; i__ >= 1; --i__) {
779 z__[i__ + 1] = a[i__] * b2 + z__[i__ + 1];
780 if (z__[i__ + 1] >= *rmax) {
781 d__1 = z__[i__ + 1] / *rmax;
782 carry =
d_int(&d__1);
783 z__[i__ + 1] -= carry * *rmax;
788 if (z__[1] < (
float).5) {
791 for (i__ = *l; i__ >= 1; --i__) {
792 z__[i__ + 1] = z__[i__];
800 for (i__ = -1; i__ <= i__1; ++i__) {
801 c__[i__] = z__[i__ + 1];
804 if (c__[1] < (
float).5) {
837 aradd_(&ar[-1], &br[-1], &cr[-1], l, rmax);
838 aradd_(&ai[-1], &bi[-1], &ci[-1], l, rmax);
867 arsub_(&ar[-1], &br[-1], &cr[-1], l, rmax);
868 arsub_(&ai[-1], &bi[-1], &ci[-1], l, rmax);
896 armult_(&ar[-1], br, d1, l, rmax);
897 armult_(&ai[-1], bi, d2, l, rmax);
898 arsub_(d1, d2, &cr[-1], l, rmax);
899 armult_(&ar[-1], bi, d1, l, rmax);
900 armult_(&ai[-1], br, d2, l, rmax);
901 aradd_(d1, d2, &ci[-1], l, rmax);
931 static doublereal n1, n2, n3, x1, x2, ae[4] , be[4]
934 static doublereal ri10, phi, rr10, dum1, dum2;
943 x = rexp * (ar[*l + 1] - 2);
947 x = rexp * (ai[*l + 1] - 2);
951 d__1 = ar[1] * *rmax * *rmax + ar[2] * *rmax + ar[3];
952 dum1 =
d_sign(&d__1, &ar[-1]);
953 d__1 = ai[1] * *rmax * *rmax + ai[2] * *rmax + ai[3];
954 dum2 =
d_sign(&d__1, &ai[-1]);
955 dum1 *=
pow_dd(&c_b65, &rr10);
956 dum2 *=
pow_dd(&c_b65, &ri10);
957 z__1.
r = dum1, z__1.
i = dum2;
961 x = rexp * (br[*l + 1] - 2);
965 x = rexp * (bi[*l + 1] - 2);
969 d__1 = br[1] * *rmax * *rmax + br[2] * *rmax + br[3];
970 dum1 =
d_sign(&d__1, &br[-1]);
971 d__1 = bi[1] * *rmax * *rmax + bi[2] * *rmax + bi[3];
972 dum2 =
d_sign(&d__1, &bi[-1]);
973 dum1 *=
pow_dd(&c_b65, &rr10);
974 dum2 *=
pow_dd(&c_b65, &ri10);
975 z__1.
r = dum1, z__1.
i = dum2;
983 emult_(ce, &ce[2], ce, &ce[2], &n1, &e1);
984 emult_(&ce[1], &ce[3], &ce[1], &ce[3], &n2, &e2);
985 eadd_(&n1, &e1, &n2, &e2, &n3, &e3);
991 }
else if (e1 < -74.) {
994 x1 = n1 *
pow_dd(&c_b65, &e1);
997 d__1 = (
log(n3) + e3 *
log(10.)) * .5;
998 z__1.
r = d__1, z__1.
i = phi;
999 c__->
r = z__1.
r, c__->
i = z__1.
i;
1020 if (
abs(*nf) >= 10.) {
1042 if (
abs(*nf) < 1. && *nf != 0.) {
1071 }
else if (ediff < -36.) {
1075 *nf = *n1 *
pow_dd(&c_b65, &ediff) + *n2;
1078 if (
abs(*nf) < 10.) {
1085 if (
abs(*nf) >= 1. || *nf == 0.) {
1115 eadd_(n1, e1, &d__1, e2, nf, ef);
1141 if (
abs(cae[3]) < 10.) {
1148 if (
abs(cae[3]) >= 1. || cae[3] == 0.) {
1158 if (
abs(cae[4]) < 10.) {
1165 if (
abs(cae[4]) >= 1. || cae[4] == 0.) {
1198 if (cae[5] > 75. || cae[6] > 75.) {
1199 cn->
r = 1e75, cn->
i = 1e75;
1200 }
else if (cae[6] < -75.) {
1201 d__1 = cae[3] *
pow_dd(&c_b65, &cae[5]);
1202 z__1.
r = d__1, z__1.
i = 0.;
1203 cn->
r = z__1.
r, cn->
i = z__1.
i;
1205 d__1 = cae[3] *
pow_dd(&c_b65, &cae[5]);
1206 d__2 = cae[4] *
pow_dd(&c_b65, &cae[6]);
1207 z__1.
r = d__1, z__1.
i = d__2;
1208 cn->
r = z__1.
r, cn->
i = z__1.
i;
1235 emult_(&a[3], &a[5], &b[3], &b[5], &n1, &e1);
1236 emult_(&a[4], &a[6], &b[4], &b[6], &n2, &e2);
1237 esub_(&n1, &e1, &n2, &e2, c2, &c2[2]);
1238 emult_(&a[3], &a[5], &b[4], &b[6], &n1, &e1);
1239 emult_(&a[4], &a[6], &b[3], &b[5], &n2, &e2);
1240 eadd_(&n1, &e1, &n2, &e2, &c__[4], &c__[6]);
1273 emult_(&b[3], &b[5], &b[3], &b[5], &n1, &e1);
1274 emult_(&b[4], &b[6], &b[4], &b[6], &n2, &e2);
1275 eadd_(&n1, &e1, &n2, &e2, &n3, &e3);
1276 ediv_(c2, &c2[2], &n3, &e3, &c__[3], &c__[5]);
1277 ediv_(&c2[1], &c2[3], &n3, &e3, &c__[4], &c__[6]);
1284 static char fmt_300[] =
"(1x,\002 RESULT FROM CONHYP=\002,1p,2d25.12)";
1285 static char fmt_301[] =
"(1x,\002 EXPECTED RESULT=\002,3x,1p,2d25.12)";
1301 static cilist io___88 = { 0, 5, 0, 0, 0 };
1302 static cilist io___90 = { 0, 6, 0, 0, 0 };
1303 static cilist io___91 = { 0, 5, 0, 0, 0 };
1304 static cilist io___93 = { 0, 6, 0, 0, 0 };
1305 static cilist io___94 = { 0, 5, 0, 0, 0 };
1306 static cilist io___96 = { 0, 6, 0, 0, 0 };
1307 static cilist io___97 = { 0, 5, 0, 0, 0 };
1308 static cilist io___99 = { 0, 6, 0, 0, 0 };
1309 static cilist io___100 = { 0, 5, 0, 0, 0 };
1310 static cilist io___102 = { 0, 6, 0, 0, 0 };
1311 static cilist io___104 = { 0, 6, 0, fmt_300, 0 };
1312 static cilist io___107 = { 0, 6, 0, fmt_301, 0 };
1361 conhyp_(&z__1, &a, &b, &z__, &lnchf, &ip);
1362 chf.
r = z__1.
r, chf.
i = z__1.
i;
1366 ar = 2.31145634403113e-12;
1367 ai = -1.96169649634905e-11;
int ecpdiv_(doublereal *a, doublereal *b, doublereal *c__)
double d_lg10(const doublereal *)
double d_sign(const doublereal *, const doublereal *)
const Vector< T > const Vector< T > & x
double z_abs(const doublecomplex *)
integer do_lio(integer *, integer *, char *, ftnlen)
TBCI__ cplx< T > log(const TBCI__ cplx< T > &z)
int conv21_(doublereal *cae, doublecomplex *cn)
double atan2(const double, const double)
int armult_(const doublereal *a, const doublereal *b, doublereal *c__, const integer *l, const doublereal *rmax)
int ediv_(doublereal *n1, doublereal *e1, doublereal *n2, doublereal *e2, doublereal *nf, doublereal *ef)
int eadd_(doublereal *n1, doublereal *e1, doublereal *n2, doublereal *e2, doublereal *nf, doublereal *ef)
int aradd_(const doublereal *a, const doublereal *b, doublereal *c__, const integer *l, const doublereal *rmax)
T max(const FS_Vector< dims, T > &fv)
int ecpmul_(doublereal *a, doublereal *b, doublereal *c__)
integer do_fio(integer *, char *, ftnlen)
int cmpsub_(doublereal *ar, doublereal *ai, doublereal *br, doublereal *bi, doublereal *cr, doublereal *ci, integer *l, doublereal *rmax)
int arydiv_(const doublereal *ar, const doublereal *ai, const doublereal *br, const doublereal *bi, doublecomplex *c__, const integer *l, const integer *lnchf, const doublereal *rmax, const integer *bit)
double d_int(const doublereal *)
int conv12_(doublecomplex *cn, doublereal *cae)
TBCI__ cplx< T > sin(const TBCI__ cplx< T > &z)
int s_stop(const char *, ftnlen)
double pow_di(const doublereal *, const integer *)
int integer
barf [ba:rf] 2.
int esub_(doublereal *n1, doublereal *e1, doublereal *n2, doublereal *e2, doublereal *nf, doublereal *ef)
double d_imag(const doublecomplex *)
double d_nint(const doublereal *)
void conhyp_(doublecomplex *ret_val, const doublecomplex *a, const doublecomplex *b, const doublecomplex *z, const int *lnchf, const int *ip)
double pow_dd(const doublereal *, const doublereal *)
doublereal store_(doublereal *x)
int arsub_(const doublereal *a, const doublereal *b, doublereal *c__, const integer *l, const doublereal *rmax)
const Vector< T > Vector< T > Vector< T > Vector< T > & y
int cmpmul_(const doublereal *ar, const doublereal *ai, const doublereal *br, const doublereal *bi, doublereal *cr, doublereal *ci, const integer *l, const doublereal *rmax)
int emult_(doublereal *n1, doublereal *e1, doublereal *n2, doublereal *e2, doublereal *nf, doublereal *ef)
const unsigned TMatrix< T > const Matrix< T > * a
void z_div(doublecomplex *, const doublecomplex *, const doublecomplex *)
VOID chgf_(doublecomplex *ret_val, const doublecomplex *a, const doublecomplex *b, const doublecomplex *z__, const integer *l, const integer *lnchf)
int cmpadd_(const doublereal *ar, const doublereal *ai, const doublereal *br, const doublereal *bi, doublereal *cr, doublereal *ci, const integer *l, const doublereal *rmax)