00001 #ifndef INCLUDE__SF_H
00002 #define INCLUDE__SF_H
00003 #include <gsl/gsl_sf.h>
00004 #include <cstdlib>
00005 #include <cmath>
00006 #include <complex>
00007 #include "misc.h"
00008
00009 using namespace std;
00010
00011 namespace SpherHarmonics{
00012 double legendre(int ell,double ctheta);
00013 complex<double> Ylm(int ell,int m,double theta,double phi);
00014
00015 double legendre(int ell,double ctheta);
00016
00017 complex <double> Ylm(int ell, int m, double x, double y, double z);
00018 double ReYlm(int ell, int m, double theta, double phi);
00019 double ReYlm(int ell, int m, double x, double y, double z);
00020 double ImYlm(int ell, int m, double theta, double phi);
00021 double ImYlm(int ell, int m, double x, double y, double z);
00022
00023 };
00024
00025 namespace Bessel{
00026 double J0(double x);
00027 double J1(double x);
00028 double Jn(int n, double x);
00029
00030 double K0(double x);
00031 double K1(double x);
00032 double Kn(int n, double x);
00033
00034 double Y0(double x);
00035 double Y1(double x);
00036 double Yn(int n, double x);
00037
00038 double I0(double x);
00039 double I1(double x);
00040 double In(int n, double x);
00041
00042 double j0(double x);
00043 double j1(double x);
00044 double jn(int n, double x);
00045
00046 double y0(double x);
00047 double y1(double x);
00048 double yn(int n, double x);
00049
00050 complex<double> h0(double x);
00051 complex<double> h1(double x);
00052 complex<double> hn(int n, double x);
00053
00054 complex<double> hstar0(double x);
00055 complex<double> hstar1(double x);
00056 complex<double> hstarn(int n, double x);
00057
00058 void CalcJN_real(int ell,double x,double &jl,double &nl,double &jlprime,double &nlprime);
00059 void CalcJN_imag(int ell,double x,double &jl,double &nl,double &jlprime,double &nlprime);
00060
00061 };
00062
00063 namespace CoulWave{
00064
00065 void GetFG(int L,double x,double eta,double *FL,double *GL);
00066 void GetFGprime(int L,double x,double eta,double *FL,double *GL,
00067 double *FLprime,double *GLprime);
00068 complex<double> CWincoming(int ell,double x,double eta);
00069 complex<double> CWoutgoing(int ell,double x,double eta);
00070 complex<double> cgamma(complex<double> cx);
00071 void phaseshift_CoulombCorrect(int ell,double q,double eta,
00072 double &delta,double &ddeltadq);
00073
00074 complex<double> cw2_small_r(int l,complex<double> r,complex<double> eta);
00075 double dgamma(int mm);
00076 complex<double> cw2_CWincoming(int ell, complex<double> cx,
00077 complex<double> ceta);
00078 void GetFGprime_ComplexQ(int ell, complex<double> cx, complex<double> ceta,
00079 double *FL, double *GL, double *FLprime, double *GLprime);
00080 void GetFGprime_ImagQ(int ell, double x, double eta,
00081 double *FL, double *GL, double *FLprime, double *GLprime);
00082 void SphericalCW(int ell,double x,double eta,double *FL,double *GL);
00083 void SphericalCWprime(int L,double x,double eta,double *FL,double *GL,
00084 double *FLprime,double *GLprime);
00085
00086
00087 };
00088
00090 class CCHCalc{
00091 public:
00092 CCHCalc();
00093 ~CCHCalc();
00094 double GetAFromE(int lx,int ly,int lz,double ex,double ey,double ez);
00095 double GetAFromThetaPhi(int lx,int ly,int lz,double theta,double phi);
00096
00098 double GetOverlap(int lx,int ly,int lz,int lxprime,int lyprime,int lzprime);
00102 double GetOverlap0(int lx,int ly,int lz,int lxprime,int lyprime,int lzprime);
00103
00105 double GetMFromE(int lx,int ly,int lz,double ex,double ey,double ez);
00106 double GetMFromThetaPhi(int lx,int ly,int lz,double theta,double phi);
00107
00108
00109 double Factorial(int n);
00110 double DoubleFactorial(int n);
00111 double Binomial(int lx,int ly);
00112 double Trinomial(int lx,int ly,int lz);
00113
00114 private:
00115 static int LMAXFACT;
00116 static double *fact;
00117 static double *doublefact;
00118 static double **binomial;
00119 static double *****overlap;
00120 static int INITIALIZED;
00121 void InitStaticData();
00122 void ClearStaticData();
00123
00124 void iswitch(int &i,int &j);
00125 void overlapinit(int lx,int ly,int lz);
00126
00127 };
00128
00129 #endif
00130