5 #ifndef __HYPERSPHERICAL__
6 #define __HYPERSPHERICAL__
9 #define _HYPER_OVERFLOW_ 1e200
10 #define _ONE_OVER_HYPER_OVERFLOW_ 1e-200
11 #define _HYPER_SAFETY_ 1e-5
12 #define _TRIG_PRECISSION_ 1e-7
13 #define _HYPER_BLOCK_ 8
14 #define _HYPER_CHUNK_ 16
15 #define _TWO_OVER_THREE_ 0.666666666666666666666666666667e0
16 #define _HIS_BYTE_ALIGNMENT_ 16
18 typedef struct HypersphericalInterpolationStructure{
25 double * chi_at_phimin;
34 struct WKB_parameters{
47 int hyperspherical_HIS_create(
int K,
56 HyperInterpStruct *pHIS,
57 ErrorMsg error_message);
59 int hyperspherical_HIS_free(HyperInterpStruct *pHIS, ErrorMsg error_message);
60 int hyperspherical_forwards_recurrence(
int K,
67 double *one_over_sqrtK,
69 int hyperspherical_forwards_recurrence_chunk(
int K,
72 double * __restrict__ x,
73 double * __restrict__ sinK,
74 double * __restrict__ cotK,
76 double * __restrict__ sqrtK,
77 double * __restrict__ one_over_sqrtK,
78 double * __restrict__ PhiL);
79 int hyperspherical_backwards_recurrence(
int K,
86 double *one_over_sqrtK,
89 int hyperspherical_backwards_recurrence_chunk(
int K,
92 double * __restrict__ x,
93 double * __restrict__ sinK,
94 double * __restrict__ cotK,
96 double * __restrict__ sqrtK,
97 double * __restrict__ one_over_sqrtK,
98 double * __restrict__ PhiL);
99 int hyperspherical_get_xmin(HyperInterpStruct *pHIS,
104 int hyperspherical_WKB(
int K,
int l,
double beta,
double y,
double *Phi);
105 int hyperspherical_WKB_vec(
int l,
110 int ClosedModY(
int l,
int beta,
double *y,
int * phisign,
int * dphisign);
111 int get_CF1(
int K,
int l,
double beta,
double cotK,
double *CF,
int *isign);
112 int CF1_from_Gegenbauer(
int l,
int beta,
double sinK,
double cotK,
double *CF);
113 double airy_cheb_approx(
double z);
114 double coef1(
double z);
115 double coef2(
double z);
116 double coef3(
double z);
117 double coef4(
double z);
118 double cheb(
double x,
int n,
const double A[]);
119 double get_value_at_small_phi(
int K,
int l,
double beta,
double Phi);
121 double PhiWKB_minus_phiminabs(
double x,
void *param);
123 int hyperspherical_get_xmin_from_Airy(
int K,
132 int fzero_ridder(
double (*func)(
double,
void *),
143 int HypersphericalExplicit(
int K,
int l,
double beta,
double x,
double *Phi);
145 int hyperspherical_get_xmin_from_approx(
int K,
153 size_t hyperspherical_HIS_size(
int nl,
int nx);
154 int hyperspherical_update_pointers(HyperInterpStruct *pHIS_local,
155 void * HIS_storage_shared);
157 int hyperspherical_Hermite_interpolation_vector(HyperInterpStruct *pHIS,
165 int hyperspherical_Hermite3_interpolation_vector_Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi, ErrorMsg error_message);
166 int hyperspherical_Hermite3_interpolation_vector_dPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi, ErrorMsg error_message);
167 int hyperspherical_Hermite3_interpolation_vector_d2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *d2Phi, ErrorMsg error_message);
168 int hyperspherical_Hermite3_interpolation_vector_PhidPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi, ErrorMsg error_message);
169 int hyperspherical_Hermite3_interpolation_vector_Phid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *d2Phi, ErrorMsg error_message);
170 int hyperspherical_Hermite3_interpolation_vector_dPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi,
double *d2Phi, ErrorMsg error_message);
171 int hyperspherical_Hermite3_interpolation_vector_PhidPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi,
double *d2Phi, ErrorMsg error_message);
172 int hyperspherical_Hermite4_interpolation_vector_Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi, ErrorMsg error_message);
173 int hyperspherical_Hermite4_interpolation_vector_dPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi, ErrorMsg error_message);
174 int hyperspherical_Hermite4_interpolation_vector_d2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *d2Phi, ErrorMsg error_message);
175 int hyperspherical_Hermite4_interpolation_vector_PhidPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi, ErrorMsg error_message);
176 int hyperspherical_Hermite4_interpolation_vector_Phid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *d2Phi, ErrorMsg error_message);
177 int hyperspherical_Hermite4_interpolation_vector_dPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi,
double *d2Phi, ErrorMsg error_message);
178 int hyperspherical_Hermite4_interpolation_vector_PhidPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi,
double *d2Phi, ErrorMsg error_message);
179 int hyperspherical_Hermite6_interpolation_vector_Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi, ErrorMsg error_message);
180 int hyperspherical_Hermite6_interpolation_vector_dPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi, ErrorMsg error_message);
181 int hyperspherical_Hermite6_interpolation_vector_d2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *d2Phi, ErrorMsg error_message);
182 int hyperspherical_Hermite6_interpolation_vector_PhidPhi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi, ErrorMsg error_message);
183 int hyperspherical_Hermite6_interpolation_vector_Phid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *d2Phi, ErrorMsg error_message);
184 int hyperspherical_Hermite6_interpolation_vector_dPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *dPhi,
double *d2Phi, ErrorMsg error_message);
185 int hyperspherical_Hermite6_interpolation_vector_PhidPhid2Phi(HyperInterpStruct *pHIS,
int nxi,
int lnum,
double *xinterp,
double *Phi,
double *dPhi,
double *d2Phi, ErrorMsg error_message);