20 #include "term_eq.hpp"
22 #include "tensor_impl.hpp"
23 #include <gsl/gsl_sf_bessel.h>
31 double val = gsl_sf_bessel_jl (ll, *so.
val_d) ;
32 bool doder = (so.
der_d == 0x0) ?
false :
true ;
35 (gsl_sf_bessel_jl (ll-1,(*so.
val_d)) - (ll+1)/(*so.
val_d)*val)*(*so.
der_d) ;
36 return Term_eq (dom, val, der) ;
46 cerr <<
"Bessel function only defined for scalars so far..." << endl ;
55 bool doder = (so.
der_t == 0x0) ?
false :
true ;
58 double vv = (*so.
val_t)()(dom)(pos) ;
59 val.
set(pos) = gsl_sf_bessel_jl (ll, vv) ;
62 double dd = (*so.
der_t)()(dom)(pos) ;
64 der.
set(pos) = (cos (vv)/vv - sin(vv)/vv/vv)*dd ;
66 der.
set(pos) = (gsl_sf_bessel_jl (ll-1,vv) - (ll+1)/vv*val(pos))*dd ;
80 return Term_eq (dom, valres, derres) ;
88 cerr <<
"Unknown type of Term_eq in bessel_jl" << endl ;
99 double val = gsl_sf_bessel_yl (ll, *so.
val_d) ;
100 bool doder = (so.
der_d == 0x0) ?
false :
true ;
103 (gsl_sf_bessel_yl (ll-1,(*so.
val_d)) - (ll+1)/(*so.
val_d)*val)*(*so.
der_d) ;
104 return Term_eq (dom, val, der) ;
114 cerr <<
"Bessel function only defined for scalars so far..." << endl ;
123 bool doder = (so.
der_t == 0x0) ?
false :
true ;
126 double vv = (*so.
val_t)()(dom)(pos) ;
127 val.
set(pos) = gsl_sf_bessel_yl (ll, vv) ;
129 double dd = (*so.
der_t)()(dom)(pos) ;
131 der.
set(pos) = (sin (vv)/vv + cos(vv)/vv/vv)*dd ;
133 der.
set(pos) = (gsl_sf_bessel_yl (ll-1,vv) - (ll+1)/vv*val(pos))*dd ;
147 return Term_eq (dom, valres, derres) ;
155 cerr <<
"Unknown type of Term_eq in bessel_yl" << endl ;
167 double jl = gsl_sf_bessel_jl (ll,(*so.
val_d)) ;
168 double jlm1 = (ll==0) ? 0 : gsl_sf_bessel_jl (ll-1 ,(*so.
val_d)) ;
169 double jlm2 = (ll<2) ? 0 : gsl_sf_bessel_jl (ll-2 ,(*so.
val_d)) ;
175 val = jlm1 - (ll+1)/(*so.
val_d)*jl ;
177 bool doder = (so.
der_d == 0x0) ?
false :
true ;
189 der = (jlm2 - double(2*ll+1)*jlm1/(*so.
val_d) +
double((ll+1)*(ll+2))*jl/(*so.
val_d)/(*so.
val_d))*(*so.
der_d) ;
192 return Term_eq (dom, val, der) ;
202 cerr <<
"Bessel function only defined for scalars so far..." << endl ;
211 bool doder = (so.
der_t == 0x0) ?
false :
true ;
214 double vv = (*so.
val_t)()(dom)(pos) ;
216 double jl = gsl_sf_bessel_jl (ll, vv) ;
217 double jlm1 = (ll==0) ? 0 : gsl_sf_bessel_jl (ll-1 , vv) ;
218 double jlm2 = (ll<2) ? 0 : gsl_sf_bessel_jl (ll-2 , vv) ;
221 val.
set(pos) = cos(vv)/vv - sin(vv)/vv/vv ;
224 val.
set(pos) = jlm1 - (ll+1)/vv*jl ;
228 double dd = (*so.
der_t)()(dom)(pos) ;
230 der.
set(pos) = (-sin(vv)/vv -2*cos(vv)/vv/vv + 2*sin(vv)/vv/vv/vv)*dd ;
234 der.
set(pos) = (cos(vv)/vv -3*sin(vv)/vv/vv -6*cos(vv)/vv/vv/vv + 6*sin(vv) /vv/vv/vv/vv)*dd ;
237 der = (jlm2 - double(2*ll+1)*jlm1/vv + double((ll+1)*(ll+2))*jl/vv/vv)*dd ;
254 return Term_eq (dom, valres, derres) ;
262 cerr <<
"Unknown type of Term_eq in bessel_djl" << endl ;
275 double yl = gsl_sf_bessel_yl (ll,(*so.
val_d)) ;
276 double ylm1 = (ll==0) ? 0 : gsl_sf_bessel_yl (ll-1 ,(*so.
val_d)) ;
277 double ylm2 = (ll<2) ? 0 : gsl_sf_bessel_yl (ll-2 ,(*so.
val_d)) ;
283 val = ylm1 - (ll+1)/(*so.
val_d)*yl ;
285 bool doder = (so.
der_d == 0x0) ?
false :
true ;
297 der = (ylm2 - double(2*ll+1)*ylm1/(*so.
val_d) +
double((ll+1)*(ll+2))*yl/(*so.
val_d)/(*so.
val_d))*(*so.
der_d) ;
300 return Term_eq (dom, val, der) ;
310 cerr <<
"Bessel function only defined for scalars so far..." << endl ;
319 bool doder = (so.
der_t == 0x0) ?
false :
true ;
322 double vv = (*so.
val_t)()(dom)(pos) ;
324 double yl = gsl_sf_bessel_yl (ll, vv) ;
325 double ylm1 = (ll==0) ? 0 : gsl_sf_bessel_yl (ll-1 , vv) ;
326 double ylm2 = (ll<2) ? 0 : gsl_sf_bessel_yl (ll-2 , vv) ;
329 val.
set(pos) = sin(vv)/vv + cos(vv)/vv/vv ;
332 val.
set(pos) = ylm1 - (ll+1)/vv*yl ;
336 double dd = (*so.
der_t)()(dom)(pos) ;
338 der.
set(pos) = (cos(vv)/vv -2*sin(vv)/vv/vv - 2*cos(vv)/vv/vv/vv)*dd ;
342 der.
set(pos) = (sin(vv)/vv +3*cos(vv)/vv/vv -6*sin(vv)/vv/vv/vv - 6*cos(vv) /vv/vv/vv/vv)*dd ;
345 der = (ylm2 - double(2*ll+1)*ylm1/vv + double((ll+1)*(ll+2))*yl/vv/vv)*dd ;
362 return Term_eq (dom, valres, derres) ;
370 cerr <<
"Unknown type of Term_eq in bessel_dyl" << endl ;
Dim_array const & get_nbr_points() const
Returns the number of points.
Class that gives the position inside a multi-dimensional Array.
bool inc(int increm, int var=0)
Increments the position of the Index.
The class Scalar does not really implements scalars in the mathematical sense but rather tensorial co...
Val_domain & set_domain(int)
Read/write of a particular Val_domain.
const Domain * get_domain(int i) const
returns a pointer on the domain.
int get_valence() const
Returns the valence.
const Space & get_space() const
Returns the Space.
This class is intended to describe the manage objects appearing in the equations.
Tensor * der_t
Pointer on the variation, if the Term_eq is a Tensor.
const int type_data
Flag describing the type of data :
double * val_d
Pointer on the value, if the Term_eq is a double.
double * der_d
Pointer on the variation if the Term_eq is a double.
Tensor * val_t
Pointer on the value, if the Term_eq is a Tensor.
Class for storing the basis of decompositions of a field and its values on both the configuration and...
double & set(const Index &pos)
Read/write the value of the field in the configuration space.
void std_base()
Sets the standard basis of decomposition.
void allocate_conf()
Allocates the values in the configuration space and destroys the values in the coefficients space.
const Domain * get_domain() const