JDFTx  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SphericalHarmonics.h File Reference
#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 Power   pow
 
#define DECLARE_Ylm(lm, code)   template<> __hostanddev__ double Ylm<lm>(double x, double y, double z) { return 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 (6,-0.31539156525252005 *(Power(x, 2)+Power(y, 2)-2.*Power(z, 2))) DECLARE_Ylm(8
 
*x y *x y YlmInternal::DECLARE_Ylm (9,-0.5900435899266435 *y *(-3.*Power(x, 2)+Power(y, 2))) DECLARE_Ylm(11
 
*x y *x y *y * YlmInternal::Power (x, 2)+Power(y
 
*x y *x y *y * YlmInternal::Power (z, 2))) DECLARE_Ylm(12
 
*x y *x y *y *z *x *x y *x y *z YlmInternal::DECLARE_Ylm (15, 0.5900435899266435 *x *(Power(x, 2)-3.*Power(y, 2))) DECLARE_Ylm(16
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y 
YlmInternal::DECLARE_Ylm (17,-1.7701307697799304 *y *(-3.*Power(x, 2)+Power(y, 2))*z) DECLARE_Ylm(18
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z ** 
YlmInternal::Power (Power(x, 2)+Power(y, 2), 2)-72.*(Power(x
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z 
YlmInternal::Power (y, 2))*Power(z
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z * 
YlmInternal::Power (z, 4))) DECLARE_Ylm(21
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z 
YlmInternal::DECLARE_Ylm (24, 0.6258357354491761 *(Power(x, 4)-6.*Power(x, 2)*Power(y, 2)+Power(y, 4))) DECLARE_Ylm(25
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y ** 
YlmInternal::Power (x, 4)-10.*Power(x
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y 
YlmInternal::DECLARE_Ylm (26, 8.302649259524166 *x *(x-y)*y *(x+y)*z) DECLARE_Ylm(27
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y *y *x
*y *z *y *z *x *x y *x y *z *x
*z 
YlmInternal::DECLARE_Ylm (35, 0.6563820568401701 *x *(Power(x, 4)-10.*Power(x, 2)*Power(y, 2)+5.*Power(y, 4))) DECLARE_Ylm(36
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y *y *x
*y *z *y *z *x *x y *x y *z *x
*z *x *y 
YlmInternal::DECLARE_Ylm (37, 2.366619162231752 *y *(5.*Power(x, 4)-10.*Power(x, 2)*Power(y, 2)+Power(y, 4))*z) DECLARE_Ylm(38
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y *y *x
*y *z *y *z *x *x y *x y *z *x
*z *x *y *x *x y *y *x y *y *z
*x *y *y *z ** 
YlmInternal::Power (Power(x, 2)+Power(y, 2), 3)+90.*Power(Power(x
 
*x y *x y *y *z *x *x y *x y
*z *x *x y *y *x y *x *y *y *z
*x *z *x y *x y *x *z *y *y *x
*y *z *y *z *x *x y *x y *z *x
*z *x *y *x *x y *y *x y *y *z
*x *y *y *z * 
YlmInternal::Power (z, 6))) DECLARE_Ylm(43
 
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< YlmProdTermexpandYlmProd (int lm1, int lm2)
 
std::vector< YlmProdTermexpandYlmProd (int l1, int m1, int l2, int m2)
 Wrapper function expandYlmProd with individual indices.
 

Detailed Description

Real spherical Harmonics and spherical bessel functions