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.5.beta2

Maximal extension of the extremal Kerr black hole

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

The computations make use of tools developed through the SageManifolds project.

version()
'SageMath version 9.5.beta2, Release Date: 2021-09-26'

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

%display latex

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

Parallelism().set(nproc=8)

Spacetime manifold

We declare the Kerr spacetime as a 4-dimensional Lorentzian manifold MM:

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

We then introduce (3+1 version of) the Kerr coordinates (t~,r,θ,φ~)(\tilde{t},r,\theta,\tilde{\varphi}) as a chart KC on MM, via the method chart(). The argument of the latter is a string (delimited by r"..." because of the backslash symbols) expressing the coordinates names, their ranges (the default is (,+)(-\infty,+\infty)) and their LaTeX symbols:

KC.<tt,r,th,tph> = M.chart(r"tt:\tilde{t} r th:(0,pi):\theta tph:(0,2*pi):periodic:\tilde{\varphi}") print(KC); KC
Chart (M, (tt, r, th, tph))
(M,(t~,r,θ,φ~))\renewcommand{\Bold}[1]{\mathbf{#1}}\left(M,({\tilde{t}}, r, {\theta}, {\tilde{\varphi}})\right)
KC.coord_range()
t~: (,+);r: (,+);θ: (0,π);φ~: [0,2π](periodic)\renewcommand{\Bold}[1]{\mathbf{#1}}{\tilde{t}} :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( -\infty, +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\tilde{\varphi}} :\ \left[ 0 , 2 \, \pi \right] \mbox{(periodic)}

Metric tensor

The mass parameter mm of the extremal Kerr spacetime is declared as a symbolic variable:

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

We get the (yet undefined) spacetime metric:

g = M.metric()

and initialize it by providing its components in the coordinate frame associated with the Kerr coordinates, which is the current manifold's default frame:

rho2 = r^2 + (m*cos(th))^2 g[0,0] = - (1 - 2*m*r/rho2) g[0,1] = 2*m*r/rho2 g[0,3] = -2*m^2*r*sin(th)^2/rho2 g[1,1] = 1 + 2*m*r/rho2 g[1,3] = -m*(1 + 2*m*r/rho2)*sin(th)^2 g[2,2] = rho2 g[3,3] = (r^2 + m^2 + 2*m^3*r*sin(th)^2/rho2)*sin(th)^2 g.display()
g=(2mrm2cos(θ)2+r21)dt~dt~+(2mrm2cos(θ)2+r2)dt~dr+(2m2rsin(θ)2m2cos(θ)2+r2)dt~dφ~+(2mrm2cos(θ)2+r2)drdt~+(2mrm2cos(θ)2+r2+1)drdrm(2mrm2cos(θ)2+r2+1)sin(θ)2drdφ~+(m2cos(θ)2+r2)dθdθ+(2m2rsin(θ)2m2cos(θ)2+r2)dφ~dt~m(2mrm2cos(θ)2+r2+1)sin(θ)2dφ~dr+(2m3rsin(θ)2m2cos(θ)2+r2+m2+r2)sin(θ)2dφ~dφ~\renewcommand{\Bold}[1]{\mathbf{#1}}g = \left( \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} - 1 \right) \mathrm{d} {\tilde{t}}\otimes \mathrm{d} {\tilde{t}} + \left( \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{t}}\otimes \mathrm{d} r + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{t}}\otimes \mathrm{d} {\tilde{\varphi}} + \left( \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} r\otimes \mathrm{d} {\tilde{t}} + \left( \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1 \right) \mathrm{d} r\otimes \mathrm{d} r -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} \mathrm{d} r\otimes \mathrm{d} {\tilde{\varphi}} + \left( m^{2} \cos\left({\theta}\right)^{2} + r^{2} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\varphi}}\otimes \mathrm{d} {\tilde{t}} -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} \mathrm{d} {\tilde{\varphi}}\otimes \mathrm{d} r + {\left(\frac{2 \, m^{3} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + m^{2} + r^{2}\right)} \sin\left({\theta}\right)^{2} \mathrm{d} {\tilde{\varphi}}\otimes \mathrm{d} {\tilde{\varphi}}

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

g[:]
(2mrm2cos(θ)2+r212mrm2cos(θ)2+r202m2rsin(θ)2m2cos(θ)2+r22mrm2cos(θ)2+r22mrm2cos(θ)2+r2+10m(2mrm2cos(θ)2+r2+1)sin(θ)200m2cos(θ)2+r202m2rsin(θ)2m2cos(θ)2+r2m(2mrm2cos(θ)2+r2+1)sin(θ)20(2m3rsin(θ)2m2cos(θ)2+r2+m2+r2)sin(θ)2)\renewcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} - 1 & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} & 0 & -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \\ \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1 & 0 & -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} \\ 0 & 0 & m^{2} \cos\left({\theta}\right)^{2} + r^{2} & 0 \\ -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} & -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} & 0 & {\left(\frac{2 \, m^{3} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + m^{2} + r^{2}\right)} \sin\left({\theta}\right)^{2} \end{array}\right)

The list of the non-vanishing components:

g.display_comp()
gt~t~t~t~=2mrm2cos(θ)2+r21gt~rt~r=2mrm2cos(θ)2+r2gt~φ~t~φ~=2m2rsin(θ)2m2cos(θ)2+r2grt~rt~=2mrm2cos(θ)2+r2grrrr=2mrm2cos(θ)2+r2+1grφ~rφ~=m(2mrm2cos(θ)2+r2+1)sin(θ)2gθθθθ=m2cos(θ)2+r2gφ~t~φ~t~=2m2rsin(θ)2m2cos(θ)2+r2gφ~rφ~r=m(2mrm2cos(θ)2+r2+1)sin(θ)2gφ~φ~φ~φ~=(2m3rsin(θ)2m2cos(θ)2+r2+m2+r2)sin(θ)2\renewcommand{\Bold}[1]{\mathbf{#1}}\begin{array}{lcl} g_{ \, {\tilde{t}} \, {\tilde{t}} }^{ \phantom{\, {\tilde{t}}}\phantom{\, {\tilde{t}}} } & = & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} - 1 \\ g_{ \, {\tilde{t}} \, r }^{ \phantom{\, {\tilde{t}}}\phantom{\, r} } & = & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \\ g_{ \, {\tilde{t}} \, {\tilde{\varphi}} }^{ \phantom{\, {\tilde{t}}}\phantom{\, {\tilde{\varphi}}} } & = & -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \\ g_{ \, r \, {\tilde{t}} }^{ \phantom{\, r}\phantom{\, {\tilde{t}}} } & = & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \\ g_{ \, r \, r }^{ \phantom{\, r}\phantom{\, r} } & = & \frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1 \\ g_{ \, r \, {\tilde{\varphi}} }^{ \phantom{\, r}\phantom{\, {\tilde{\varphi}}} } & = & -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} \\ g_{ \, {\theta} \, {\theta} }^{ \phantom{\, {\theta}}\phantom{\, {\theta}} } & = & m^{2} \cos\left({\theta}\right)^{2} + r^{2} \\ g_{ \, {\tilde{\varphi}} \, {\tilde{t}} }^{ \phantom{\, {\tilde{\varphi}}}\phantom{\, {\tilde{t}}} } & = & -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \\ g_{ \, {\tilde{\varphi}} \, r }^{ \phantom{\, {\tilde{\varphi}}}\phantom{\, r} } & = & -m {\left(\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + 1\right)} \sin\left({\theta}\right)^{2} \\ g_{ \, {\tilde{\varphi}} \, {\tilde{\varphi}} }^{ \phantom{\, {\tilde{\varphi}}}\phantom{\, {\tilde{\varphi}}} } & = & {\left(\frac{2 \, m^{3} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} + m^{2} + r^{2}\right)} \sin\left({\theta}\right)^{2} \end{array}

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

#g.ricci().display()

Regions MIM_{\rm I} and MIIIM_{\rm III}

M_I = M.open_subset('M_I', latex_name=r'M_{\rm I}', coord_def={KC: r>m}) KC.restrict(M_I).coord_range()
t~: (,+);r: (m,+);θ: (,+);φ~: (,+)\renewcommand{\Bold}[1]{\mathbf{#1}}{\tilde{t}} :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( m , +\infty \right) ;\quad {\theta} :\ \left( -\infty, +\infty \right) ;\quad {\tilde{\varphi}} :\ \left( -\infty, +\infty \right)
M_III = M.open_subset('M_III', latex_name=r'M_{\rm III}', coord_def={KC: r<m}) KC.restrict(M_III).coord_range()
t~: (,+);r: (,m);θ: (,+);φ~: (,+)\renewcommand{\Bold}[1]{\mathbf{#1}}{\tilde{t}} :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( -\infty, m \right) ;\quad {\theta} :\ \left( -\infty, +\infty \right) ;\quad {\tilde{\varphi}} :\ \left( -\infty, +\infty \right)

Boyer-Lindquist coordinates on MIM_{\rm I}

Let us introduce on the chart of Boyer-Lindquist coordinates (t,r,θ,φ)(t,r,\theta,\varphi) on MIM_{\rm I}:

BL.<t,r,th,ph> = M_I.chart(r"t r:(m,+oo) th:(0,pi):\theta ph:(0,2*pi):periodic:\varphi") print(BL); BL
Chart (M_I, (t, r, th, ph))
(MI,(t,r,θ,φ))\renewcommand{\Bold}[1]{\mathbf{#1}}\left(M_{\rm I},(t, r, {\theta}, {\varphi})\right)
BL.coord_range()
t: (,+);r: (m,+);θ: (0,π);φ: [0,2π](periodic)\renewcommand{\Bold}[1]{\mathbf{#1}}t :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( m , +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\varphi} :\ \left[ 0 , 2 \, \pi \right] \mbox{(periodic)}
KC_to_BL = KC.restrict(M_I).transition_map(BL, [tt + 2*m^2/(r-m) - 2*m*ln(abs(r-m)/m), r, th, tph + m/(r-m)]) KC_to_BL.display()
{t=2mlog(m+rm)2m2mr+t~r=rθ=θφ=φ~mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} t & = & -2 \, m \log\left(\frac{{\left| -m + r \right|}}{m}\right) - \frac{2 \, m^{2}}{m - r} + {\tilde{t}} \\ r & = & r \\ {\theta} & = & {\theta} \\ {\varphi} & = & {\tilde{\varphi}} - \frac{m}{m - r} \end{array}\right.
KC_to_BL.inverse().display()
{t~=2m2log(m)2mrlog(m)2m2(mr)t2(m2mr)log(m+r)mrr=rθ=θφ~=mφφr+mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} {\tilde{t}} & = & -\frac{2 \, m^{2} \log\left(m\right) - 2 \, m r \log\left(m\right) - 2 \, m^{2} - {\left(m - r\right)} t - 2 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{m - r} \\ r & = & r \\ {\theta} & = & {\theta} \\ {\tilde{\varphi}} & = & \frac{m {\varphi} - {\varphi} r + m}{m - r} \end{array}\right.
g.display(BL)
g=(m2cos(θ)22mr+r2m2cos(θ)2+r2)dtdt+(2m2rsin(θ)2m2cos(θ)2+r2)dtdφ+(m2cos(θ)2+r2m22mr+r2)drdr+(m2cos(θ)2+r2)dθdθ+(2m2rsin(θ)2m2cos(θ)2+r2)dφdt+(2m3rsin(θ)4+(m2r2+r4+(m4+m2r2)cos(θ)2)sin(θ)2m2cos(θ)2+r2)dφdφ\renewcommand{\Bold}[1]{\mathbf{#1}}g = \left( -\frac{m^{2} \cos\left({\theta}\right)^{2} - 2 \, m r + r^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} t\otimes \mathrm{d} t + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} t\otimes \mathrm{d} {\varphi} + \left( \frac{m^{2} \cos\left({\theta}\right)^{2} + r^{2}}{m^{2} - 2 \, m r + r^{2}} \right) \mathrm{d} r\otimes \mathrm{d} r + \left( m^{2} \cos\left({\theta}\right)^{2} + r^{2} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\varphi}\otimes \mathrm{d} t + \left( \frac{2 \, m^{3} r \sin\left({\theta}\right)^{4} + {\left(m^{2} r^{2} + r^{4} + {\left(m^{4} + m^{2} r^{2}\right)} \cos\left({\theta}\right)^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\varphi}\otimes \mathrm{d} {\varphi}

Ingoing principal null geodesics

k = M.vector_field(1, -1, 0, 0, name='k') k.display()
k=t~r\renewcommand{\Bold}[1]{\mathbf{#1}}k = \frac{\partial}{\partial {\tilde{t}} }-\frac{\partial}{\partial r }

Let us check that kk is a null vector:

g(k, k).expr()
0\renewcommand{\Bold}[1]{\mathbf{#1}}0

Check that kk is a geodesic vector field, i.e. obeys kk=0\nabla_k k = 0:

nabla = g.connection()
nabla(k).contract(k).display()
0\renewcommand{\Bold}[1]{\mathbf{#1}}0

Expression of kk with respect to the Boyer-Lindquist frame:

k.display(BL)
k=(m2+r2m22mr+r2)tr+(mm22mr+r2)φ\renewcommand{\Bold}[1]{\mathbf{#1}}k = \left( \frac{m^{2} + r^{2}}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial t } -\frac{\partial}{\partial r } + \left( \frac{m}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\varphi} }

Outgoing principal null geodesics

el = M.vector_field((r + m)^2/(2*(r^2 + m^2)), (r - m)^2/(2*(r^2 + m^2)), 0, m/(r^2 + m^2), name='el', latex_name=r'\ell') el.display()
=(m+r)22(m2+r2)t~+(mr)22(m2+r2)r+(mm2+r2)φ~\renewcommand{\Bold}[1]{\mathbf{#1}}\ell = \frac{{\left(m + r\right)}^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \frac{\partial}{\partial {\tilde{t}} } + \frac{{\left(m - r\right)}^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \frac{\partial}{\partial r } + \left( \frac{m}{m^{2} + r^{2}} \right) \frac{\partial}{\partial {\tilde{\varphi}} }

Let us check that \ell is a null vector:

g(el, el).expr()
0\renewcommand{\Bold}[1]{\mathbf{#1}}0

Expression of \ell with respect to the Boyer-Lindquist frame:

el.display(BL)
=12t+(mr)22(m2+r2)r+m2(m2+r2)φ\renewcommand{\Bold}[1]{\mathbf{#1}}\ell = \frac{1}{2} \frac{\partial}{\partial t } + \frac{{\left(m - r\right)}^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \frac{\partial}{\partial r } + \frac{m}{2 \, {\left(m^{2} + r^{2}\right)}} \frac{\partial}{\partial {\varphi} }

Computation of \nabla_\ell \ell:

acc = nabla(el).contract(el) acc.display()
(m5+2m4r2m2r3mr42(m6+3m4r2+3m2r4+r6))t~+(m52m4r+2m2r3mr42(m6+3m4r2+3m2r4+r6))r+(m4m2r2m6+3m4r2+3m2r4+r6)φ~\renewcommand{\Bold}[1]{\mathbf{#1}}\left( -\frac{m^{5} + 2 \, m^{4} r - 2 \, m^{2} r^{3} - m r^{4}}{2 \, {\left(m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}\right)}} \right) \frac{\partial}{\partial {\tilde{t}} } + \left( -\frac{m^{5} - 2 \, m^{4} r + 2 \, m^{2} r^{3} - m r^{4}}{2 \, {\left(m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}\right)}} \right) \frac{\partial}{\partial r } + \left( -\frac{m^{4} - m^{2} r^{2}}{m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}} \right) \frac{\partial}{\partial {\tilde{\varphi}} }

We check that =κ\nabla_\ell \ell = \kappa \ell:

kappa = acc[0] / el[0] kappa
m3mr2m4+2m2r2+r4\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{m^{3} - m r^{2}}{m^{4} + 2 \, m^{2} r^{2} + r^{4}}
kappa.factor()
(m+r)(mr)m(m2+r2)2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{{\left(m + r\right)} {\left(m - r\right)} m}{{\left(m^{2} + r^{2}\right)}^{2}}
acc == kappa*el
True\renewcommand{\Bold}[1]{\mathbf{#1}}\mathrm{True}

Outgoing Kerr coordinates on MIM_{\rm I}

OKC.<to,r,th,oph> = M_I.chart(r"to:\tilde{\tilde{t}} r:(m,+oo) th:(0,pi):\theta oph:(0,2*pi):periodic:\tilde{\tilde{\varphi}}") OKC.coord_range()
t~~: (,+);r: (m,+);θ: (0,π);φ~~: [0,2π](periodic)\renewcommand{\Bold}[1]{\mathbf{#1}}{\tilde{\tilde{t}}} :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( m , +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\tilde{\tilde{\varphi}}} :\ \left[ 0 , 2 \, \pi \right] \mbox{(periodic)}
BL_to_OKC = BL.transition_map(OKC, [t + 2*m^2/(r-m) - 2*m*ln(abs(r-m)/m), r, th, ph + m/(r-m)]) BL_to_OKC.display()
{t~~=2mlog(m+rm)2m2mr+tr=rθ=θφ~~=φmmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} {\tilde{\tilde{t}}} & = & -2 \, m \log\left(\frac{{\left| -m + r \right|}}{m}\right) - \frac{2 \, m^{2}}{m - r} + t \\ r & = & r \\ {\theta} & = & {\theta} \\ {\tilde{\tilde{\varphi}}} & = & {\varphi} - \frac{m}{m - r} \end{array}\right.
BL_to_OKC.inverse().display()
{t=2m2log(m)2mrlog(m)2m2(mr)t~~2(m2mr)log(m+r)mrr=rθ=θφ=mφ~~φ~~r+mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} t & = & -\frac{2 \, m^{2} \log\left(m\right) - 2 \, m r \log\left(m\right) - 2 \, m^{2} - {\left(m - r\right)} {\tilde{\tilde{t}}} - 2 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{m - r} \\ r & = & r \\ {\theta} & = & {\theta} \\ {\varphi} & = & \frac{m {\tilde{\tilde{\varphi}}} - {\tilde{\tilde{\varphi}}} r + m}{m - r} \end{array}\right.
KC_to_OKC = BL_to_OKC * KC_to_BL.restrict(M_I) KC_to_OKC.display()
{t~~=4m2log(m)4mrlog(m)4m2+(mr)t~4(m2mr)log(m+r)mrr=rθ=θφ~~=(mr)φ~2mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} {\tilde{\tilde{t}}} & = & \frac{4 \, m^{2} \log\left(m\right) - 4 \, m r \log\left(m\right) - 4 \, m^{2} + {\left(m - r\right)} {\tilde{t}} - 4 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{m - r} \\ r & = & r \\ {\theta} & = & {\theta} \\ {\tilde{\tilde{\varphi}}} & = & \frac{{\left(m - r\right)} {\tilde{\varphi}} - 2 \, m}{m - r} \end{array}\right.
KC_to_OKC.inverse().display()
{t~=4m2log(m)4mrlog(m)4m2(mr)t~~4(m2mr)log(m+r)mrr=rθ=θφ~=mφ~~φ~~r+2mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} {\tilde{t}} & = & -\frac{4 \, m^{2} \log\left(m\right) - 4 \, m r \log\left(m\right) - 4 \, m^{2} - {\left(m - r\right)} {\tilde{\tilde{t}}} - 4 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{m - r} \\ r & = & r \\ {\theta} & = & {\theta} \\ {\tilde{\varphi}} & = & \frac{m {\tilde{\tilde{\varphi}}} - {\tilde{\tilde{\varphi}}} r + 2 \, m}{m - r} \end{array}\right.
M_I.set_default_chart(OKC) M_I.set_default_frame(OKC.frame())
gI = g.restrict(M_I) gI.display()
g=(m2cos(θ)22mr+r2m2cos(θ)2+r2)dt~~dt~~+(2mrm2cos(θ)2+r2)dt~~dr+(2m2rsin(θ)2m2cos(θ)2+r2)dt~~dφ~~+(2mrm2cos(θ)2+r2)drdt~~+(m2cos(θ)2+2mr+r2m2cos(θ)2+r2)drdr+(m3sin(θ)4(m3+2m2r+mr2)sin(θ)2m2cos(θ)2+r2)drdφ~~+(m2cos(θ)2+r2)dθdθ+(2m2rsin(θ)2m2cos(θ)2+r2)dφ~~dt~~+(m3sin(θ)4(m3+2m2r+mr2)sin(θ)2m2cos(θ)2+r2)dφ~~dr+(2m3rsin(θ)4+(m2r2+r4+(m4+m2r2)cos(θ)2)sin(θ)2m2cos(θ)2+r2)dφ~~dφ~~\renewcommand{\Bold}[1]{\mathbf{#1}}g = \left( -\frac{m^{2} \cos\left({\theta}\right)^{2} - 2 \, m r + r^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{t}}}\otimes \mathrm{d} {\tilde{\tilde{t}}} + \left( -\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{t}}}\otimes \mathrm{d} r + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{t}}}\otimes \mathrm{d} {\tilde{\tilde{\varphi}}} + \left( -\frac{2 \, m r}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} r\otimes \mathrm{d} {\tilde{\tilde{t}}} + \left( \frac{m^{2} \cos\left({\theta}\right)^{2} + 2 \, m r + r^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} r\otimes \mathrm{d} r + \left( -\frac{m^{3} \sin\left({\theta}\right)^{4} - {\left(m^{3} + 2 \, m^{2} r + m r^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} r\otimes \mathrm{d} {\tilde{\tilde{\varphi}}} + \left( m^{2} \cos\left({\theta}\right)^{2} + r^{2} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( -\frac{2 \, m^{2} r \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{\varphi}}}\otimes \mathrm{d} {\tilde{\tilde{t}}} + \left( -\frac{m^{3} \sin\left({\theta}\right)^{4} - {\left(m^{3} + 2 \, m^{2} r + m r^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{\varphi}}}\otimes \mathrm{d} r + \left( \frac{2 \, m^{3} r \sin\left({\theta}\right)^{4} + {\left(m^{2} r^{2} + r^{4} + {\left(m^{4} + m^{2} r^{2}\right)} \cos\left({\theta}\right)^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}} \right) \mathrm{d} {\tilde{\tilde{\varphi}}}\otimes \mathrm{d} {\tilde{\tilde{\varphi}}}
gI[1,3]
m3sin(θ)4(m3+2m2r+mr2)sin(θ)2m2cos(θ)2+r2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{m^{3} \sin\left({\theta}\right)^{4} - {\left(m^{3} + 2 \, m^{2} r + m r^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}}
gI[1,3] == m*(1 + 2*m*r/rho2)*sin(th)^2
True\renewcommand{\Bold}[1]{\mathbf{#1}}\mathrm{True}
gI[3,3]
2m3rsin(θ)4+(m2r2+r4+(m4+m2r2)cos(θ)2)sin(θ)2m2cos(θ)2+r2\renewcommand{\Bold}[1]{\mathbf{#1}}\frac{2 \, m^{3} r \sin\left({\theta}\right)^{4} + {\left(m^{2} r^{2} + r^{4} + {\left(m^{4} + m^{2} r^{2}\right)} \cos\left({\theta}\right)^{2}\right)} \sin\left({\theta}\right)^{2}}{m^{2} \cos\left({\theta}\right)^{2} + r^{2}}
g[3,3] == (r^2 + m^2 + 2*m^3*r*sin(th)^2/rho2)*sin(th)^2
True\renewcommand{\Bold}[1]{\mathbf{#1}}\mathrm{True}
ol = M_I.vector_field({OKC.frame(): (1, 1, 0, 0)}, name='ol', latex_name=r"\ell'") ol.display()
=t~~+r\renewcommand{\Bold}[1]{\mathbf{#1}}\ell' = \frac{\partial}{\partial {\tilde{\tilde{t}}} }+\frac{\partial}{\partial r }
ol.display(KC.restrict(M_I).frame())
=(m2+2mr+r2m22mr+r2)t~+r+(2mm22mr+r2)φ~\renewcommand{\Bold}[1]{\mathbf{#1}}\ell' = \left( \frac{m^{2} + 2 \, m r + r^{2}}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\tilde{t}} } +\frac{\partial}{\partial r } + \left( \frac{2 \, m}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\tilde{\varphi}} }
ol.display(BL.frame())
=(m2+r2m22mr+r2)t+r+(mm22mr+r2)φ\renewcommand{\Bold}[1]{\mathbf{#1}}\ell' = \left( \frac{m^{2} + r^{2}}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial t } +\frac{\partial}{\partial r } + \left( \frac{m}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\varphi} }
g(ol, ol).expr()
0\renewcommand{\Bold}[1]{\mathbf{#1}}0
nabla.coef(OKC.frame())
3-indicesxcomponentsxw.r.t.xCoordinatexframex(M_I,x(∂/∂to,∂/∂r,∂/∂th,∂/∂oph)),xwithxsymmetryxonxthexindexxpositionsx(1,x2)\renewcommand{\Bold}[1]{\mathbf{#1}}\verb|3-indices|\phantom{\verb!x!}\verb|components|\phantom{\verb!x!}\verb|w.r.t.|\phantom{\verb!x!}\verb|Coordinate|\phantom{\verb!x!}\verb|frame|\phantom{\verb!x!}\verb|(M_I,|\phantom{\verb!x!}\verb|(∂/∂to,∂/∂r,∂/∂th,∂/∂oph)),|\phantom{\verb!x!}\verb|with|\phantom{\verb!x!}\verb|symmetry|\phantom{\verb!x!}\verb|on|\phantom{\verb!x!}\verb|the|\phantom{\verb!x!}\verb|index|\phantom{\verb!x!}\verb|positions|\phantom{\verb!x!}\verb|(1,|\phantom{\verb!x!}\verb|2)|
nabla(ol).contract(ol).display()
0\renewcommand{\Bold}[1]{\mathbf{#1}}0
elI = el.restrict(M_I) elI.display()
=(m22mr+r22(m2+r2))t~~+(m22mr+r22(m2+r2))r\renewcommand{\Bold}[1]{\mathbf{#1}}\ell = \left( \frac{m^{2} - 2 \, m r + r^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \right) \frac{\partial}{\partial {\tilde{\tilde{t}}} } + \left( \frac{m^{2} - 2 \, m r + r^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \right) \frac{\partial}{\partial r }

Check of the relation =2r2+m2(rm)2\ell' = 2 \frac{r^2 + m^2}{(r - m)^2} \, \ell:

ol == 2*(r^2 + m^2)/(r - m)^2 * elI
True\renewcommand{\Bold}[1]{\mathbf{#1}}\mathrm{True}
kI = k.restrict(M_I) kI.display()
k=(m2+2mr+r2m22mr+r2)t~~r+(2mm22mr+r2)φ~~\renewcommand{\Bold}[1]{\mathbf{#1}}k = \left( \frac{m^{2} + 2 \, m r + r^{2}}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\tilde{\tilde{t}}} } -\frac{\partial}{\partial r } + \left( \frac{2 \, m}{m^{2} - 2 \, m r + r^{2}} \right) \frac{\partial}{\partial {\tilde{\tilde{\varphi}}} }
ok = (r - m)^2/(2*(r^2 + m^2)) * kI ok.set_name('ok', latex_name=r"k'") ok.display()
k=(m2+2mr+r22(m2+r2))t~~+(m22mr+r22(m2+r2))r+(mm2+r2)φ~~\renewcommand{\Bold}[1]{\mathbf{#1}}k' = \left( \frac{m^{2} + 2 \, m r + r^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \right) \frac{\partial}{\partial {\tilde{\tilde{t}}} } + \left( -\frac{m^{2} - 2 \, m r + r^{2}}{2 \, {\left(m^{2} + r^{2}\right)}} \right) \frac{\partial}{\partial r } + \left( \frac{m}{m^{2} + r^{2}} \right) \frac{\partial}{\partial {\tilde{\tilde{\varphi}}} }
g(k, el).expr()
m2cos(θ)2+r2m2+r2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{m^{2} \cos\left({\theta}\right)^{2} + r^{2}}{m^{2} + r^{2}}
g(ok, ol).expr()
m2cos(θ)2+r2m2+r2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{m^{2} \cos\left({\theta}\right)^{2} + r^{2}}{m^{2} + r^{2}}
g(k, ol).expr().factor()
2(m2cos(θ)2+r2)(mr)2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{2 \, {\left(m^{2} \cos\left({\theta}\right)^{2} + r^{2}\right)}}{{\left(m - r\right)}^{2}}
g(ok, el).expr().factor()
(m2cos(θ)2+r2)(mr)22(m2+r2)2\renewcommand{\Bold}[1]{\mathbf{#1}}-\frac{{\left(m^{2} \cos\left({\theta}\right)^{2} + r^{2}\right)} {\left(m - r\right)}^{2}}{2 \, {\left(m^{2} + r^{2}\right)}^{2}}

Non-affinity coefficient of kk'

acc_ok = nabla(ok).contract(ok) acc_ok.display()
(m5+2m4r2m2r3mr42(m6+3m4r2+3m2r4+r6))t~~+(m52m4r+2m2r3mr42(m6+3m4r2+3m2r4+r6))r+(m4m2r2m6+3m4r2+3m2r4+r6)φ~~\renewcommand{\Bold}[1]{\mathbf{#1}}\left( \frac{m^{5} + 2 \, m^{4} r - 2 \, m^{2} r^{3} - m r^{4}}{2 \, {\left(m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}\right)}} \right) \frac{\partial}{\partial {\tilde{\tilde{t}}} } + \left( -\frac{m^{5} - 2 \, m^{4} r + 2 \, m^{2} r^{3} - m r^{4}}{2 \, {\left(m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}\right)}} \right) \frac{\partial}{\partial r } + \left( \frac{m^{4} - m^{2} r^{2}}{m^{6} + 3 \, m^{4} r^{2} + 3 \, m^{2} r^{4} + r^{6}} \right) \frac{\partial}{\partial {\tilde{\tilde{\varphi}}} }
kappa_ok = acc_ok[0] / ok[0] kappa_ok.factor()
(m+r)(mr)m(m2+r2)2\renewcommand{\Bold}[1]{\mathbf{#1}}\frac{{\left(m + r\right)} {\left(m - r\right)} m}{{\left(m^{2} + r^{2}\right)}^{2}}

We check that kk=κkk\nabla_{k'} k' = \kappa_{k'} k':

acc_ok == kappa_ok * ok
True\renewcommand{\Bold}[1]{\mathbf{#1}}\mathrm{True}

Compactified coordinates on MM

CC.<T,X,th,tph> = M.chart(r"T X th:(0,pi):\theta tph:(0,2*pi):periodic:\tilde{\varphi}") CC
(M,(T,X,θ,φ~))\renewcommand{\Bold}[1]{\mathbf{#1}}\left(M,(T, X, {\theta}, {\tilde{\varphi}})\right)
uc = (tt - r)/m + 4*m/(r - m) - 4*ln(abs((r - m)/m)) vc = (tt + r)/m KC_to_CC = KC.transition_map(CC, [atan(uc/2) + atan(vc/2) + pi*unit_step(m - r), atan(vc/2) - atan(uc/2) - pi*unit_step(m - r), th, tph]) KC_to_CC.display()
{T=πu(mr)+arctan(2mmrrt~2m2log(mrm))+arctan(r+t~2m)X=πu(mr)arctan(2mmrrt~2m2log(mrm))+arctan(r+t~2m)θ=θφ~=φ~\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} T & = & \pi \mathrm{u}\left(m - r\right) + \arctan\left(-\frac{2 \, m}{m - r} - \frac{r - {\tilde{t}}}{2 \, m} - 2 \, \log\left({\left| \frac{m - r}{m} \right|}\right)\right) + \arctan\left(\frac{r + {\tilde{t}}}{2 \, m}\right) \\ X & = & -\pi \mathrm{u}\left(m - r\right) - \arctan\left(-\frac{2 \, m}{m - r} - \frac{r - {\tilde{t}}}{2 \, m} - 2 \, \log\left({\left| \frac{m - r}{m} \right|}\right)\right) + \arctan\left(\frac{r + {\tilde{t}}}{2 \, m}\right) \\ {\theta} & = & {\theta} \\ {\tilde{\varphi}} & = & {\tilde{\varphi}} \end{array}\right.
OKC_to_CC = KC_to_CC.restrict(M_I) * KC_to_OKC.inverse() OKC_to_CC.display()
{T=arctan(4m2log(m)4m2(4mlog(m)+m)r+r2(mr)t~~4(m2mr)log(m+r)2(m2mr))+arctan(rt~~2m)X=arctan(4m2log(m)4m2(4mlog(m)+m)r+r2(mr)t~~4(m2mr)log(m+r)2(m2mr))arctan(rt~~2m)θ=θφ~=mφ~~φ~~r+2mmr\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} T & = & \arctan\left(-\frac{4 \, m^{2} \log\left(m\right) - 4 \, m^{2} - {\left(4 \, m \log\left(m\right) + m\right)} r + r^{2} - {\left(m - r\right)} {\tilde{\tilde{t}}} - 4 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{2 \, {\left(m^{2} - m r\right)}}\right) + \arctan\left(-\frac{r - {\tilde{\tilde{t}}}}{2 \, m}\right) \\ X & = & \arctan\left(-\frac{4 \, m^{2} \log\left(m\right) - 4 \, m^{2} - {\left(4 \, m \log\left(m\right) + m\right)} r + r^{2} - {\left(m - r\right)} {\tilde{\tilde{t}}} - 4 \, {\left(m^{2} - m r\right)} \log\left(-m + r\right)}{2 \, {\left(m^{2} - m r\right)}}\right) - \arctan\left(-\frac{r - {\tilde{\tilde{t}}}}{2 \, m}\right) \\ {\theta} & = & {\theta} \\ {\tilde{\varphi}} & = & \frac{m {\tilde{\tilde{\varphi}}} - {\tilde{\tilde{\varphi}}} r + 2 \, m}{m - r} \end{array}\right.

Spacetime (M,g)(M', g)

forget(r>m)
Mp = Manifold(4, "M'", structure='Lorentzian') OKCp.<to,r,th,oph> = Mp.chart(r"to:\tilde{\tilde{t}} r th:(0,pi):\theta oph:(0,2*pi):periodic:\tilde{\tilde{\varphi}}") OKCp
(M,(t~~,r,θ,φ~~))\renewcommand{\Bold}[1]{\mathbf{#1}}\left(M',({\tilde{\tilde{t}}}, r, {\theta}, {\tilde{\tilde{\varphi}}})\right)
OKCp.coord_range()
t~~: (,+);r: (,+);θ: (0,π);φ~~: [0,2π](periodic)\renewcommand{\Bold}[1]{\mathbf{#1}}{\tilde{\tilde{t}}} :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( -\infty, +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\tilde{\tilde{\varphi}}} :\ \left[ 0 , 2 \, \pi \right] \mbox{(periodic)}
CCp.<T,X,th,oph> = Mp.chart(r"T X th:(0,pi):\theta oph:(0,2*pi):periodic:\tilde{\tilde{\varphi}}") CCp
(M,(T,X,θ,φ~~))\renewcommand{\Bold}[1]{\mathbf{#1}}\left(M',(T, X, {\theta}, {\tilde{\tilde{\varphi}}})\right)
uc = (to - r)/m vc = (to + r)/m - 4*m/(r - m) + 4*ln(abs((r - m)/m)) OKC_to_CCp = OKCp.transition_map(CCp, [atan(uc/2) + atan(vc/2) - pi*unit_step(m - r), atan(vc/2) - atan(uc/2) - pi*unit_step(m - r), th, oph]) OKC_to_CCp.display()
{T=πu(mr)+arctan(2mmr+r+t~~2m+2log(mrm))+arctan(rt~~2m)X=πu(mr)+arctan(2mmr+r+t~~2m+2log(mrm))arctan(rt~~2m)θ=θφ~~=φ~~\renewcommand{\Bold}[1]{\mathbf{#1}}\left\{\begin{array}{lcl} T & = & -\pi \mathrm{u}\left(m - r\right) + \arctan\left(\frac{2 \, m}{m - r} + \frac{r + {\tilde{\tilde{t}}}}{2 \, m} + 2 \, \log\left({\left| \frac{m - r}{m} \right|}\right)\right) + \arctan\left(-\frac{r - {\tilde{\tilde{t}}}}{2 \, m}\right) \\ X & = & -\pi \mathrm{u}\left(m - r\right) + \arctan\left(\frac{2 \, m}{m - r} + \frac{r + {\tilde{\tilde{t}}}}{2 \, m} + 2 \, \log\left({\left| \frac{m - r}{m} \right|}\right)\right) - \arctan\left(-\frac{r - {\tilde{\tilde{t}}}}{2 \, m}\right) \\ {\theta} & = & {\theta} \\ {\tilde{\tilde{\varphi}}} & = & {\tilde{\tilde{\varphi}}} \end{array}\right.

Plot of principal null geodesics

lamb = var('lamb', latex_name=r'\lambda') def inPNG(v0, th0, tph0): return M.curve({KC: [lamb + v0, -lamb, th0, tph0]}, param=lamb) def outPNG(u0, th0, oph0): return Mp.curve({OKCp: [u0 + r, r, th0, oph0]}, param=r) def outPNG_III(u0, th0, tph0): return M.curve({KC: [u0 + r - 4*m^2/(r - m) + 4*m*ln(abs(r - m)/m), r, th0, tph0]}, param=(r, -oo, 1)) def inPNG_IIIp(v0, th0, oph0): return Mp.curve({OKCp: [v0 + lamb - 4*m^2/(lamb + m) - 4*m*ln(abs(lamb + m)/m), -lamb, th0, oph0]}, param=(lamb, -1, +oo))
graph0 = polygon([(0, pi), (-pi, 2*pi), (-2*pi, pi), (-pi, 0)], color='cornsilk', edgecolor='black') \ + polygon([(pi, 0), (0, pi), (-pi, 0), (0, -pi)], color='white', edgecolor='black') \ + polygon([(0, -pi), (-pi, 0), (-2*pi, -pi), (-pi, -2*pi)], color='cornsilk', edgecolor='black')
graph_PNG = Graphics() for L in [inPNG(0, pi/3, 0), inPNG(-4, pi/3, 0), inPNG(4, pi/3, 0)]: L.expr(chart2=CC) graph_PNG += L.plot(CC, ambient_coords=(X, T), color='green', style='--', max_range=100, plot_points=4, parameters={m: 1}) for L in [outPNG(0, pi/3, 0), outPNG(-4, pi/3, 0), outPNG(4, pi/3, 0)]: L.expr(chart2=CCp) graph_PNG += L.plot(CCp, ambient_coords=(X, T), color='green', max_range=100, plot_points=4, parameters={m: 1}) for L in [outPNG_III(0, pi/3, 0), outPNG_III(-4, pi/3, 0), outPNG_III(4, pi/3, 0)]: L.expr(chart2=CC) graph_PNG += L.plot(CC, ambient_coords=(X, T), color='green', prange=(-100, 0.999), plot_points=4, parameters={m: 1}) for L in [inPNG_IIIp(0, pi/3, 0), inPNG_IIIp(-4, pi/3, 0), inPNG_IIIp(4, pi/3, 0)]: L.expr(chart2=CCp) graph_PNG += L.plot(CCp, ambient_coords=(X, T), color='green', style='--', prange=(-0.999, 100), plot_points=4, parameters={m: 1}) graph = graph0 + graph_PNG graph
Image in a Jupyter notebook

Plots of hypersurfaces of constant rr

def plot_const_r(r0, color='red', linestyle=':', thickness=1, plot_points=300): return KC.plot(CC, ambient_coords=(X,T), fixed_coords={th: pi/3, tph: 0, r: r0}, ranges={tt: (-100, 100)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) def plot_const_tt(tt0, color='darkgrey', linestyle='-', thickness=1, plot_points=100): resu = KC.plot(CC, ambient_coords=(X,T), fixed_coords={th: pi/3, tph: 0, tt: tt0}, ranges={r: (-100, -10)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) \ + KC.plot(CC, ambient_coords=(X,T), fixed_coords={th: pi/3, tph: 0, tt: tt0}, ranges={r: (-10, 10)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) \ + KC.plot(CC, ambient_coords=(X,T), fixed_coords={th: pi/3, tph: 0, tt: tt0}, ranges={r: (10, 100)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) return resu
def plot_const_r_p(r0, color='red', linestyle=':', thickness=1, plot_points=300): return OKCp.plot(CCp, ambient_coords=(X,T), fixed_coords={th: pi/3, oph: 0, r: r0}, ranges={to: (-100, 100)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) def plot_const_to(to0, color='violet', linestyle='-', thickness=1, plot_points=100): resu = OKCp.plot(CCp, ambient_coords=(X,T), fixed_coords={th: pi/3, oph: 0, to: to0}, ranges={r: (-100, -10)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) \ + OKCp.plot(CCp, ambient_coords=(X,T), fixed_coords={th: pi/3, oph: 0, to: to0}, ranges={r: (-10, 10)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) \ + OKCp.plot(CCp, ambient_coords=(X,T), fixed_coords={th: pi/3, oph: 0, to: to0}, ranges={r: (10, 100)}, color=color, style=linestyle, thickness=thickness, plot_points=plot_points, parameters={m: 1}) return resu
for r0 in [-10, -8, -6, -4, -2, 0.5, 1.5, 2, 2.5, 3, 5, 7, 9]: graph += plot_const_r(r0) graph += plot_const_r(0, color='maroon', linestyle='--', thickness=2) for r0 in [-10, -8, -6, -4, -2, 0.5]: graph += plot_const_r_p(r0) graph += plot_const_r_p(0, color='maroon', linestyle='--', thickness=2) show(graph, figsize=10, axes=False, frame=True)
Image in a Jupyter notebook

Plots of hypersurfaces of constant t~\tilde{t}

tmin, tmax, dt = -10, 10, 2 for i in range(int((tmax - tmin)/dt) + 1): ti = tmin + dt*i graph += plot_const_tt(ti) graph += plot_const_tt(0, thickness=2) show(graph, figsize=10, axes=False, frame=True)
Image in a Jupyter notebook

Plots of hypersurfaces of constant t~~\tilde{\tilde{t}}

tmin, tmax, dt = -10, 10, 2 for i in range(int((tmax - tmin)/dt) + 1): ti = tmin + dt*i graph += plot_const_to(ti) graph += plot_const_to(0, thickness=2) graph += line([(-pi,0), (0, pi)], color='black', thickness=3) \ + line([(-pi,0), (0, -pi)], color='black', thickness=3) show(graph, figsize=10, axes=False, frame=True)
Image in a Jupyter notebook
graph.save('exk_CPdiag_M0-raw.svg', figsize=10, axes=False, frame=True)

Maximal extension

Tc(tt, r) = KC_to_CC(tt, r, th, tph)[0].subs(m=1).simplify_full() Xc(tt, r) = KC_to_CC(tt, r, th, tph)[1].subs(m=1).simplify_full() show(Tc) show(Xc)
(t~,r)  πu(r+1)+arctan(12r+12t~)arctan(r2(r1)t~+r(4log(r1)1)4log(r1)42(r1))\renewcommand{\Bold}[1]{\mathbf{#1}}\left( {\tilde{t}}, r \right) \ {\mapsto} \ \pi \mathrm{u}\left(-r + 1\right) + \arctan\left(\frac{1}{2} \, r + \frac{1}{2} \, {\tilde{t}}\right) - \arctan\left(\frac{r^{2} - {\left(r - 1\right)} {\tilde{t}} + r {\left(4 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 4 \, \log\left({\left| r - 1 \right|}\right) - 4}{2 \, {\left(r - 1\right)}}\right)
(t~,r)  πu(r+1)+arctan(12r+12t~)+arctan(r2(r1)t~+r(4log(r1)1)4log(r1)42(r1))\renewcommand{\Bold}[1]{\mathbf{#1}}\left( {\tilde{t}}, r \right) \ {\mapsto} \ -\pi \mathrm{u}\left(-r + 1\right) + \arctan\left(\frac{1}{2} \, r + \frac{1}{2} \, {\tilde{t}}\right) + \arctan\left(\frac{r^{2} - {\left(r - 1\right)} {\tilde{t}} + r {\left(4 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 4 \, \log\left({\left| r - 1 \right|}\right) - 4}{2 \, {\left(r - 1\right)}}\right)
TBL(t, r) = Tc(t - 2/(r-1) + 2*ln(abs(r-1)), r).simplify_full() XBL(t, r) = Xc(t - 2/(r-1) + 2*ln(abs(r-1)), r).simplify_full() show(TBL) show(XBL)
(t,r)  πu(r+1)+arctan(r2+(r1)t+r(2log(r1)1)2log(r1)22(r1))arctan(r2(r1)t+r(2log(r1)1)2log(r1)22(r1))\renewcommand{\Bold}[1]{\mathbf{#1}}\left( t, r \right) \ {\mapsto} \ \pi \mathrm{u}\left(-r + 1\right) + \arctan\left(\frac{r^{2} + {\left(r - 1\right)} t + r {\left(2 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 2 \, \log\left({\left| r - 1 \right|}\right) - 2}{2 \, {\left(r - 1\right)}}\right) - \arctan\left(\frac{r^{2} - {\left(r - 1\right)} t + r {\left(2 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 2 \, \log\left({\left| r - 1 \right|}\right) - 2}{2 \, {\left(r - 1\right)}}\right)
(t,r)  πu(r+1)+arctan(r2+(r1)t+r(2log(r1)1)2log(r1)22(r1))+arctan(r2(r1)t+r(2log(r1)1)2log(r1)22(r1))\renewcommand{\Bold}[1]{\mathbf{#1}}\left( t, r \right) \ {\mapsto} \ -\pi \mathrm{u}\left(-r + 1\right) + \arctan\left(\frac{r^{2} + {\left(r - 1\right)} t + r {\left(2 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 2 \, \log\left({\left| r - 1 \right|}\right) - 2}{2 \, {\left(r - 1\right)}}\right) + \arctan\left(\frac{r^{2} - {\left(r - 1\right)} t + r {\left(2 \, \log\left({\left| r - 1 \right|}\right) - 1\right)} - 2 \, \log\left({\left| r - 1 \right|}\right) - 2}{2 \, {\left(r - 1\right)}}\right)
def plot_I(n, t_values=None, r_min=1.0001, r_max=100, color_t='dimgray', linestyle_t='-', r_values=None, t_min=-100, t_max=100, color_r='red', linestyle_r=':', plot_null_geod=True, hor_thickness=3): n2 = 2*n res = polygon([(pi, n2*pi), (0, (n2 + 1)*pi), (-pi, n2*pi), (0, (n2 - 1)*pi)], color='white', edgecolor='black') if r_values is not None: for r0 in r_values: res += parametric_plot((Xc(tt, r0), Tc(tt, r0) + n2*pi), (tt, t_min, t_max), color=color_r, linestyle=linestyle_r) if t_values is not None: for t0 in t_values: res += parametric_plot((XBL(t0, r), TBL(t0, r) + n2*pi), (r, r_min, r_max), color=color_t, linestyle=linestyle_t) if plot_null_geod: res += line([(pi/2, -pi/2 + n2*pi), (-pi/2, pi/2 + n2*pi)], color='green', linestyle='--') res += line([(-pi/2, -pi/2 + n2*pi), (pi/2, pi/2 + n2*pi)], color='green') res += line([(-pi, n2*pi), (0, (n2 + 1)*pi)], color='black', thickness=hor_thickness) res += line([(-pi, n2*pi), (0, (n2 - 1)*pi)], color='black', thickness=hor_thickness) return res def plot_III(n, t_values=None, r_min=-100, r_max=0.9999, color_t='dimgray', linestyle_t='-', r_values=None, t_min=-100, t_max=100, color_r='red', linestyle_r=':', plot_null_geod=True): n2 = 2*n res = polygon([(0, (n2 + 1)*pi), (-pi, (n2 + 2)*pi), (-2*pi, (n2 + 1)*pi), (-pi, n2*pi)], color='cornsilk', edgecolor='black') res += parametric_plot((Xc(tt, 0), Tc(tt, 0) + n2*pi), (tt, t_min, t_max), color='maroon', linestyle='--', thickness=2) if r_values is not None: for r0 in r_values: res += parametric_plot((Xc(tt, r0), Tc(tt, r0) + n2*pi), (tt, t_min, t_max), color=color_r, linestyle=linestyle_r) if t_values is not None: for t0 in t_values: res += parametric_plot((XBL(t0, r), TBL(t0, r) + n2*pi), (r, r_min, r_max), color=color_t, linestyle=linestyle_t) if plot_null_geod: res += line([(-pi/2, pi/2 + n2*pi), (-3*pi/2, 3*pi/2 + n2*pi)], color='green', linestyle='--') res += line([(-3*pi/2, pi/2 + n2*pi), (-pi/2, 3*pi/2 + n2*pi)], color='green') return res
r_val_I = [1.2, 1.4, 1.6, 1.8, 2, 4, 6, 8, 10] r_val_III = [-10, -8, -6, -4, -2, 0.2, 0.4, 0.6, 0.8] show(graphics_array([plot_I(0, r_values=r_val_I), plot_III(0, r_values=r_val_III)]), axes=True)
Image in a Jupyter notebook
graph = Graphics() for n in [-2..2]: graph += plot_I(n, r_values=r_val_I) + plot_III(n, r_values=r_val_III) show(graph, figsize=10, axes=False, ymin=-3*pi, ymax=3*pi)
Image in a Jupyter notebook
graph.save('exk_CPdiag_maximal-raw.svg', figsize=10, axes=False, ymin=-3*pi, ymax=3*pi)

Near-horizon region

r_val_I = [1.1, 1.2, 1.3, 1.4, 1.5] r_val_III = [0.9, 0.8, 0.7, 0.6, 0.5] t_val = [-8, -6, -4, -2, 0, 2, 4, 6, 8] graph = Graphics() for n in [-1..1]: graph += plot_I(n, t_values=t_val, r_max=1.5, r_values=r_val_I, linestyle_r='-', plot_null_geod=False, hor_thickness=4) graph += plot_III(n, t_values=t_val, r_min=0.5, r_values=r_val_III, linestyle_r='-', plot_null_geod=False) show(graph, figsize=8, axes=False, frame=True, ymin=-pi, ymax=2*pi)
Image in a Jupyter notebook
graph += text(r"$r=\!+\infty$", (pi/2+0.2, pi/2+0.2), rotation=-45, color='black', fontsize=16) \ + text(r"$r=\!+\infty$", (pi/2+0.2, -pi/2-0.2), rotation=45, color='black', fontsize=16) \ + text(r"$r=\!+\infty$", (pi/2+0.2, 3*pi/2-0.2), rotation=45, color='black', fontsize=16) \ + text(r"$r=\!-\infty$", (-3*pi/2-0.2, pi/2-0.2), rotation=-45, color='black', fontsize=16) \ + text(r"$r=\!-\infty$", (-3*pi/2-0.2, 3*pi/2+0.2), rotation=45, color='black', fontsize=16) \ + text(r"$r=\!-\infty$", (-3*pi/2-0.2, -pi/2+0.2), rotation=45, color='black', fontsize=16) \ + text(r"$r=m$", (-pi/2-0.2, pi/2+0.2), rotation=45, color='black', fontsize=16) \ + text(r"$r=m$", (-pi/2+0.15, 3*pi/2+0.15), rotation=-45, color='black', fontsize=16) \ + text(r"$r=m$", (-pi/2+0.15, -pi/2+0.15), rotation=-45, color='black', fontsize=16) \ + text(r"$r=0$", (-2.4, 2), rotation=55, color='maroon', fontsize=16) \ + text(r"$\mathscr{H}$", (-0.25, 2.4), color='black', fontsize=20) \ + text(r"$\mathscr{H}'$", (-0.25, -2.2), color='black', fontsize=20) \ + text(r"$i^{\rm int}$", (-3.6, -0.1), color='orangered', fontsize=16) \ + text(r"$\mathscr{M}_{\rm I}$", (0, 0), color='black', fontsize=24) \ + text(r"$\mathscr{M}_{\rm III}$", (-pi, pi), color='black', fontsize=24) graph.save("exk_NH_region.pdf", figsize=9, axes=False, ymin=-pi, ymax=2*pi) show(graph, figsize=9, axes=False, ymin=-pi, ymax=2*pi)
Image in a Jupyter notebook