Example #1
0
Py_complex cbesy_wrap_e( double v, Py_complex z) {
  int n = 1;
  int kode = 2;
  int nz, ierr;
  int sign = 1;
  Py_complex cy_y, cy_j, cwork;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr);
  DO_MTHERR("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_MTHERR("yv(jv):", &cy_j);
      cy_y = rotate_jy(cy_y, cy_j, -v);
    }
  }
  return cy_y;
}
Example #2
0
Py_complex cbesj_wrap( double v, Py_complex z) {
  int n = 1;
  int kode = 1;
  int nz, ierr;
  int sign = 1;
  Py_complex cy_j, cy_y, cwork;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesj,ZBESJ)(CADDR(z), &v,  &kode, &n, CADDR(cy_j), &nz, &ierr);
  DO_MTHERR("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_MTHERR("jv(yv):", &cy_y);
      cy_j = rotate_jy(cy_j, cy_y, v);
    }
  }
  return cy_j;
}
Example #3
0
Py_complex cbesi_wrap_e( double v, Py_complex z) {
  int n = 1;
  int kode = 2;
  int sign = 1;
  int nz, ierr;
  Py_complex cy, cy_k;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesi,ZBESI)(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
  DO_MTHERR("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_MTHERR("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;
}
Example #4
0
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;
  Py_complex cz, cai, caip, cbi, cbip;

  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_MTHERR("airye:", &cai);
      *ai = cai.real;
  }
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(cz), &id, &kode, CADDR(cbi), &ierr);
  DO_MTHERR("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_MTHERR("airye:", &caip);
      *aip = caip.real;
  }
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(cz), &id, &kode, CADDR(cbip), &ierr);
  DO_MTHERR("airye:", &cbip);
  *bip = cbip.real;
  return 0;
}
Example #5
0
int cairy_wrap_e(Py_complex z, Py_complex *ai, Py_complex *aip, Py_complex *bi, Py_complex *bip) {
  int id = 0;
  int kode = 2;        /* Exponential scaling */
  int nz, ierr;

  F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(ai), &nz, &ierr);
  DO_MTHERR("airye:", ai);
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bi), &ierr);
  DO_MTHERR("airye:", bi);
  
  id = 1;
  F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(aip), &nz, &ierr);
  DO_MTHERR("airye:", aip);
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bip), &ierr);
  DO_MTHERR("airye:", bip);
  return 0;
}
Example #6
0
/**
 * Modified Bessel function of the third kind
 * multiplied by exp(x)
 *
 * @param x a real number
 * @param v a real number, the order of the Bessel function
 *
 */
