Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

SageMath notebooks associated to the Black Hole Lectures (https://luth.obspm.fr/~luthier/gourgoulhon/bh16)

Project: BHLectures
Views: 20113
Kernel: SageMath 9.1.beta8

From Boyer-Lindquist to Kerr coordinates in Kerr spacetime

This Jupyter/SageMath notebook is relative to the lectures Geometry and physics of black holes.

The involved computations are based on tools developed through the SageManifolds project.

NB: a version of SageMath at least equal to 8.2 is required to run this notebook:

version()
'SageMath version 9.1.beta8, Release Date: 2020-03-18'

First we set up the notebook to display mathematical objects using LaTeX rendering:

%display latex

To speed up the computations, we ask for running them in parallel on 8 threads:

Parallelism().set(nproc=8)

Spacetime manifold

We declare the Kerr spacetime (or more precisely the Boyer-Lindquist domain of Kerr spacetime) as a 4-dimensional Lorentzian manifold:

M = Manifold(4, 'M', latex_name=r'\mathcal{M}', structure='Lorentzian') print(M)
4-dimensional Lorentzian manifold M

Let us declare the Boyer-Lindquist coordinates via the method chart(), the argument of which is a string expressing the coordinates names, their ranges (the default is (,+)(-\infty,+\infty)) and their LaTeX symbols:

BL.<t,r,th,ph> = M.chart(r't r th:(0,pi):\theta ph:(0,2*pi):periodic:\phi') print(BL) ; BL
Chart (M, (t, r, th, ph))
BL[0], BL[1]
BL.coord_range()

Metric tensor

The 2 parameters mm and aa of the Kerr spacetime are declared as symbolic variables:

var('m, a', domain='real')
assume(m>a) assume(m^2 - a^2 >0)

We get the (yet undefined) spacetime metric by

g = M.metric()

The metric is set by its components in the coordinate frame associated with Boyer-Lindquist coordinates, which is the current manifold's default frame:

rho2 = r^2 + (a*cos(th))^2 Delta = r^2 -2*m*r + a^2 g[0,0] = -(1-2*m*r/rho2) g[0,3] = -2*a*m*r*sin(th)^2/rho2 g[1,1], g[2,2] = rho2/Delta, rho2 g[3,3] = (r^2+a^2+2*m*r*(a*sin(th))^2/rho2)*sin(th)^2 g.display()

A matrix view of the components with respect to the manifold's default vector frame:

g[:]

The list of the non-vanishing components:

g.display_comp()

Levi-Civita Connection

The Levi-Civita connection \nabla associated with gg:

nabla = g.connection() ; print(nabla)
Levi-Civita connection nabla_g associated with the Lorentzian metric g on the 4-dimensional Lorentzian manifold M

Let us verify that the covariant derivative of gg with respect to \nabla vanishes identically:

nabla(g).display()

3+1 Kerr coordinates

KC.<ti, r, th, tph> = M.chart(r'ti:\tilde{t} r th:(0,pi):\theta tph:(0,2*pi):periodic:\tilde{\phi}') KC

The transition from Boyer-Lindquist to 3+1 Kerr coordinates:

sma = sqrt(m^2 - a^2) rp = m + sma rm = m - sma BL_to_KC = BL.transition_map(KC, [t + m/sma*(rp*ln((r-rp)/(2*m)) - rm*ln((r-rm)/(2*m))), r, th, ph + a/(2*sma)*ln((r-rp)/(r-rm))]) BL_to_KC.display()
BL_to_KC.inverse().display()
for v in KC.frame(): show(v.display())

Components of the metric tensor w.r.t. 3+1 Kerr coordinates

g.display_comp(KC.frame(), KC, only_nonredundant=True)

grϕ~g_{r\tilde{\phi}} can simplified further:

g13 = g[KC.frame(), 1, 3, KC] g13
g13.factor()
g13 == - a*(1 + 2*m*r/rho2)*sin(th)^2

We then set (using add_comp() to keep the components with respect to BL coordinates):

g.add_comp(KC.frame())[1, 3, KC] = - a*(1 + 2*m*r/rho2)*sin(th)^2

Similarly gϕ~ϕ~g_{\tilde{\phi}\tilde{\phi}} can simplified:

g33 = g[KC.frame(), 3, 3, KC] g33
g33.factor()
g33 == (r^2 + a^2 + 2*a^2*m*r*sin(th)^2/rho2)*sin(th)^2

We then set (using add_comp() to keep the components with respect to BL coordinates):

g.add_comp(KC.frame())[3, 3, KC] = (r^2 + a^2 + 2*a^2*m*r*sin(th)^2/rho2)*sin(th)^2
g.display_comp(KC.frame(), KC, only_nonredundant=True)

Principal null vectors

Let kk be the null vector tangent to the ingoing principal null geodesics associated with their affine parameter r-r; the expression of kk in term of the 3+1 ingoing Kerr coordinates (t~,r,θ,ϕ~)(\tilde{t}, r, \theta, \tilde\phi) is k=t~r~k = \frac{\partial}{\partial\tilde{t}} - \frac{\partial}{\partial\tilde{r}} The expression of kk in terms of the Boyer-Lindquist coordinates is

k = M.vector_field(name='k') k[KC.frame(),:,KC] = [1, -1, 0, 0] k.display(KC)
k.display(BL)

Regarding the null vector tangent to the outgoing principal null geodesics, we select one associated with a (non-affine) parameter λ\lambda that is regular accross the two Killing horizons:

el = M.vector_field(name='el', latex_name=r'\ell') el[KC.frame(),:,KC] = [1/2 + m*r/(r^2+a^2), 1/2 - m*r/(r^2+a^2), 0, a/(r^2 + a^2)] el.display(KC)
el.display(BL)

Let us check that kk and \ell are null vectors:

g(k, k).expr()
g(el, el).expr()

Their scalar product is ρ2/(r2+a2)-\rho^2/(r^2 + a^2):

g(k, el).expr()
uk = k.down(g) uk.display(BL)
uk.display(KC)
uk[3]
uk[3].factor()
uk[3] == a*sin(th)^2