Spin-weighted spherical harmonics¶
Spin-weighted spherical harmonics \({}_s Y_l^m(\theta,\phi)\)
- kerrgeodesic_gw.spin_weighted_spherical_harm.spin_weighted_spherical_harmonic(s, l, m, theta, phi, condon_shortley=True, cached=True, numerical=None)¶
Return the spin-weighted spherical harmonic of spin weight
s
and indices(l,m)
.INPUT:
s
– integer; the spin weightl
– non-negative integer; the harmonic degreem
– integer within the range[-l, l]
; the azimuthal numbertheta
– colatitude anglephi
– azimuthal anglecondon_shortley
– (default:True
) determines whether the Condon-Shortley phase of \((-1)^m\) is taken into account (see below)cached
– (default:True
) determines whether the result shall be cached; settingcached
toFalse
forces a new computation, without caching the resultnumerical
– (default:None
) determines whether a symbolic or a numerical computation of a given type is performed; allowed values areNone
: the type of computation is deduced from the type oftheta
RDF
: Sage’s machine double precision floating-point numbers (RealDoubleField
)RealField(n)
, wheren
is a number of bits: Sage’s floating-point numbers with an arbitrary precision; note thatRR
is a shortcut forRealField(53)
.float
: Python’s floating-point numbers
OUTPUT:
the value of \({}_s Y_l^m(\theta,\phi)\), either as a symbolic expression or as floating-point complex number of the type determined by
numerical
ALGORITHM:
The spin-weighted spherical harmonic is evaluated according to Eq. (3.1) of J. N. Golberg et al., J. Math. Phys. 8, 2155 (1967) [doi:10.1063/1.1705135], with an extra \((-1)^m\) factor (the so-called Condon-Shortley phase) if
condon_shortley
isTrue
, the actual formula being then the one given in Wikipedia article Spin-weighted_spherical_harmonics#CalculatingEXAMPLES:
sage: from kerrgeodesic_gw import spin_weighted_spherical_harmonic sage: theta, phi = var('theta phi') sage: spin_weighted_spherical_harmonic(-2, 2, 1, theta, phi) 1/4*(sqrt(5)*cos(theta) + sqrt(5))*e^(I*phi)*sin(theta)/sqrt(pi) sage: spin_weighted_spherical_harmonic(-2, 2, 1, theta, phi, ....: condon_shortley=False) -1/4*(sqrt(5)*cos(theta) + sqrt(5))*e^(I*phi)*sin(theta)/sqrt(pi) sage: spin_weighted_spherical_harmonic(-2, 2, 1, pi/3, pi/4) (3/32*I + 3/32)*sqrt(5)*sqrt(3)*sqrt(2)/sqrt(pi)
Evaluation as floating-point numbers: the type of the output is deduced from the input:
sage: spin_weighted_spherical_harmonic(-2, 2, 1, 1.0, 2.0) # tol 1.0e-13 -0.170114676286891 + 0.371707349012686*I sage: parent(_) Complex Field with 53 bits of precision sage: spin_weighted_spherical_harmonic(-2, 2, 1, RDF(2.0), RDF(3.0)) # tol 1.0e-13 -0.16576451879564585 + 0.023629159118690464*I sage: parent(_) Complex Double Field sage: spin_weighted_spherical_harmonic(-2, 2, 1, float(3.0), float(4.0)) # tol 1.0e-13 (-0.0002911423884400524-0.00033709085352998027j) sage: parent(_) <type 'complex'>
Computation with arbitrary precision are possible (here 100 bits):
sage: R100 = RealField(100); R100 Real Field with 100 bits of precision sage: spin_weighted_spherical_harmonic(-2, 2, 1, R100(1.5), R100(2.0)) # tol 1.0e-28 -0.14018136537676185317636108802 + 0.30630187143465275236861476906*I
Even when the entry is symbolic, numerical evaluation can be enforced via the argument
numerical
. For instance, settingnumerical
toRDF
(SageMath’s Real Double Field):sage: spin_weighted_spherical_harmonic(-2, 2, 1, pi/3, pi/4, numerical=RDF) # tol 1.0e-13 0.2897056515173923 + 0.28970565151739225*I sage: parent(_) Complex Double Field
One can also use
numerical=RR
(SageMath’s Real Field with precision set to 53 bits):sage: spin_weighted_spherical_harmonic(-2, 2, 1, pi/3, pi/4, numerical=RR) # tol 1.0e-13 0.289705651517392 + 0.289705651517392*I sage: parent(_) Complex Field with 53 bits of precision
Another option is to use Python floats:
sage: spin_weighted_spherical_harmonic(-2, 2, 1, pi/3, pi/4, numerical=float) # tol 1.0e-13 (0.28970565151739225+0.2897056515173922j) sage: parent(_) <type 'complex'>
One can go beyond double precision, for instance using 100 bits of precision:
sage: spin_weighted_spherical_harmonic(-2, 2, 1, pi/3, pi/4, ....: numerical=RealField(100)) # tol 1.0e-28 0.28970565151739218525664455148 + 0.28970565151739218525664455148*I sage: parent(_) Complex Field with 100 bits of precision