APIs

There are 4 functions that are exported, namely

and there are 5 custom types that are exported, i.e.

Currently, only the exported functions and types are documented below. Documentations for private (i.e. unexported) functions will be added at a later stage.

Functions

GeneralizedSasakiNakamura.Teukolsky_radialFunction
Teukolsky_radial(s::Int, l::Int, m::Int, a, omega, boundary_condition, rsin, rsout; horizon_expansion_order::Int=_DEFAULT_horizon_expansion_order, infinity_expansion_order::Int=_DEFAULT_infinity_expansion_order, method="auto", data_type=Solutions._DEFAULTDATATYPE,  ODE_algorithm=Solutions._DEFAULTSOLVER, tolerance=Solutions._DEFAULTTOLERANCE, rsmp=nothing)

Compute the Teukolsky function for a given mode (specified by s the spin weight, l the harmonic index, m the azimuthal index, a the Kerr spin parameter, and omega the frequency [which can be complex]) and boundary condition specified by boundary_condition, which can be either

- `IN` for purely-ingoing at the horizon,
- `UP` for purely-outgoing at infinity,
- `OUT` for purely-outgoing at the horizon,
- `DOWN` for purely-ingoing at infinity.

Note that the OUT and DOWN solutions are constructed by linearly combining the IN and UP solutions, respectively.

The full GSN solution is converted to the corresponding Teukolsky solution $(R(r), dR/dr)$ and the incidence, reflection and transmission amplitude are converted from the GSN formalism to the Teukolsky formalism with the normalization convention that the transmission amplitude is normalized to 1 (i.e. normalization_convention=UNIT_TEUKOLSKY_TRANS).

Note, however, when omega = 0, the exact Teukolsky function expressed using Gauss hypergeometric functions will be returned (i.e., instead of using the GSN formalism). In this case, only s, l, m, a, omega, boundary_condition will be parsed.

With complex values of omega, the Teukolsky function is evaluated as a function of $r$, where the value at the corresponding location $\rho = r_{*}(r) \in \mathbb{R}$ along the rotated integration path on the complex plane is returned.

source
Teukolsky_radial(s::Int, l::Int, m::Int, a, omega; data_type=Solutions._DEFAULTDATATYPE, ODE_algorithm=Solutions._DEFAULTSOLVER, tolerance=Solutions._DEFAULTTOLERANCE, method="auto")

Compute the Teukolsky function for a given mode (specified by s the spin weight, l the harmonic index, m the azimuthal index, a the Kerr spin parameter, and omega the frequency) with the purely-ingoing boundary condition at the horizon (IN) and the purely-outgoing boundary condition at infinity (UP).

Note that for real frequencies, the numerical inner boundary (rsin) and outer boundary (rsout) are set to the default values _DEFAULT_rsin and _DEFAULT_rsout, respectively, while the order of the asymptotic expansion at the horizon and infinity are determined automatically. As for complex frequencies, the numerical inner and the outer boundaries are determined automatically, while the order of the asymptotic expansion at the horizon and infinity are set to _DEFAULT_horizon_expansion_order_for_cplx_freq and _DEFAULT_infinity_expansion_order_for_cplx_freq, respectively.

source
GeneralizedSasakiNakamura.GSN_radialFunction
GSN_radial(s::Int, l::Int, m::Int, a, omega, boundary_condition, rsin, rsout; horizon_expansion_order::Int=_DEFAULT_horizon_expansion_order, infinity_expansion_order::Int=_DEFAULT_infinity_expansion_order, method="auto", data_type=Solutions._DEFAULTDATATYPE,  ODE_algorithm=Solutions._DEFAULTSOLVER, tolerance=Solutions._DEFAULTTOLERANCE, rsmp=nothing)

Compute the GSN function for a given mode (specified by s the spin weight, l the harmonic index, m the azimuthal index, a the Kerr spin parameter, and omega the frequency [which can be complex]) and boundary condition specified by boundary_condition, which can be either

- `IN` for purely-ingoing at the horizon,
- `UP` for purely-outgoing at infinity,
- `OUT` for purely-outgoing at the horizon,
- `DOWN` for purely-ingoing at infinity.

Note that the OUT and DOWN solutions are constructed by linearly combining the IN and UP solutions, respectively.

The GSN function is numerically solved, for real values of omega, in the interval of tortoise coordinates $r_{*} \in$ [rsin, rsout] using the ODE solver (from DifferentialEquations.jl) specified by ODE_algorithm (default: Vern9()) with tolerance specified by tolerance (default: 1e-12). The ODE to be solved is determined by the keyword method (default: auto), which can be either linear (solving the GSN equation in a linear form) or Riccati (solving the GSN equation in a nonlinear form). By default the data type used is ComplexF64 (i.e. double-precision floating-point number) but it can be changed by specifying data_type (e.g. Complex{BigFloat} for complex arbitrary precision number).

With complex values of omega, the GSN function is solved along a rotated path on the complex plane of $r_*$, where the path consists of two broken line segments parametrized by a real variable/a new coordinate $\rho$. The angle with which the path is rotated is determined by the frequency $\omega$, the Kerr spin parameter $a$ and the azimuthal index $m$, such that the GSN function still behaves like a plane wave near the horizon and spatial infinity. At $\rho = 0$, the path intersects with the real axis at $r_{*} = r_{*}^{\rm{mp}}$ (rsmp, default to be nothing, which means it will be determined automatically). Both the numerical and semi-analytical GSN solutions are evaluated as functions of $\rho$ instead of the now-complex $r_{*}$.

