Kerr spacetime¶
The Kerr black hole is implemented via the class KerrBH, which
provides the Lorentzian manifold functionalities associated with the Kerr
metric, as well as functionalities regarding circular orbits (e.g. computation
of the ISCO, Roche limit, etc.).
REFERENCES:
J. M. Bardeen, W. H. Press and S. A. Teukolsky, Astrophys. J. 178, 347 (1972), doi:10.1086/151796
L. Dai and R. Blandford, Mon. Not. Roy. Astron. Soc. 434, 2948 (2013), doi:10.1093/mnras/stt1209
- class kerrgeodesic_gw.kerr_spacetime.KerrBH(a, m=1, manifold_name='M', manifold_latex_name=None, metric_name='g', metric_latex_name=None)¶
Bases:
sage.manifolds.differentiable.pseudo_riemannian.PseudoRiemannianManifoldKerr black hole spacetime.
The Kerr spacetime is generated as a 4-dimensional Lorentzian manifold, endowed with the Boyer-Lindquist coordinates (default chart). Accordingly the class
KerrBHinherits from the generic SageMath class PseudoRiemannianManifold.INPUT:
a– reduced angular momentumm– (default:1) total massmanifold_name– (default:'M') string; name (symbol) given to the spacetime manifoldmanifold_latex_name– (default:None) string; LaTeX symbol to denote the spacetime manifold; if none is provided, it is set tomanifold_namemetric_name– (default:'g') string; name (symbol) given to the metric tensormetric_latex_name– (default:None) string; LaTeX symbol to denote the metric tensor; if none is provided, it is set tometric_name
EXAMPLES:
Creating a Kerr spacetime with symbolic parameters \((a, m)\):
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m); BH Kerr spacetime M sage: dim(BH) 4
The Boyer-Lindquist chart:
sage: BH.boyer_lindquist_coordinates() Chart (M, (t, r, th, ph)) sage: latex(_) \left(M,(t, r, {\theta}, {\phi})\right)
The Kerr metric:
sage: g = BH.metric(); g Lorentzian metric g on the Kerr spacetime M sage: g.display() g = -(a^2*cos(th)^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) dt⊗dt - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dt⊗dph + (a^2*cos(th)^2 + r^2)/(a^2 - 2*m*r + r^2) dr⊗dr + (a^2*cos(th)^2 + r^2) dth⊗dth - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dph⊗dt + (2*a^2*m*r*sin(th)^4 + (a^2*r^2 + r^4 + (a^4 + a^2*r^2)*cos(th)^2)*sin(th)^2)/(a^2*cos(th)^2 + r^2) dph⊗dph sage: g[0,3] -2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2)
A Kerr spacetime with specific numerical values for \((a,m)\), namely \(m=1\) and \(a=0.9\):
sage: BH = KerrBH(0.9); BH Kerr spacetime M sage: g = BH.metric() sage: g.display() # tol 1.0e-13 g = -(r^2 + 0.81*cos(th)^2 - 2*r)/(r^2 + 0.81*cos(th)^2) dt⊗dt - 1.8*r*sin(th)^2/(r^2 + 0.81*cos(th)^2) dt⊗dph + (1.0*r^2 + 0.81*cos(th)^2)/(1.0*r^2 - 2.0*r + 0.81) dr⊗dr + (r^2 + 0.81*cos(th)^2) dth⊗dth - 1.8*r*sin(th)^2/(r^2 + 0.81*cos(th)^2) dph⊗dt + (1.62*r*sin(th)^4 + (1.0*r^4 + (0.81*r^2 + 0.6561)*cos(th)^2 + 0.81*r^2)*sin(th)^2)/(1.0*r^2 + 0.81*cos(th)^2) dph⊗dph sage: g[0,3] -1.8*r*sin(th)^2/(r^2 + 0.81*cos(th)^2)The Schwarrzschild spacetime as the special case \(a=0\) of Kerr spacetime:
sage: BH = KerrBH(0, m) sage: g = BH.metric() sage: g.display() g = (2*m - r)/r dt⊗dt - r/(2*m - r) dr⊗dr + r^2 dth⊗dth + r^2*sin(th)^2 dph⊗dph
The object returned by
metric()belongs to the SageMath class PseudoRiemannianMetric, for which many methods are available, likechristoffel_symbols_display()to get the Christoffel symbols with respect to the Boyer-Lindquist coordinates (by default, only nonzero and non-redundant symbols are displayed):sage: g.christoffel_symbols_display() Gam^t_t,r = -m/(2*m*r - r^2) Gam^r_t,t = -(2*m^2 - m*r)/r^3 Gam^r_r,r = m/(2*m*r - r^2) Gam^r_th,th = 2*m - r Gam^r_ph,ph = (2*m - r)*sin(th)^2 Gam^th_r,th = 1/r Gam^th_ph,ph = -cos(th)*sin(th) Gam^ph_r,ph = 1/r Gam^ph_th,ph = cos(th)/sin(th)
or
ricci()to compute the Ricci tensor (identically zero here since we are dealing with a solution of Einstein equation in vacuum):sage: g.ricci() Field of symmetric bilinear forms Ric(g) on the Schwarzschild spacetime M sage: g.ricci().display() Ric(g) = 0
Various methods of
KerrBHclass implement the computations of remarkable radii in the Kerr spacetime. Let us use them to reproduce Fig. 1 of the seminal article by Bardeen, Press and Teukolsky, ApJ 178, 347 (1972), doi:10.1086/151796, which displays these radii as functions of the black hole spin paramater \(a\). The radii of event horizon and inner (Cauchy) horizon are obtained by the methodsevent_horizon_radius()andcauchy_horizon_radius()respectively:sage: graph = plot(lambda a: KerrBH(a).event_horizon_radius(), ....: (0., 1.), color='black', thickness=1.5, ....: legend_label=r"$r_{\rm H}$ (event horizon)", ....: axes_labels=[r"$a/M$", r"$r/M$"], ....: gridlines=True, frame=True, axes=False) sage: graph += plot(lambda a: KerrBH(a).cauchy_horizon_radius(), ....: (0., 1.), color='black', linestyle=':', thickness=1.5, ....: legend_label=r"$r_{\rm C}$ (Cauchy horizon)")
The ISCO radius is computed by the method
isco_radius():sage: graph += plot(lambda a: KerrBH(a).isco_radius(), ....: (0., 1.), thickness=1.5, ....: legend_label=r"$r_{\rm ISCO}$ (prograde)") sage: graph += plot(lambda a: KerrBH(a).isco_radius(retrograde=True), ....: (0., 1.), linestyle='--', thickness=1.5, ....: legend_label=r"$r_{\rm ISCO}$ (retrograde)")
The radius of the marginally bound circular orbit is computed by the method
marginally_bound_orbit_radius():sage: graph += plot(lambda a: KerrBH(a).marginally_bound_orbit_radius(), ....: (0., 1.), color='purple', linestyle='-', thickness=1.5, ....: legend_label=r"$r_{\rm mb}$ (prograde)") sage: graph += plot(lambda a: KerrBH(a).marginally_bound_orbit_radius(retrograde=True), ....: (0., 1.), color='purple', linestyle='--', thickness=1.5, ....: legend_label=r"$r_{\rm mb}$ (retrograde)")
The radius of the photon circular orbit is computed by the method
photon_orbit_radius():sage: graph += plot(lambda a: KerrBH(a).photon_orbit_radius(), ....: (0., 1.), color='gold', linestyle='-', thickness=1.5, ....: legend_label=r"$r_{\rm ph}$ (prograde)") sage: graph += plot(lambda a: KerrBH(a).photon_orbit_radius(retrograde=True), ....: (0., 1.), color='gold', linestyle='--', thickness=1.5, ....: legend_label=r"$r_{\rm ph}$ (retrograde)")
The final plot:
sage: graph Graphics object consisting of 8 graphics primitives
Arbitrary precision computations are possible:
sage: a = RealField(200)(0.95) # 0.95 with 200 bits of precision sage: KerrBH(a).isco_radius() # tol 1e-50 1.9372378781396625744170794927972658947432427390836799716847
- angular_momentum()¶
Return the reduced angular momentum of the black hole.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.spin() a
An alias is
angular_momentum():sage: BH.angular_momentum() a
- boyer_lindquist_coordinates(symbols=None, names=None)¶
Return the chart of Boyer-Lindquist coordinates.
INPUT:
symbols– (default:None) string defining the coordinate text symbols and LaTeX symbols, with the same conventions as the argumentcoordinatesin RealDiffChart; this is used only if the Boyer-Lindquist chart has not been already defined; ifNonethe symbols are generated as \((t,r,\theta,\phi)\).names– (default:None) unused argument, except ifsymbolsis not provided; it must be a tuple containing the coordinate symbols (this is guaranteed if the shortcut operator<,>is used)
OUTPUT:
the chart of Boyer-Lindquist coordinates, as an instance of RealDiffChart
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.boyer_lindquist_coordinates() Chart (M, (t, r, th, ph)) sage: latex(BH.boyer_lindquist_coordinates()) \left(M,(t, r, {\theta}, {\phi})\right)
The coordinate variables are returned by the square bracket operator:
sage: BH.boyer_lindquist_coordinates()[0] t sage: BH.boyer_lindquist_coordinates()[1] r sage: BH.boyer_lindquist_coordinates()[:] (t, r, th, ph)
They can also be obtained via the operator
<,>at the same time as the chart itself:sage: BLchart.<t, r, th, ph> = BH.boyer_lindquist_coordinates() sage: BLchart Chart (M, (t, r, th, ph)) sage: type(ph) <type 'sage.symbolic.expression.Expression'>
Actually,
BLchart.<t, r, th, ph> = BH.boyer_lindquist_coordinates()is a shortcut for:sage: BLchart = BH.boyer_lindquist_coordinates() sage: t, r, th, ph = BLchart[:]
The coordinate symbols can be customized:
sage: BH = KerrBH(a) sage: BH.boyer_lindquist_coordinates(symbols=r"T R Th:\Theta Ph:\Phi") Chart (M, (T, R, Th, Ph)) sage: latex(BH.boyer_lindquist_coordinates()) \left(M,(T, R, {\Theta}, {\Phi})\right)
- cauchy_horizon_radius()¶
Return the value of the Boyer-Lindquist coordinate \(r\) at the inner horizon (Cauchy horizon).
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.inner_horizon_radius() m - sqrt(-a^2 + m^2)
An alias is
cauchy_horizon_radius():sage: BH.cauchy_horizon_radius() m - sqrt(-a^2 + m^2)
- event_horizon_radius()¶
Return the value of the Boyer-Lindquist coordinate \(r\) at the black hole event horizon.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.outer_horizon_radius() m + sqrt(-a^2 + m^2)
An alias is
event_horizon_radius():sage: BH.event_horizon_radius() m + sqrt(-a^2 + m^2)
The horizon radius of the Schwarzschild black hole:
sage: assume(m>0) sage: KerrBH(0, m).event_horizon_radius() 2*m
The horizon radius of the extreme Kerr black hole (\(a=m\)):
sage: KerrBH(m, m).event_horizon_radius() m
- geodesic(parameter_range, initial_point, pt0=None, pr0=None, pth0=None, pph0=None, mu=None, E=None, L=None, Q=None, r_increase=True, th_increase=True, chart=None, name=None, latex_name=None, a_num=None, m_num=None, verbose=False)¶
Construct a geodesic on
self.INPUT:
parameter_range– range of the affine parameter \(\lambda\), as a pair(lambda_min, lambda_max)initial_point– point of Kerr spacetime from which the geodesic is to be integratedpt0– (default:None) Boyer-Lindquist component \(p^t\) of the initial 4-momentum vectorpr0– (default:None) Boyer-Lindquist component \(p^r\) of the initial 4-momentum vectorpth0– (default:None) Boyer-Lindquist component \(p^\theta\) of the initial 4-momentum vectorpph0– (default:None) Boyer-Lindquist component \(p^\phi\) of the initial 4-momentum vectormu– (default:None) mass \(\mu\) of the particleE– (default:None) conserved energy \(E\) of the particleL– (default:None) conserved angular momemtum \(L\) of the particleQ– (default:None) Carter constant \(Q\) of the particler_increase– (default:True) boolean; ifTrue, the initial value of \(p^r=\mathrm{d}r/\mathrm{d}\lambda\) determined from the integral of motions is positive or zero, otherwise, \(p^r\) is negativeth_increase– (default:True) boolean; ifTrue, the initial value of \(p^\theta=\mathrm{d}\theta/\mathrm{d}\lambda\) determined from the integral of motions is positive or zero, otherwise, \(p^\theta\) is negativechart– (default:None) chart on the spacetime manifold in terms of which the geodesic equations are expressed; ifNonethe default chart (Boyer-Lindquist coordinates) is assumedname– (default:None) string; symbol given to the geodesiclatex_name– (default:None) string; LaTeX symbol to denote the geodesic; if none is provided,namewill be useda_num– (default:None) numerical value of the Kerr spin parameter \(a\) (required for a numerical integration)m_num– (default:None) numerical value of the Kerr mass parameter \(m\) (required for a numerical integration)verbose– (default:False) boolean; determines whether some information is printed during the construction of the geodesic
OUTPUT:
an instance of
KerrGeodesic
EXAMPLES:
See
KerrGeodesic.
- inner_horizon_radius()¶
Return the value of the Boyer-Lindquist coordinate \(r\) at the inner horizon (Cauchy horizon).
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.inner_horizon_radius() m - sqrt(-a^2 + m^2)
An alias is
cauchy_horizon_radius():sage: BH.cauchy_horizon_radius() m - sqrt(-a^2 + m^2)
- isco_radius(retrograde=False)¶
Return the Boyer-Lindquist radial coordinate of the innermost stable circular orbit (ISCO) in the equatorial plane.
INPUT:
retrograde– (default:False) boolean determining whether retrograde or prograde (direct) orbits are considered
OUTPUT:
Boyer-Lindquist radial coordinate \(r\) of the innermost stable circular orbit in the equatorial plane
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.isco_radius() m*(sqrt((((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 1)^2 + 3*a^2/m^2) - sqrt(-(((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 2*sqrt((((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 1)^2 + 3*a^2/m^2) + 4)*(((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) - 2)) + 3) sage: BH.isco_radius(retrograde=True) m*(sqrt((((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 1)^2 + 3*a^2/m^2) + sqrt(-(((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 2*sqrt((((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) + 1)^2 + 3*a^2/m^2) + 4)*(((a/m + 1)^(1/3) + (-a/m + 1)^(1/3))*(-a^2/m^2 + 1)^(1/3) - 2)) + 3) sage: KerrBH(0.5).isco_radius() # tol 1.0e-13 4.23300252953083 sage: KerrBH(0.9).isco_radius() # tol 1.0e-13 2.32088304176189 sage: KerrBH(0.98).isco_radius() # tol 1.0e-13 1.61402966763547
ISCO in Schwarzschild spacetime:
sage: KerrBH(0, m).isco_radius() 6*m
ISCO in extreme Kerr spacetime (\(a=m\)):
sage: KerrBH(m, m).isco_radius() m sage: KerrBH(m, m).isco_radius(retrograde=True) 9*m
- map_to_Euclidean()¶
Map from Kerr spacetime to the Euclidean 4-space, based on Boyer-Lindquist coordinates
- marginally_bound_orbit_radius(retrograde=False)¶
Return the Boyer-Lindquist radial coordinate of the marginally bound circular orbit in the equatorial plane.
INPUT:
retrograde– (default:False) boolean determining whether retrograde or prograde (direct) orbits are considered
OUTPUT:
Boyer-Lindquist radial coordinate \(r\) of the marginally bound circular orbit in the equatorial plane
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.marginally_bound_orbit_radius() -a + 2*sqrt(-a + m)*sqrt(m) + 2*m sage: BH.marginally_bound_orbit_radius(retrograde=True) a + 2*sqrt(a + m)*sqrt(m) + 2*m
Marginally bound orbit in Schwarzschild spacetime:
sage: KerrBH(0, m).marginally_bound_orbit_radius() 4*m
Marginally bound orbits in extreme Kerr spacetime (\(a=m\)):
sage: KerrBH(m, m).marginally_bound_orbit_radius() m sage: KerrBH(m, m).marginally_bound_orbit_radius(retrograde=True) 2*sqrt(2)*m + 3*m
- mass()¶
Return the (ADM) mass of the black hole.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.mass() m sage: KerrBH(a).mass() 1
- metric()¶
Return the metric tensor.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.metric() Lorentzian metric g on the Kerr spacetime M sage: BH.metric().display() g = -(a^2*cos(th)^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) dt⊗dt - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dt⊗dph + (a^2*cos(th)^2 + r^2)/(a^2 - 2*m*r + r^2) dr⊗dr + (a^2*cos(th)^2 + r^2) dth⊗dth - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dph⊗dt + (2*a^2*m*r*sin(th)^4 + (a^2*r^2 + r^4 + (a^4 + a^2*r^2)*cos(th)^2)*sin(th)^2)/(a^2*cos(th)^2 + r^2) dph⊗dphThe Schwarzschild metric:
sage: KerrBH(0, m).metric().display() g = (2*m - r)/r dt⊗dt - r/(2*m - r) dr⊗dr + r^2 dth⊗dth + r^2*sin(th)^2 dph⊗dph
- orbital_angular_velocity(r, retrograde=False)¶
Return the angular velocity on a circular orbit.
The angular velocity \(\Omega\) on a circular orbit of Boyer-Lindquist radial coordinate \(r\) around a Kerr black hole of parameters \((m, a)\) is given by the formula
(1)¶\[ \Omega := \frac{\mathrm{d}\phi}{\mathrm{d}t} = \pm \frac{m^{1/2}}{r^{3/2} \pm a m^{1/2}}\]where \((t,\phi)\) are the Boyer-Lindquist time and azimuthal coordinates and \(\pm\) is \(+\) (resp. \(-\)) for a prograde (resp. retrograde) orbit.
INPUT:
r– Boyer-Lindquist radial coordinate \(r\) of the circular orbitretrograde– (default:False) boolean determining whether the orbit is retrograde or prograde
OUTPUT:
Angular velocity \(\Omega\) computed according to Eq. (1)
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m, r = var('a m r') sage: BH = KerrBH(a, m) sage: BH.orbital_angular_velocity(r) sqrt(m)/(a*sqrt(m) + r^(3/2)) sage: BH.orbital_angular_velocity(r, retrograde=True) sqrt(m)/(a*sqrt(m) - r^(3/2)) sage: KerrBH(0.9).orbital_angular_velocity(4.) # tol 1.0e-13 0.112359550561798
Orbital angular velocity around a Schwarzschild black hole:
sage: KerrBH(0, m).orbital_angular_velocity(r) sqrt(m)/r^(3/2)
Orbital angular velocity on the prograde ISCO of an extreme Kerr black hole (\(a=m\)):
sage: EKBH = KerrBH(m, m) sage: EKBH.orbital_angular_velocity(EKBH.isco_radius()) 1/2/m
- orbital_frequency(r, retrograde=False)¶
Return the orbital frequency of a circular orbit.
The frequency \(f\) of a circular orbit of Boyer-Lindquist radial coordinate \(r\) around a Kerr black hole of parameters \((m, a)\) is \(f = \Omega/(2\pi)\), where \(\Omega\) is given by Eq. (1).
INPUT:
r– Boyer-Lindquist radial coordinate \(r\) of the circular orbitretrograde– (default:False) boolean determining whether the orbit is retrograde or prograde
OUTPUT:
orbital frequency \(f\)
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m, r = var('a m r') sage: BH = KerrBH(a, m) sage: BH.orbital_frequency(r) 1/2*sqrt(m)/(pi*(a*sqrt(m) + r^(3/2))) sage: BH.orbital_frequency(r, retrograde=True) 1/2*sqrt(m)/(pi*(a*sqrt(m) - r^(3/2))) sage: KerrBH(0.9).orbital_frequency(4.) # tol 1.0e-13 0.0178825778754939 sage: KerrBH(0.9).orbital_frequency(float(4)) # tol 1.0e-13 0.0178825778754939
Orbital angular velocity around a Schwarzschild black hole:
sage: KerrBH(0, m).orbital_frequency(r) 1/2*sqrt(m)/(pi*r^(3/2))
Orbital angular velocity on the prograde ISCO of an extreme Kerr black hole (\(a=m\)):
sage: EKBH = KerrBH(m, m) sage: EKBH.orbital_frequency(EKBH.isco_radius()) 1/4/(pi*m)
For numerical values, the outcome depends on the type of the entry:
sage: KerrBH(0).orbital_frequency(6) 1/72*sqrt(6)/pi sage: KerrBH(0).orbital_frequency(6.) # tol 1.0e-13 0.0108291222393566 sage: KerrBH(0).orbital_frequency(RealField(200)(6)) # tol 1e-50 0.010829122239356612609803722920461899457548152312961017043180 sage: KerrBH(0.5).orbital_frequency(RealField(200)(6)) # tol 1.0e-13 0.0104728293495021 sage: KerrBH._clear_cache_() # to remove the BH object created with a=0.5 sage: KerrBH(RealField(200)(0.5)).orbital_frequency(RealField(200)(6)) # tol 1.0e-50 0.010472829349502111962146754433990790738415624921109392616237
- outer_horizon_radius()¶
Return the value of the Boyer-Lindquist coordinate \(r\) at the black hole event horizon.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.outer_horizon_radius() m + sqrt(-a^2 + m^2)
An alias is
event_horizon_radius():sage: BH.event_horizon_radius() m + sqrt(-a^2 + m^2)
The horizon radius of the Schwarzschild black hole:
sage: assume(m>0) sage: KerrBH(0, m).event_horizon_radius() 2*m
The horizon radius of the extreme Kerr black hole (\(a=m\)):
sage: KerrBH(m, m).event_horizon_radius() m
- photon_orbit_radius(retrograde=False)¶
Return the Boyer-Lindquist radial coordinate of the circular orbit of photons in the equatorial plane.
INPUT:
retrograde– (default:False) boolean determining whether retrograde or prograde (direct) orbits are considered
OUTPUT:
Boyer-Lindquist radial coordinate \(r\) of the circular orbit of photons in the equatorial plane
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.photon_orbit_radius() 2*m*(cos(2/3*arccos(-a/m)) + 1) sage: BH.photon_orbit_radius(retrograde=True) 2*m*(cos(2/3*arccos(a/m)) + 1)
Photon orbit in Schwarzschild spacetime:
sage: KerrBH(0, m).photon_orbit_radius() 3*m
Photon orbits in extreme Kerr spacetime (\(a=m\)):
sage: KerrBH(m, m).photon_orbit_radius() m sage: KerrBH(m, m).photon_orbit_radius(retrograde=True) 4*m
- roche_limit_radius(rho, rho_unit='solar', mass_bh=None, k_rot=0, r_min=None, r_max=50)¶
Evaluate the orbital radius of the Roche limit for a star of given density and rotation state.
The Roche limit is defined as the orbit at which the star fills its Roche volume (cf.
roche_volume()).INPUT:
rho– mean density of the star, in units ofrho_unitrho_unit– (default:'solar') string specifying the unit in whichrhois provided; allowed values are'solar': density of the sun (\(1.41\times 10^3 \; {\rm kg\, m}^{-3}\))'SI': SI unit (\({\rm kg\, m}^{-3}\))'M^{-2}': inverse square of the black hole mass \(M\) (geometrized units)
mass_bh– (default:None) black hole mass \(M\) in solar masses; must be set ifrho_unit='solar'or'SI'k_rot– (default:0) rotational parameter \(k_\omega := \omega/\Omega\), where \(\omega\) is the angular velocity of the star (assumed to be a rigid rotator) with respect to some inertial frame and \(\Omega\) is the orbital angular velocity (cf.roche_volume())r_min– (default:None) lower bound for the search of the Roche limit radius, in units of \(M\); if none is provided, the value of \(r\) at the prograde ISCO is usedr_max– (default:50) upper bound for the search of the Roche limit radius, in units of \(M\)
OUPUT:
Boyer-Lindquist radial coordinate \(r\) of the circular orbit at which the star fills its Roche volume, in units of the black hole mass \(M\)
EXAMPLES:
Roche limit of a non-rotating solar type star around a Schwarzschild black hole of mass equal to that of Sgr A* (\(4.1\; 10^6\; M_\odot\)):
sage: from kerrgeodesic_gw import KerrBH sage: BH = KerrBH(0) sage: BH.roche_limit_radius(1, mass_bh=4.1e6) # tol 1.0e-13 34.23653024850463
Instead of providing the density in solar units (the default), we can provide it in SI units (\({\rm kg\, m}^{-3}\)):
sage: BH.roche_limit_radius(1.41e3, rho_unit='SI', mass_bh=4.1e6) # tol 1.0e-13 34.23517310503541
or in geometrized units (\(M^{-2}\)), in which case it is not necessary to specify the black hole mass:
sage: BH.roche_limit_radius(3.84e-5, rho_unit='M^{-2}') # tol 1.0e-13 34.22977166547967
Case of a corotating star:
sage: BH.roche_limit_radius(1, mass_bh=4.1e6, k_rot=1) # tol 1.0e-13 37.72150497210367
Case of a brown dwarf:
sage: BH.roche_limit_radius(131., mass_bh=4.1e6) # tol 1.0e-13 7.3103232747243165 sage: BH.roche_limit_radius(131., mass_bh=4.1e6, k_rot=1) # tol 1.0e-13 7.858389409707688
Case of a white dwarf:
sage: BH.roche_limit_radius(1.1e6, mass_bh=4.1e6, r_min=0.1) # tol 1.0e-13 0.2848049914201514 sage: BH.roche_limit_radius(1.1e6, mass_bh=4.1e6, k_rot=1, r_min=0.1) # tol 1.0e-13 0.3264724605157346
Roche limits around a rapidly rotating black hole:
sage: BH = KerrBH(0.999) sage: BH.roche_limit_radius(1, mass_bh=4.1e6) # tol 1.0e-13 34.250609907563984 sage: BH.roche_limit_radius(1, mass_bh=4.1e6, k_rot=1) # tol 1.0e-13 37.72350054417335 sage: BH.roche_limit_radius(64.2, mass_bh=4.1e6) # tol 1.0e-13 8.74356702311824 sage: BH.roche_limit_radius(64.2, mass_bh=4.1e6, k_rot=1) # tol 1.0e-13 9.575613156232857
- roche_volume(r0, k_rot)¶
Roche volume of a star on a given circular orbit.
The Roche volume depends on the rotational parameter
\[k_\omega := \frac{\omega}{\Omega}\]where \(\omega\) is the angular velocity of the star (assumed to be a rigid rotator) with respect to some inertial frame and \(\Omega\) is the orbital angular velocity (cf.
orbital_angular_velocity()). The Roche volume is computed according to formulas based on the Kerr metric and established by Dai & Blandford, Mon. Not. Roy. Astron. Soc. 434, 2948 (2013), doi:10.1093/mnras/stt1209.INPUT:
r0– Boyer-Lindquist radial coordinate \(r\) of the circular orbit, in units of the black hole massk_rot– rotational parameter \(k_\omega\) defined above
OUPUT:
the dimensionless quantity \(V_R / (\mu M^2)\), where \(V_R\) is the Roche volume, \(\mu\) the mass of the star and \(M\) the mass of the central black hole
EXAMPLES:
Roche volume around a Schwarzschild black hole:
sage: from kerrgeodesic_gw import KerrBH sage: BH = KerrBH(0) sage: BH.roche_volume(6, 0) # tol 1.0e-13 98.49600000000001
Comparison with Eq. (26) of Dai & Blandford (2013) doi:10.1093/mnras/stt1209:
sage: _ - 0.456*6^3 # tol 1.0e-13 0.000000000000000
Case \(k_\omega=1\):
sage: BH.roche_volume(6, 1) # tol 1.0e-13 79.145115913556
Comparison with Eq. (26) of Dai & Blandford (2013):
sage: _ - 0.456/(1+1/4.09)*6^3 # tol 1.0e-13 0.000000000000000
Newtonian limit:
sage: BH.roche_volume(1000, 0) # tol 1.0e-13 681633403.5759227
Comparison with Eq. (10) of Dai & Blandford (2013):
sage: _ - 0.683*1000^3 # tol 1.0e-13 -1.36659642407727e6
Roche volume around a rapidly rotating Kerr black hole:
sage: BH = KerrBH(0.9) sage: rI = BH.isco_radius() sage: BH.roche_volume(rI, 0) # tol 1.0e-13 5.70065302837734
Comparison with Eq. (26) of Dai & Blandford (2013):
sage: _ - 0.456*rI^3 # tol 1.0e-13 0.000000000000000
Case \(k_\omega=1\):
sage: BH.roche_volume(rI, 1) # tol 1.0e-13 4.58068190295940
Comparison with Eq. (26) of Dai & Blandford (2013):
sage: _ - 0.456/(1+1/4.09)*rI^3 # tol 1.0e-13 0.000000000000000
Newtonian limit:
sage: BH.roche_volume(1000, 0) # tol 1.0e-13 6.81881451514361e8
Comparison with Eq. (10) of Dai & Blandford (2013):
sage: _ - 0.683*1000^3 # tol 1.0e-13 -1.11854848563898e6
- spin()¶
Return the reduced angular momentum of the black hole.
EXAMPLES:
sage: from kerrgeodesic_gw import KerrBH sage: a, m = var('a m') sage: BH = KerrBH(a, m) sage: BH.spin() a
An alias is
angular_momentum():sage: BH.angular_momentum() a