double pnl_bessel_k_scaled( double v, double x ) 
{
  int nz, ierr;
  dcomplex cy, z = Complex (x, 0.);
  int n = 1;
  int kode = 2;
  double nu = fabs (v);
  pnl_zbesk(CADDR(z), &nu, &kode, &n, CADDR(cy), &nz, &ierr);
  DO_MTHERR("kve:");
  return cy.r;
}
Example #7
0
/**
 * Complex Modified Bessel function of the third kind
 * multiplied by exp(z)
 *
 * @param z a complex number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_complex_bessel_k_scaled( double v, dcomplex z ) 
{
  int nz, ierr;
  dcomplex cy;
  int n = 1;
  int kode = 2;
  double nu = fabs (v);
  pnl_zbesk(CADDR(z), &nu, &kode, &n, CADDR(cy), &nz, &ierr);
  DO_MTHERR("kve:");
  return cy;
}
Example #8
0
int cairy_wrap(Py_complex z, Py_complex *ai, Py_complex *aip, Py_complex *bi, Py_complex *bip) {
  int id = 0;
  int ierr = 0;
  int kode = 1;
  int nz;

  F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(ai), &nz, &ierr);
  DO_MTHERR("airy:", ai);
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bi), &ierr);
  DO_MTHERR("airy:", bi);
  
  id = 1;
  F_FUNC(zairy,ZAIRY)(CADDR(z), &id, &kode, F2C_CST(aip), &nz, &ierr);
  DO_MTHERR("airy:", aip);
  nz = 0;
  F_FUNC(zbiry,ZBIRY)(CADDR(z), &id, &kode, F2C_CST(bip), &ierr);
  DO_MTHERR("airy:", bip);
  return 0;
}
Example #9
0
Py_complex cbesj_wrap_e( double v, Py_complex z) {
  int n = 1;
  int kode = 2;
  int nz, ierr;
  int sign = 1;
  Py_complex cy_j, cy_y, cwork;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr);
  DO_MTHERR("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_MTHERR("jve(yve):", &cy_y);
      cy_j = rotate_jy(cy_j, cy_y, v);
    }
  }
  return cy_j;
}
Example #10
0
Py_complex cbesi_wrap( double v, Py_complex z) {
  int n = 1;
  int kode = 1;
  int sign = 1;
  int nz, ierr;
  Py_complex cy, cy_k;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesi,ZBESI)(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
  DO_MTHERR("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_MTHERR("iv(kv):", &cy_k);
      cy = rotate_i(cy, cy_k, v);
    }
  }

  return cy;
}
Example #11
0
/**
 * Complex Hankel function of the second kind
 * multiplied by Cexp( I * z)
 *
 * @param z a complex number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_complex_bessel_h2_scaled( double v, dcomplex z ) 
{
  int nz, ierr;
  dcomplex cy;
  int n = 1, kode = 2, m = 2;
  if (v >= 0)
    {
      pnl_zbesh(CADDR(z), &v, &kode, &m, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("hankel2e:");
    }
  else
    {
      cy = pnl_complex_bessel_h2_scaled (-v, z );
      cy = Cmul (cy, CIexp (M_PI * v) );
    }
  return cy;
}
Example #12
0
Py_complex cbesh_wrap2_e( double v, Py_complex z) {
  int n = 1;
  int kode = 2;
  int m = 2;
  int nz, ierr;
  int sign = 1;
  Py_complex cy;

  if (v < 0) {
    v = -v;
    sign = -1;
  }
  F_FUNC(zbesh,ZBESH)(CADDR(z), &v, &kode, &m, &n, CADDR(cy), &nz, &ierr);
  DO_MTHERR("hankel2e:", &cy);
  if (sign == -1) {
    cy = rotate(cy, -v);
  }
  return cy;
}
Example #13
0
/**
 * Hankel function of the second kind
 * multiplied by Cexp( I * x)
 *
 * @param x a real number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_bessel_h2_scaled( double v, double x ) 
{
  int nz, ierr;
  dcomplex cy, z = Complex (x, 0.);
  int n = 1;
  int kode = 2;
  int m = 2;
  if (v >= 0)
    {
      pnl_zbesh(CADDR(z), &v,  &kode, &m, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("hankel2:");
    }
  else
    {
      cy = pnl_bessel_h2_scaled (-v, x );
      cy = Cmul (cy, CIexp (M_PI * v) );
    }
  return cy;
}
Example #14
0
/**
 * Bessel function of the first kind
 * same as pnl_bessel_j
 *
 * @param x a real number
 * @param v a real number, the order of the Bessel function
 *
 */
