qnm.angular

Solve the angular Teukolsky equation via spectral decomposition.

For a given complex QNM frequency ω, the separation constant and spherical-spheroidal decomposition are found as an eigenvalue and eigenvector of an (infinite) matrix problem. The interface to solving this problem is C_and_sep_const_closest(), which returns a certain eigenvalue A and eigenvector C. The eigenvector contains the C coefficients in the equation

\[{}_s Y_{\ell m}(\theta, \phi; a\omega) = {\sum_{\ell'=\ell_{\min} (s,m)}^{\ell_\max}} C_{\ell' \ell m}(a\omega)\ {}_s Y_{\ell' m}(\theta, \phi) \,.\]

Here ℓmin=max(|m|,|s|) (see l_min()), and ℓmax can be chosen at run time. The C coefficients are returned as a complex ndarray, with the zeroth element corresponding to ℓmin. You can get the associated ℓ values by calling ells().

Functions

C_and_sep_const_closest(A0, s, c, m, l_max) Get a single eigenvalue and eigenvector of decomposition matrix, where the eigenvalue is closest to some guess A0.
M_matrix(s, c, m, l_max) Spherical-spheroidal decomposition matrix truncated at l_max.
M_matrix_elem(s, c, m, l, lprime) The (l, lprime) matrix element from the spherical-spheroidal decomposition matrix from Eq.
M_matrix_old(s, c, m, l_max) Legacy function.
ells(s, m, l_max) Vector of ℓ values in C vector and M matrix.
give_M_matrix_elem_ufunc(s, c, m) Legacy function.
l_min(s, m) Minimum allowed value of l for a given s, m.
sep_const_closest(A0, s, c, m, l_max) Gives the separation constant that is closest to A0.
sep_consts(s, c, m, l_max) Finds eigenvalues of decomposition matrix, i.e.
swsphericalh_A(s, l, m) Angular separation constant at a=0.
qnm.angular.C_and_sep_const_closest(A0, s, c, m, l_max)[source]

Get a single eigenvalue and eigenvector of decomposition matrix, where the eigenvalue is closest to some guess A0.

Parameters:
A0: complex

Value close to the desired separation constant.

s: int

Spin-weight of interest

c: complex

Oblateness of spheroidal harmonic

m: int

Magnetic quantum number

l_max: int

Maximum angular quantum number

Returns:
complex, complex ndarray

The first element of the tuple is the eigenvalue that is closest in value to A0. The second element of the tuple is the corresponding eigenvector. The 0th element of this ndarray corresponds to l_min().

qnm.angular.M_matrix(s, c, m, l_max)[source]

Spherical-spheroidal decomposition matrix truncated at l_max.

Parameters:
s: int

Spin-weight of interest

c: complex

Oblateness of the spheroidal harmonic

m: int

Magnetic quantum number

l_max: int

Maximum angular quantum number

Returns:
complex ndarray

Decomposition matrix

qnm.angular.M_matrix_elem(s, c, m, l, lprime)[source]

The (l, lprime) matrix element from the spherical-spheroidal decomposition matrix from Eq. (55).

Parameters:
s: int

Spin-weight of interest

c: complex

Oblateness of the spheroidal harmonic

m: int

Magnetic quantum number

l: int

Angular quantum number of interest

lprime: int

Primed quantum number of interest

Returns:
complex

Matrix element M_{l, lprime}

qnm.angular.M_matrix_old(s, c, m, l_max)[source]

Legacy function. Same as M_matrix() except trying to be cute with ufunc’s, requiring scope capture with temp func inside give_M_matrix_elem_ufunc(), which meant that numba could not speed up this method. Remains here for testing purposes. See documentation for M_matrix() parameters and return value.

qnm.angular.ells(s, m, l_max)[source]

Vector of ℓ values in C vector and M matrix.

The format of the C vector and M matrix is that the 0th element corresponds to l_min(s,m) (see l_min()).

Parameters:
s: int

Spin-weight of interest

m: int

Magnetic quantum number

l_max: int

Maximum angular quantum number

Returns:
int ndarray

Vector of ℓ values, starting from l_min

qnm.angular.give_M_matrix_elem_ufunc(s, c, m)[source]

Legacy function. Gives ufunc that implements matrix elements of the spherical-spheroidal decomposition matrix. This function is used by M_matrix_old().

Parameters:
s: int

Spin-weight of interest

c: complex

Oblateness of the spheroidal harmonic

m: int

Magnetic quantum number

Returns:
ufunc

Implements elements of M matrix

qnm.angular.l_min(s, m)[source]

Minimum allowed value of l for a given s, m.

The formula is l_min = max(|m|,|s|).

Parameters:
s: int

Spin-weight of interest

m: int

Magnetic quantum number

Returns:
int

l_min

qnm.angular.sep_const_closest(A0, s, c, m, l_max)[source]

Gives the separation constant that is closest to A0.

Parameters:
A0: complex

Value close to the desired separation constant.

s: int

Spin-weight of interest

c: complex

Oblateness of spheroidal harmonic

m: int

Magnetic quantum number

l_max: int

Maximum angular quantum number

Returns:
complex

Separation constant that is the closest to A0.

qnm.angular.sep_consts(s, c, m, l_max)[source]

Finds eigenvalues of decomposition matrix, i.e. the separation constants, As.

Parameters:
s: int

Spin-weight of interest

c: complex

Oblateness of spheroidal harmonic

m: int

Magnetic quantum number

l_max: int

Maximum angular quantum number

Returns:
complex ndarray

Eigenvalues of spherical-spheroidal decomposition matrix

qnm.angular.swsphericalh_A(s, l, m)[source]

Angular separation constant at a=0.

Eq. (50). Has no dependence on m. The formula is
A_0 = l(l+1) - s(s+1)
Parameters:
s: int

Spin-weight of interest

l: int

Angular quantum number of interest

m: int

Magnetic quantum number, ignored

Returns:
int

Value of A(a=0) = l(l+1) - s(s+1)