CLHEP  2.4.7.2
C++ Class Library for High Energy Physics
Bessel.icc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id:
3 #include "gsl/gsl_sf_bessel.h"
4 #include <cmath>
5 #include <signal.h>
6 #include <assert.h>
7 
8 
9 #define GF_DBL_EPSILON 2.2204460492503131e-16
10 
11 
12 namespace Genfun {
13 namespace IntegralOrder {
14 
15 FUNCTION_OBJECT_IMP(Bessel)
16 
17 inline
18 Bessel::Bessel(Type type, unsigned int order):
19  _type(type),_order(order)
20 {
21 }
22 
23 inline
24 Bessel::~Bessel() {
25 }
26 
27 inline
28 Bessel::Bessel(const Bessel & right):
29  _type(right._type),
30  _order(right._order)
31 {
32 }
33 
34 inline
35 double Bessel::operator() (double x) const {
36  gsl_sf_result result;
37  if (_type==J) {
38  int status = gsl_sf_bessel_Jn_e(_order, x, &result);
39  if (status!=0) {
40  std::cerr << "Warning, GSL function gsl_sf_bessel_Jn_impl"
41  << " return code" << status << std::endl;
42  raise(SIGFPE);
43  }
44  return result.val;
45  }
46  else if (_type==Y) {
47  int status = gsl_sf_bessel_Yn_e(_order, x, &result);
48  if (status!=0) {
49  std::cerr << "Warning, GSL function gsl_sf_bessel_Yn_impl"
50  << " return code" << status << std::endl;
51  raise(SIGFPE);
52  }
53  return result.val;
54  }
55  else {
56  return 0;
57  }
58 }
59 
60 } // end namespace IntegralOrder
61 
62 namespace FractionalOrder {
63 
64 FUNCTION_OBJECT_IMP(Bessel)
65 
66 inline
67 Bessel::Bessel(Type type):
68  _type(type),
69  _order("Order", 0.0,-10,10)
70 {
71 }
72 
73 inline
74 Bessel::~Bessel() {
75 }
76 
77 inline
78 Bessel::Bessel(const Bessel & right):
79  _type(right._type),
80  _order(right._order)
81 {
82 }
83 
84 
85 inline
86 Parameter & Bessel::order() {
87  return _order;
88 }
89 
90 inline
91 const Parameter & Bessel::order() const {
92  return _order;
93 }
94 
95 
96 inline
97 double Bessel::operator() (double x) const {
98  gsl_sf_result result;
99  if (_type==J) {
100  int status = gsl_sf_bessel_Jnu_e(_order.getValue(), x, &result);
101  if (status!=0) {
102  std::cerr << "Warning, GSL function gsl_sf_bessel_Jnu_impl"
103  << " return code" << status << std::endl;
104  raise(SIGFPE);
105  }
106  return result.val;
107  }
108  else if (_type==Y) {
109  int status = gsl_sf_bessel_Ynu_e(_order.getValue(), x, &result);
110  if (status!=0) {
111  std::cerr << "Warning, GSL function gsl_sf_bessel_Ynu_impl"
112  << " return code" << status << std::endl;
113  raise(SIGFPE);
114  }
115  return result.val;
116  }
117  return result.val;
118 }
119 
120 
121 } // end namespace FractionalOrder
122 
123 } // end namespace Genfun
Definition: Airy.icc:9