double pnl_bessel_j_scaled ( double v, double x ) 
{
  int nz, ierr;
  dcomplex cy, z = Complex (x, 0.);
  int n = 1, kode = 2;
  if (v >= 0)
    {
      pnl_zbesj(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("jv:");
      return cy.r;
    }
  else
    {
      double  aux1, aux2;
      aux1 = cos (M_PI * v) * pnl_bessel_j_scaled (-v, x);
      aux2 = sin (M_PI * v) * pnl_bessel_y_scaled (-v, x);
      return aux1 +aux2;
    }
}
Example #15
0
/**
 * Modified Bessel function of the first kind
 * divided by exp(|x|)
 *
 * @param x a real number
 * @param v a real number, the order of the Bessel function
 *
 */
double pnl_bessel_i_scaled( double v, double x ) 
{
  int nz, ierr;
  dcomplex cy, z = Complex (x, 0.);
  int n = 1, kode = 2;
  if (v >= 0)
    {
      pnl_zbesi(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("ive:");
      return cy.r;
    }
  else
    {
      double  aux1, aux2;
      aux1 = pnl_bessel_i_scaled (-v, x);
      aux2 = M_2_PI * sin (M_PI * -v) * pnl_bessel_k (-v, x) * exp(-fabs(x));
      return aux1 + aux2;
    }
}
Example #16
0
/**
 *   Bessel function of the second kind
 *
 * @param x a real number
 * @param v a real number, the order of the Bessel function
 *
 */  
double pnl_bessel_y( double v, double x ) 
{
  int nz, ierr;
  dcomplex cy, z, cwork;
  int n = 1, kode = 1;
  z = Complex (x, 0.);
  if (v >= 0)
    {
      pnl_zbesy(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, CADDR(cwork), &ierr);
      DO_MTHERR("yv:");
      return cy.r;
    }
  else
    {
      double  aux1, aux2;
      aux1 = cos (M_PI * v) * pnl_bessel_y (-v, x);
      aux2 = sin (M_PI * -v) * pnl_bessel_j (-v, x);
      return aux1 +aux2;
    }
}
Example #17
0
/**
 * Complex Modified Bessel function of the first kind
 * divided by exp(|Creal(z)|)
 *
 * @param z a complex number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_complex_bessel_i_scaled( double v, dcomplex z ) 
{
  int nz, ierr;
  dcomplex cy;
  int n = 1;
  int kode = 2;
  if (v >= 0)
    {
      pnl_zbesi(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("ive:");
    }
  else
    {
      dcomplex aux1, aux2;
      aux1 = pnl_complex_bessel_i_scaled (-v, z);
      aux2 = pnl_complex_bessel_k (-v, z);
      aux2 = CRmul (aux2, M_2_PI * sin(M_PI * -v) * exp ( -fabs ( Creal(z) ) ));
      cy = Cadd (aux1, aux2);
    }
  return cy;
}
Example #18
0
Py_complex cbesk_wrap_e( double v, Py_complex z) {
  int n = 1;
  int kode = 2;
  int nz, ierr;
  Py_complex 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_MTHERR("kve:", &cy);
  if (ierr == 2) {
    if (z.real >= 0 && z.imag == 0) {
      /* overflow */
      cy.real = NPY_INFINITY;
      cy.imag = 0;
    }
  }

  return cy;
}
Example #19
0
/**
 * Complex  Bessel function of the first kind
 *
 * @param z a complex number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_complex_bessel_j( double v, dcomplex z ) 
{
  int nz, ierr;
  dcomplex cy;
  int n = 1;
  int kode = 1;
  if (v >= 0)
    {
      pnl_zbesj(CADDR(z), &v,  &kode, &n, CADDR(cy), &nz, &ierr);
      DO_MTHERR("jv:");
    }
  else
    {
      dcomplex aux1, aux2;
      aux1 = pnl_complex_bessel_j (-v, z);
      aux1 = CRmul (aux1, cos(M_PI * v));
      aux2 = pnl_complex_bessel_y (-v, z);
      aux2 = CRmul (aux2, sin(M_PI * v));
      cy = Cadd (aux1, aux2);
    }
  return cy;
}
Example #20
0
/**
 * Complex  Bessel function of the second kind
 * divided by  exp(|Imag(z)|)
 *
 * @param z a complex number
 * @param v a real number, the order of the Bessel function
 *
 */
dcomplex pnl_complex_bessel_y_scaled( double v, dcomplex z ) 
{
  int nz, ierr;
  dcomplex cy, cwork;
  int n = 1;
  int kode = 2;
  if (v >= 0)
    {
      pnl_zbesy(CADDR(z), &v, &kode, &n, CADDR(cy), &nz, CADDR(cwork), &ierr);
      DO_MTHERR("yve:");
    }
  else
    {
      dcomplex aux1, aux2;
      aux1 = pnl_complex_bessel_y_scaled (-v, z);
      aux1 = CRmul (aux1, cos(M_PI * v));
      aux2 = pnl_complex_bessel_j_scaled (-v, z);
      aux2 = CRmul (aux2, sin(M_PI * -v));
      cy = Cadd (aux1, aux2);
    }
  return cy;
}