While the numerical GSN solution is only accurate in the range [rsin, rsout], the full GSN solution is constructed by smoothly attaching the asymptotic solutions near horizon (up to horizon_expansion_order-th order) and infinity (up to infinity_expansion_order-th order). Therefore, the now-semi-analytical GSN solution is accurate everywhere.

Note, however, when omega = 0, the exact GSN function expressed using Gauss hypergeometric functions will be returned (i.e., instead of being solved numerically). In this case, only s, l, m, a, omega, boundary_condition will be parsed.

Return a GSNRadialFunction object which contains all the information about the GSN solution.

source
GSN_radial(s::Int, l::Int, m::Int, a, omega; data_type=Solutions._DEFAULTDATATYPE, ODE_algorithm=Solutions._DEFAULTSOLVER, tolerance=Solutions._DEFAULTTOLERANCE, method="auto")

Compute the GSN function for a given mode (specified by s the spin weight, l the harmonic index, m the azimuthal index, a the Kerr spin parameter, and omega the frequency) with the purely-ingoing boundary condition at the horizon (IN) and the purely-outgoing boundary condition at infinity (UP).

Note that for real frequencies, the numerical inner boundary (rsin) and outer boundary (rsout) are set to the default values _DEFAULT_rsin and _DEFAULT_rsout, respectively, while the order of the asymptotic expansion at the horizon and infinity are determined automatically. As for complex frequencies, the numerical inner and the outer boundaries are determined automatically, while the order of the asymptotic expansion at the horizon and infinity are set to _DEFAULT_horizon_expansion_order_for_cplx_freq and _DEFAULT_infinity_expansion_order_for_cplx_freq, respectively.

source
GeneralizedSasakiNakamura.Coordinates.r_from_rstarFunction
r_from_rstar(a, rstar)

Convert a tortoise coordinate rstar to the corresponding Boyer-Lindquist coordiante r. It uses a bisection method when rstar <= 0, and Newton method otherwise.

The function assumes that $r \geq r_{+}$ where $r_{+}$ is the outer event horizon.

source

Types

BoundaryCondition

This is an enum type that can take either one of the four values

value
INpurely ingoing at the horizon
UPpurely outgoing at infinity
OUTpurely outgoing at the horizon
DOWNpurely ingoing at infinity

NormalizationConvention

This is an enum type that can take either one of the two values

value
UNIT_GSN_TRANSnormalized to have a unit transmission amplitude for the GSN function
UNIT_TEUKOLSKY_TRANSnormalized to have a unit transmission amplitude for the Teukolsky function

Mode

This is a composite struct type that stores information about a mode

field
sspin weight $s$
lharmonic index $\ell$
mazimuthal index $m$
aKerr spin parameter $a/M$
omegafrequency $M\omega$
lambdaspin-weighted spheroidal eigenvalue $\lambda$

GSNRadialFunction

This is a composite struct type that stores the output from GSN_radial

Tip

GSNRadialFunction(rstar) is equivalent to GSNRadialFunction.GSN_solution(rstar)[1], returning only the value of the GSN function evaluated at the tortoise coordinate rstar

field
modea Mode object storing information about the mode
boundary_conditiona BoundaryCondition object storing which boundary condition this function satisfies
rsinnumerical inner boundary $r_{*}^{\mathrm{in}}/M$ where the GSN equation is numerically evolved ($r_{*}$ is a tortoise coordinate)
rsoutnumerical outer boundary $r_{*}^{\mathrm{out}}/M$ where the GSN equation is numerically evolved ($r_{*}$ is a tortoise coordinate)
rsmpThe matching point in tortoise coordinate $r_{*}^{\mathrm{mp}}$ if used
horizon_expansion_orderorder of the asymptotic expansion at the horizon
infinity_expansion_orderorder of the asymptotic expansion at infinity
transmission_amplitudetransmission amplitude in the GSN formalism of this function
incidence_amplitudeincidence amplitude in the GSN formalism of this function
reflection_amplitudereflection amplitude in the GSN formalism of this function
numerical_GSN_solutionnumerical solution (ODESolution object from DifferentialEquations.jl) to the GSN equation in [rsin, rsout] if applicable; output is a vector $[ \hat{X}(r_{*}), d\hat{X}(r_{*})/dr_{*} ]$
numerical_Riccati_solutionnumerical solution (ODESolution object from DifferentialEquations.jl) to the GSN equation in the Riccati form if applicable; output is a vector $[ \hat{\Phi}(r_{*}), d\hat{\Phi}(r_{*})/dr_{*} ]$
GSN_solutionfull GSN solution where asymptotic solutions are smoothly attached; output is a vector $[ \hat{X}(r_{*}), d\hat{X}(r_{*})/dr_{*} ]$
normalization_conventiona NormalizationConvention object storing which normalization convention this function adheres to

TeukolskyRadialFunction

This is a composite struct type that stores the output from Teukolsky_radial

Tip

TeukolskyRadialFunction(r) is equivalent to TeukolskyRadialFunction.Teukolsky_solution(r)[1], returning only the value of the Teukolsky function evaluated at the Boyer-Lindquist coordinate r

field
modea Mode object storing information about the mode
boundary_conditiona BoundaryCondition object storing which boundary condition this function satisfies
transmission_amplitudetransmission amplitude in the Teukolsky formalism of this function
incidence_amplitudeincidence amplitude in the Teukolsky formalism of this function
reflection_amplitudereflection amplitude in the Teukolsky formalism of this function
GSN_solutiona GSNRadialFunction object storing the corresponding GSN function
Teukolsky_solutionTeukolsky solution where asymptotic solutions are smoothly attached; output is a vector $[ \hat{R}(r), d\hat{R}(r)/dr ]$
normalization_conventiona NormalizationConvention object storing which normalization convention this function adheres to