11 #include "tbci/specfun/prototypes.h"
12 #include "tbci/specfun/prototypes2.h"
24 int zexp_(
const double*,
const double*,
double*,
double*);
31 integer*,
double*,
double*,
double*);
32 int zsqrt_(
const double*,
const double*,
double*,
double*);
65 static doublereal sfac, alim, elim, alaz, csqi, atrm, ztai, csqr, ztar;
73 static doublereal aa, bb, ad, cc, ak, bk, ck, dk, az;
77 static doublereal s1i, az3, s2i, s1r, s2r, z3i, z3r, dig, fid, cyi[1],
78 r1m5, fnu, cyr[1], tol, sti, ptr, str;
211 if (*id < 0 || *id > 1) {
214 if (*kode < 1 || *kode > 2) {
223 tol =
max(d__1,1e-18);
247 str = *zr * *zr - *zi * *zi;
248 sti = *zr * *zi + *zi * *zr;
249 z3r = str * *zr - sti * *zi;
250 z3i = str * *zi + sti * *zr;
261 for (k = 1; k <= 25; ++k) {
262 str = (trm1r * z3r - trm1i * z3i) / d1;
263 trm1i = (trm1r * z3i + trm1i * z3r) / d1;
267 str = (trm2r * z3r - trm2i * z3i) / d2;
268 trm2i = (trm2r * z3i + trm2i * z3r) / d2;
272 atrm = atrm * az3 / ad;
276 if (atrm < tol * ad) {
287 *air = s1r * c1 - c2 * (*zr * s2r - *zi * s2i);
288 *aii = s1i * c1 - c2 * (*zr * s2i + *zi * s2r);
292 zsqrt_(zr, zi, &str, &sti);
293 ztar = tth * (*zr * str - *zi * sti);
294 ztai = tth * (*zr * sti + *zi * str);
295 zexp_(&ztar, &ztai, &str, &sti);
296 ptr = *air * str - *aii * sti;
297 *aii = *air * sti + *aii * str;
306 str = *zr * s1r - *zi * s1i;
307 sti = *zr * s1i + *zi * s1r;
308 cc = c1 / (fid + 1.);
309 *air += cc * (str * *zr - sti * *zi);
310 *aii += cc * (str * *zi + sti * *zr);
315 zsqrt_(zr, zi, &str, &sti);
316 ztar = tth * (*zr * str - *zi * sti);
317 ztai = tth * (*zr * sti + *zi * str);
318 zexp_(&ztar, &ztai, &str, &sti);
319 ptr = str * *air - sti * *aii;
320 *aii = str * *aii + sti * *air;
327 fnu = (fid + 1.) / 3.;
342 i__1 =
abs(k1), i__2 =
abs(k2);
351 alim = elim +
max(d__1,-41.45);
368 zsqrt_(zr, zi, &csqr, &csqi);
369 ztar = tth * (*zr * csqr - *zi * csqi);
370 ztai = tth * (*zr * csqi + *zi * csqr);
395 if (aa >= 0. && *zr > 0.) {
407 aa = -aa + alaz * .25;
421 zacai_(&ztar, &ztai, &fnu, kode, &mr, &
c__1, cyr, cyi, &nn, &rl, &tol,
438 aa = -aa - alaz * .25;
445 zbknu_(&ztar, &ztai, &fnu, kode, &
c__1, cyr, cyi, nz, &tol, &elim, &alim);
455 *air = csqr * s1r - csqi * s1i;
456 *aii = csqr * s1i + csqi * s1r;
459 *air = -(*zr * s1r - *zi * s1i);
460 *aii = -(*zr * s1i + *zi * s1r);
468 str = s1r * csqr - s1i * csqi;
469 s1i = s1r * csqi + s1i * csqr;
475 str = -(s1r * *zr - s1i * *zi);
476 s1i = -(s1r * *zi + s1i * *zr);
504 s1r = (*zr * *zr - *zi * *zi) * .5;
TBCI__ cplx< T > log(const TBCI__ cplx< T > &z)
int zacai_(double *, double *, double *, const integer *, integer *, integer *, double *, double *, integer *, double *, double *, double *, double *)
int zbknu_(double *, double *, double *, const integer *, integer *, double *, double *, integer *, double *, double *, double *)
int zsqrt_(const double *, const double *, double *, double *)
int zairy_(const doublereal *zr, const doublereal *zi, const integer *id, const integer *kode, doublereal *air, doublereal *aii, integer *nz, integer *ierr)
T max(const FS_Vector< dims, T > &fv)
doublereal myzabs_(const double *, const double *)
int integer
barf [ba:rf] 2.
int zexp_(const double *, const double *, double *, double *)
double pow_dd(const doublereal *, const doublereal *)
doublereal d1mach_(const integer *)
integer i1mach_(const integer *)