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: 20110
Kernel: SageMath 8.9.beta4

Kerr spacetime in Kerr coordinates

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

These 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 worksheet:

version()
'SageMath version 8.9.beta4, Release Date: 2019-07-28'

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

%display latex

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

Parallelism().set(nproc=8)

Spacetime

We declare the spacetime manifold MM:

M = Manifold(4, 'M', structure='Lorentzian') print(M)
4-dimensional Lorentzian manifold M

and the Kerr coordinates (v,r,θ,ϕ)(v,r,\theta,\phi) as a chart on MM:

X.<v,r,th,ph> = M.chart(r'v r th:(0,pi):\theta ph:(0,2*pi):\phi') X
X.coord_range()

The Kerr parameters mm and aa:

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

Kerr metric

We define the metric gg by its components w.r.t. the Kerr coordinates:

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

The inverse metric is pretty simple:

g.inverse()[:]

as well as the determinant w.r.t. to the Kerr coordinates:

g.determinant().display()
g.determinant() == - (rho2*sin(th))^2

Let us check that we are dealing with a solution of the Einstein equation in vacuum:

g.ricci().display()

The Christoffel symbols w.r.t. the Kerr coordinates:

g.ricci()[0,0]
g.christoffel_symbols_display()

Vector normal to the hypersurfaces r=constr=\mathrm{const}

dr = X.coframe()[1] print(dr) dr.display()
1-form dr on the 4-dimensional Lorentzian manifold M
nr = dr.up(g) print(nr) nr.display()
Vector field on the 4-dimensional Lorentzian manifold M
assume(a^2<m^2) rp = m + sqrt(m^2-a^2) rp
p = M.point(coords=(v,rp,th,ph), name='p') print(p)
Point p on the 4-dimensional Lorentzian manifold M
X(p)
nrH = nr.at(p) print(nrH)
Tangent vector at Point p on the 4-dimensional Lorentzian manifold M
Tp = M.tangent_space(p) print(Tp)
Tangent space at Point p on the 4-dimensional Lorentzian manifold M
Tp.default_basis()
nrH[:]
OmegaH = a/(2*m*rp) OmegaH
xi = X.frame()[0] xi
eta = X.frame()[3] eta
chi = xi + OmegaH*eta chi.display()

Ingoing principal null geodesics

k = M.vector_field(name='k') k[1] = -1 k.display()

Let us check that kk is a null vector:

g(k,k).display()

Computation of kk\nabla_k k:

nab = g.connection() acc = nab(k).contract(k) acc.display()

Outgoing principal null geodesics

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

Let us check that \ell is a null vector:

g(el,el).display()

Computation of \nabla_\ell \ell:

acc = nab(el).contract(el) acc.display()

We check that \nabla_\ell \ell \propto \ell:

for i in [0,1,3]: show(acc[i] / el[i])

Hence we may write =κ\nabla_\ell\ell = \kappa \ell:

kappa = (acc[0] / el[0]).expr() kappa
acc == kappa * el

Surface gravity

On HH, \ell coincides with the Killing vector χ\chi:

el.at(p) == chi.at(p)

Therefore the surface gravity of the Kerr black hole is nothing but the value of the non-affinity coefficient of \ell on HH:

kappaH = kappa.subs(r=rp).simplify_full() kappaH
bool(kappaH == sqrt(m^2-a^2)/(2*m*(m+sqrt(m^2-a^2))))