#include <core/vector3.h>
Classes | |
struct | YlmProdTerm |
Term in real spherical harmonic expansion of a product of two real spherical harmonics. More... | |
Namespaces | |
YlmInternal | |
Macros | |
#define | X2 double x2 = x*x; |
#define | Y2 double y2 = y*y; |
#define | Z2 double z2 = z*z; |
#define | X2Y2 double x2y2 = x*x + y*y; |
#define | X2Y2i X2 Y2 double x2y2 = x2 + y2; |
#define | DECLARE_Ylm(lm, code) template<> __hostanddev__ double Ylm<lm>(double x, double y, double z) { code; } |
#define | SwitchTemplate_lm(l, m, fTemplate, argList) |
Switch a function templated over l,m for all supported l,m with parenthesis enclosed argument list argList. | |
#define | ADD(l, m, coeff) result.push_back(YlmProdTerm(l,m,coeff)) |
Functions | |
double | bessel_jl (int l, double x) |
Spherical bessel function. | |
template<int lm> | |
__hostanddev__ double | YlmInternal::Ylm (double x, double y, double z) |
YlmInternal::DECLARE_Ylm (-2, return 0.) DECLARE_Ylm(-1 | |
return | YlmInternal::DECLARE_Ylm (8, return 0.5462742152960396 *(x-y)*(x+y)) DECLARE_Ylm(12 |
return return *z **z *z *x *x y *y | YlmInternal::DECLARE_Ylm (14, return 1.445305721320277 *(x-y)*(x+y)*z) DECLARE_Ylm(16 |
return return *z **z *z *x *x y *y return *x *y *x y *x y | YlmInternal::DECLARE_Ylm (19, return-0.6690465435572892 *y *z *(3.*(x *x+y *y)-4.*z *z)) DECLARE_Ylm(20 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 | YlmInternal::DECLARE_Ylm (21, return-0.6690465435572892 *x *z *(3.*(x *x+y *y)-4.*z *z)) DECLARE_Ylm(22 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z | YlmInternal::DECLARE_Ylm (24, X2 Y2 return 0.6258357354491761 *(x2 *(x2-6.*y2)+y2 *y2)) DECLARE_Ylm(25 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 | YlmInternal::DECLARE_Ylm (26, return 8.302649259524166 *x *y *z *(x-y)*(x+y)) DECLARE_Ylm(27 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z | YlmInternal::DECLARE_Ylm (29, X2Y2 Z2 return 0.45294665119569694 *y *(x2y2 *(x2y2-12.*z2)+8.*z2 *z2)) DECLARE_Ylm(30 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 | YlmInternal::DECLARE_Ylm (31, X2Y2 Z2 return 0.45294665119569694 *x *(x2y2 *(x2y2-12.*z2)+8.*z2 *z2)) DECLARE_Ylm(32 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z | YlmInternal::DECLARE_Ylm (33, X2 Y2 return-0.4892382994352504 *x *(x2-3.*y2)*(x2+y2-8.*z *z)) DECLARE_Ylm(34 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 | YlmInternal::DECLARE_Ylm (35, X2 Y2 return 0.6563820568401701 *x *(x2 *(x2-10.*y2)+5.*y2 *y2)) DECLARE_Ylm(36 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 | YlmInternal::DECLARE_Ylm (37, X2 Y2 return 2.366619162231752 *y *z *(5.*x2 *(x2-2.*y2)+y2 *y2)) DECLARE_Ylm(38 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 X2 Y2 return *x *y *x2 y2 *x2 y2 *z *z | YlmInternal::DECLARE_Ylm (39, X2 Y2 return 0.9212052595149236 *y *z *(y2-3.*x2)*(3.*(x2+y2)-8.*z *z)) DECLARE_Ylm(40 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 X2 Y2 return *x *y *x2 y2 *x2 y2 *z *z X2Y2 Z2 return *x *y *x2y2 *x2y2 *z2 *z2 *z2 | YlmInternal::DECLARE_Ylm (41, X2Y2 Z2 return 0.5826213625187314 *y *z *(5.*x2y2 *(x2y2-4.*z2)+8.*z2 *z2)) DECLARE_Ylm(42 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 X2 Y2 return *x *y *x2 y2 *x2 y2 *z *z X2Y2 Z2 return *x *y *x2y2 *x2y2 *z2 *z2 *z2 X2Y2 Z2 return **x2y2 *x2y2 **z2 x2y2 *z2 *z2 **z2 *x2y2 | YlmInternal::DECLARE_Ylm (43, X2Y2 Z2 return 0.5826213625187314 *x *z *(5.*x2y2 *(x2y2-4.*z2)+8.*z2 *z2)) DECLARE_Ylm(44 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 X2 Y2 return *x *y *x2 y2 *x2 y2 *z *z X2Y2 Z2 return *x *y *x2y2 *x2y2 *z2 *z2 *z2 X2Y2 Z2 return **x2y2 *x2y2 **z2 x2y2 *z2 *z2 **z2 *x2y2 X2Y2i Z2 return *x2 y2 *x2y2 *x2y2 *z2 *z2 *z2 | YlmInternal::DECLARE_Ylm (45, X2 Y2 return-0.9212052595149236 *x *z *(x2-3.*y2)*(3.*(x2+y2)-8.*z *z)) DECLARE_Ylm(46 |
return return *z **z *z *x *x y *y return *x *y *x y *x y X2Y2 Z2 return **x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 y2 *x2 y2 *z *z X2 Y2 return *y **x2 *x2 *y2 y2 *y2 X2 Y2 return *y *y2 *x2 *x2 y2 *z *z X2Y2 Z2 return *z **x2y2 *x2y2 *z2 **x2y2 z2 X2 Y2 return *x2 y2 *z *x2 y2 *z *z X2 Y2 return *z *x2 *x2 *y2 y2 *y2 X2 Y2 return *x *y *x2 **x2 *y2 *y2 *y2 X2 Y2 return *x *y *x2 y2 *x2 y2 *z *z X2Y2 Z2 return *x *y *x2y2 *x2y2 *z2 *z2 *z2 X2Y2 Z2 return **x2y2 *x2y2 **z2 x2y2 *z2 *z2 **z2 *x2y2 X2Y2i Z2 return *x2 y2 *x2y2 *x2y2 *z2 *z2 *z2 X2 Y2 return *x2 *x2 *y2 y2 *y2 *x2 y2 *z *z | YlmInternal::DECLARE_Ylm (47, X2 Y2 return 2.366619162231752 *x *z *(x2 *(x2-10.*y2)+5.*y2 *y2)) DECLARE_Ylm(48 |
template<int lm> | |
__hostanddev__ double | Ylm (const vector3<> &qhat) |
Index by combined lm := l*(l+1)+m index (useful when static-looping over all l,m) | |
template<int l, int m> | |
__hostanddev__ double | Ylm (const vector3<> &qhat) |
Index by l and m separately. | |
template<int l, int m> | |
void | set_Ylm (const vector3<> qHat, double &result) |
Use above macro to provide a non-templated version of the function. | |
double | Ylm (int l, int m, const vector3<> &qHat) |
std::vector< YlmProdTerm > | expandYlmProd (int lm1, int lm2) |
std::vector< YlmProdTerm > | expandYlmProd (int l1, int m1, int l2, int m2) |
Wrapper function expandYlmProd with individual indices. | |
template<int l, int m> | |
__hostanddev__ vector3 | YlmPrime (const vector3<> &qHat) |
Derivative of spherical Harmonic with repect to iDir'th component of qHat. | |
template<int l, int m> | |
void | set_YlmPrime (const vector3<> qHat, vector3<> &result) |
Non-templated version of YlmPrime (for debugging) | |
vector3 | YlmPrime (int l, int m, const vector3<> &qHat) |
Real spherical Harmonics and spherical bessel functions