CLHEP  2.4.7.2
C++ Class Library for High Energy Physics
EllipticIntegral.icc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id:
3 #include "gsl/gsl_sf_ellint.h"
4 #include <cmath>
5 #include <signal.h>
6 #include <assert.h>
7 
8 
9 namespace Genfun {
10 namespace EllipticIntegral {
11 
12 //-----------------------------------------------------------------------------//
13 // FIRST KIND //
14 //-----------------------------------------------------------------------------//
15 
16 FUNCTION_OBJECT_IMP(FirstKind)
17 
18 inline
19 FirstKind::FirstKind():
20  _k("K", 1.0,0.0,1.0)
21 {
22 }
23 
24 inline
25 FirstKind::~FirstKind() {
26 }
27 
28 inline
29 FirstKind::FirstKind(const FirstKind & right):
30  _k(right._k)
31 {
32 }
33 
34 
35 inline
36 Parameter & FirstKind::k() {
37  return _k;
38 }
39 
40 inline
41 const Parameter & FirstKind::k() const {
42  return _k;
43 }
44 
45 
46 inline
47 double FirstKind::operator() (double x) const {
48  gsl_sf_result result;
49  int status = gsl_sf_ellint_F_e(x,_k.getValue(), GSL_PREC_DOUBLE, &result);
50  if (status!=0) {
51  std::cerr << "Warning, GSL function gsl_sf_ellint_F_impl"
52  << " return code" << status << std::endl;
53  raise(SIGFPE);
54  }
55  return result.val;
56 }
57 //-----------------------------------------------------------------------------//
58 // SECOND KIND //
59 //-----------------------------------------------------------------------------//
60 
61 FUNCTION_OBJECT_IMP(SecondKind)
62 
63 inline
64 SecondKind::SecondKind():
65  _k("K", 1.0,0.0,1.0)
66 {
67 }
68 
69 inline
70 SecondKind::~SecondKind() {
71 }
72 
73 inline
74 SecondKind::SecondKind(const SecondKind & right):
75  _k(right._k)
76 {
77 }
78 
79 
80 inline
81 Parameter & SecondKind::k() {
82  return _k;
83 }
84 
85 inline
86 const Parameter & SecondKind::k() const {
87  return _k;
88 }
89 
90 
91 inline
92 double SecondKind::operator() (double x) const {
93  gsl_sf_result result;
94  int status = gsl_sf_ellint_E_e(x,_k.getValue(), GSL_PREC_DOUBLE, &result);
95  if (status!=0) {
96  std::cerr << "Warning, GSL function gsl_sf_ellint_E_impl"
97  << " return code" << status << std::endl;
98  raise(SIGFPE);
99  }
100  return result.val;
101 }
102 //-----------------------------------------------------------------------------//
103 // THIRD KIND //
104 //-----------------------------------------------------------------------------//
105 FUNCTION_OBJECT_IMP(ThirdKind)
106 
107 inline
108 ThirdKind::ThirdKind():
109  _k("K", 1.0,0.0, 1.0),
110  _n("N", 1.0,0.0,10.0)
111 {
112 }
113 
114 inline
115 ThirdKind::~ThirdKind() {
116 }
117 
118 inline
119 ThirdKind::ThirdKind(const ThirdKind & right):
120  _k(right._k),
121  _n(right._n)
122 {
123 }
124 
125 
126 inline
127 Parameter & ThirdKind::k() {
128  return _k;
129 }
130 
131 inline
132 const Parameter & ThirdKind::k() const {
133  return _k;
134 }
135 
136 
137 inline
138 Parameter & ThirdKind::n() {
139  return _n;
140 }
141 
142 inline
143 const Parameter & ThirdKind::n() const {
144  return _n;
145 }
146 
147 
148 inline
149 double ThirdKind::operator() (double x) const {
150  gsl_sf_result result;
151  int status = gsl_sf_ellint_P_e(x,_k.getValue(),_n.getValue(), GSL_PREC_DOUBLE, &result);
152  if (status!=0) {
153  std::cerr << "Warning, GSL function gsl_ellint_P_impl"
154  << " return code" << status << std::endl;
155  raise(SIGFPE);
156  }
157  return result.val;
158 }
159 } // end namespace EllipticIntegral
160 } // end namespace Genfun
Definition: Airy.icc:9