int cairy_wrap_e(npy_cdouble z, npy_cdouble *ai, npy_cdouble *aip, npy_cdouble *bi, npy_cdouble *bip) { int id = 0; int kode = 2; /* Exponential scaling */ int nz, ierr; ai->real = NPY_NAN; ai->imag = NPY_NAN; bi->real = NPY_NAN; bi->imag = NPY_NAN; aip->real = NPY_NAN; aip->imag = NPY_NAN; bip->real = NPY_NAN; bip->imag = NPY_NAN; F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(ai), &nz, &ierr); DO_SFERR("airye:", ai); nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bi), &ierr); DO_SFERR("airye:", bi); id = 1; F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(aip), &nz, &ierr); DO_SFERR("airye:", aip); nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bip), &ierr); DO_SFERR("airye:", bip); return 0; }
npy_cdouble cbesj_wrap_e( double v, npy_cdouble z) { int n = 1; int kode = 2; int nz, ierr; int sign = 1; npy_cdouble cy_j, cy_y, cwork; cy_j.real = NPY_NAN; cy_j.imag = NPY_NAN; cy_y.real = NPY_NAN; cy_y.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy_j; } if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr); DO_SFERR("jve:", &cy_j); if (sign == -1) { if (!reflect_jy(&cy_j, v)) { F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr); DO_SFERR("jve(yve):", &cy_y); cy_j = rotate_jy(cy_j, cy_y, v); } } return cy_j; }
int cairy_wrap(npy_cdouble z, npy_cdouble *ai, npy_cdouble *aip, npy_cdouble *bi, npy_cdouble *bip) { int id = 0; int ierr = 0; int kode = 1; int nz; ai->real = NPY_NAN; ai->imag = NPY_NAN; bi->real = NPY_NAN; bi->imag = NPY_NAN; aip->real = NPY_NAN; aip->imag = NPY_NAN; bip->real = NPY_NAN; bip->imag = NPY_NAN; F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(ai), &nz, &ierr); DO_SFERR("airy:", ai); nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bi), &ierr); DO_SFERR("airy:", bi); id = 1; F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(aip), &nz, &ierr); DO_SFERR("airy:", aip); nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bip), &ierr); DO_SFERR("airy:", bip); return 0; }
npy_cdouble cbesy_wrap_e( double v, npy_cdouble z) { int n = 1; int kode = 2; int nz, ierr; int sign = 1; npy_cdouble cy_y, cy_j, cwork; cy_j.real = NPY_NAN; cy_j.imag = NPY_NAN; cy_y.real = NPY_NAN; cy_y.imag = NPY_NAN; if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr); DO_SFERR("yve:", &cy_y); if (ierr == 2) { if (z.real >= 0 && z.imag == 0) { /* overflow */ cy_y.real = NPY_INFINITY; cy_y.imag = 0; } } if (sign == -1) { if (!reflect_jy(&cy_y, v)) { F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr); DO_SFERR("yv(jv):", &cy_j); cy_y = rotate_jy(cy_y, cy_j, -v); } } return cy_y; }
npy_cdouble cbesj_wrap( double v, npy_cdouble z) { int n = 1; int kode = 1; int nz, ierr; int sign = 1; npy_cdouble cy_j, cy_y, cwork; cy_j.real = NPY_NAN; cy_j.imag = NPY_NAN; cy_y.real = NPY_NAN; cy_y.imag = NPY_NAN; if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr); DO_SFERR("jv:", &cy_j); if (ierr == 2) { /* overflow */ cy_j = cbesj_wrap_e(v, z); cy_j.real *= NPY_INFINITY; cy_j.imag *= NPY_INFINITY; } if (sign == -1) { if (!reflect_jy(&cy_j, v)) { F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr); DO_SFERR("jv(yv):", &cy_y); cy_j = rotate_jy(cy_j, cy_y, v); } } return cy_j; }
npy_cdouble cbesh_wrap2_e( double v, npy_cdouble z) { int n = 1; int kode = 2; int m = 2; int nz, ierr; int sign = 1; npy_cdouble cy; cy.real = NPY_NAN; cy.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy; } if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesh,ZBESH)(CADDR(z), &v, &kode, &m, &n, CADDR(cy), &nz, &ierr); DO_SFERR("hankel2e:", &cy); if (sign == -1) { cy = rotate(cy, -v); } return cy; }
npy_cdouble cbesk_wrap_e( double v, npy_cdouble z) { int n = 1; int kode = 2; int nz, ierr; npy_cdouble cy; cy.real = NPY_NAN; cy.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy; } if (v < 0) { /* K_v == K_{-v} even for non-integer v */ v = -v; } F_FUNC(zbesk,ZBESK)(CADDR(z), &v, &kode, &n, CADDR(cy), &nz, &ierr); DO_SFERR("kve:", &cy); if (ierr == 2) { if (z.real >= 0 && z.imag == 0) { /* overflow */ cy.real = NPY_INFINITY; cy.imag = 0; } } return cy; }
npy_cdouble cbesy_wrap( double v, npy_cdouble z) { int n = 1; int kode = 1; int nz, ierr; int sign = 1; npy_cdouble cy_y, cy_j, cwork; cy_j.real = NPY_NAN; cy_j.imag = NPY_NAN; cy_y.real = NPY_NAN; cy_y.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy_y; } if (v < 0) { v = -v; sign = -1; } if (z.real == 0 && z.imag == 0) { /* overflow */ cy_y.real = -NPY_INFINITY; cy_y.imag = 0; sf_error("yv", SF_ERROR_OVERFLOW, NULL); } else { F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr); DO_SFERR("yv:", &cy_y); if (ierr == 2) { if (z.real >= 0 && z.imag == 0) { /* overflow */ cy_y.real = -NPY_INFINITY; cy_y.imag = 0; } } } if (sign == -1) { if (!reflect_jy(&cy_y, v)) { F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr); DO_SFERR("yv(jv):", &cy_j); cy_y = rotate_jy(cy_y, cy_j, -v); } } return cy_y; }
npy_cdouble cbesi_wrap( double v, npy_cdouble z) { int n = 1; int kode = 1; int sign = 1; int nz, ierr; npy_cdouble cy, cy_k; cy.real = NPY_NAN; cy.imag = NPY_NAN; cy_k.real = NPY_NAN; cy_k.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy; } if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesi,ZBESI)(CADDR(z), &v, &kode, &n, CADDR(cy), &nz, &ierr); DO_SFERR("iv:", &cy); if (ierr == 2) { /* overflow */ if (z.imag == 0 && (z.real >= 0 || v == floor(v))) { if (z.real < 0 && v/2 != floor(v/2)) cy.real = -NPY_INFINITY; else cy.real = NPY_INFINITY; cy.imag = 0; } else { cy = cbesi_wrap_e(v*sign, z); cy.real *= NPY_INFINITY; cy.imag *= NPY_INFINITY; } } if (sign == -1) { if (!reflect_i(&cy, v)) { F_FUNC(zbesk,ZBESK)(CADDR(z), &v, &kode, &n, CADDR(cy_k), &nz, &ierr); DO_SFERR("iv(kv):", &cy_k); cy = rotate_i(cy, cy_k, v); } } return cy; }
int cairy_wrap_e_real(double z, double *ai, double *aip, double *bi, double *bip) { int id = 0; int kode = 2; /* Exponential scaling */ int nz, ierr; npy_cdouble cz, cai, caip, cbi, cbip; cai.real = NPY_NAN; cai.imag = NPY_NAN; cbi.real = NPY_NAN; cbi.imag = NPY_NAN; caip.real = NPY_NAN; caip.imag = NPY_NAN; cbip.real = NPY_NAN; cbip.imag = NPY_NAN; cz.real = z; cz.imag = 0; if (z < 0) { *ai = NPY_NAN; } else { F_FUNC(zairy,ZAIRY)(CADDR(cz), &id, &kode, CADDR(cai), &nz, &ierr); DO_SFERR("airye:", &cai); *ai = cai.real; } nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(cz), &id, &kode, CADDR(cbi), &ierr); DO_SFERR("airye:", &cbi); *bi = cbi.real; id = 1; if (z < 0) { *aip = NPY_NAN; } else { F_FUNC(zairy,ZAIRY)(CADDR(cz), &id, &kode, CADDR(caip), &nz, &ierr); DO_SFERR("airye:", &caip); *aip = caip.real; } nz = 0; F_FUNC(zbiry,ZBIRY)(CADDR(cz), &id, &kode, CADDR(cbip), &ierr); DO_SFERR("airye:", &cbip); *bip = cbip.real; return 0; }
npy_cdouble cbesi_wrap_e( double v, npy_cdouble z) { int n = 1; int kode = 2; int sign = 1; int nz, ierr; npy_cdouble cy, cy_k; cy.real = NPY_NAN; cy.imag = NPY_NAN; cy_k.real = NPY_NAN; cy_k.imag = NPY_NAN; if (npy_isnan(v) || npy_isnan(z.real) || npy_isnan(z.imag)) { return cy; } if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesi,ZBESI)(CADDR(z), &v, &kode, &n, CADDR(cy), &nz, &ierr); DO_SFERR("ive:", &cy); if (sign == -1) { if (!reflect_i(&cy, v)) { F_FUNC(zbesk,ZBESK)(CADDR(z), &v, &kode, &n, CADDR(cy_k), &nz, &ierr); DO_SFERR("ive(kv):", &cy_k); /* adjust scaling to match zbesi */ cy_k = rotate(cy_k, -z.imag/NPY_PI); if (z.real > 0) { cy_k.real *= exp(-2*z.real); cy_k.imag *= exp(-2*z.real); } /* v -> -v */ cy = rotate_i(cy, cy_k, v); } } return cy; }
npy_cdouble cbesh_wrap1( double v, npy_cdouble z) { int n = 1; int kode = 1; int m = 1; int nz, ierr; int sign = 1; npy_cdouble cy; cy.real = NPY_NAN; cy.imag = NPY_NAN; if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesh,ZBESH)(CADDR(z), &v, &kode, &m, &n, CADDR(cy), &nz, &ierr); DO_SFERR("hankel1:", &cy); if (sign == -1) { cy = rotate(cy, v); } return cy; }