Conformal completion of Minkowski spacetime

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

These computations are based on SageManifolds (v0.9)

The worksheet file (ipynb format) can be downloaded from here.

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

In [1]:
%display latex


Spherical coordinates on Minkowski spacetime

We declare the spacetime manifold $M$:

In [2]:
M = Manifold(4, 'M')
print M

4-dimensional differentiable manifold M

and the spherical coordinates $(t,r,\theta,\phi)$ as a chart on $M$:

In [3]:
XS.<t,r,th,ph> = M.chart(r't r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\phi')
XS

$\left(M,(t, r, {\theta}, {\phi})\right)$
In [4]:
XS.coord_range()

$t :\ \left( -\infty, +\infty \right) ;\quad r :\ \left( 0 , +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\phi} :\ \left( 0 , 2 \, \pi \right)$

In term of these coordinates, the Minkowski metric is

In [5]:
g = M.lorentzian_metric('g')
g[0,0] = -1
g[1,1] = 1
g[2,2] = r^2
g[3,3] = r^2*sin(th)^2
g.display()

$g = -\mathrm{d} t\otimes \mathrm{d} t+\mathrm{d} r\otimes \mathrm{d} r + r^{2} \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + r^{2} \sin\left({\theta}\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Null coordinates

Let us introduce the null coordinates $u=t-r$ (retarded time) and $v=t+r$ (advanced time):

In [6]:
XN.<u,v,th,ph> = M.chart(r'u v th:(0,pi):\theta ph:(0,2*pi):\phi')
XN

$\left(M,(u, v, {\theta}, {\phi})\right)$
In [7]:
XN.coord_range()

$u :\ \left( -\infty, +\infty \right) ;\quad v :\ \left( -\infty, +\infty \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\phi} :\ \left( 0 , 2 \, \pi \right)$
In [8]:
XS_to_XN = XS.transition_map(XN, [t-r, t+r, th, ph])
XS_to_XN.display()

$\left\{\begin{array}{lcl} u & = & -r + t \\ v & = & r + t \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [9]:
XS_to_XN.inverse().display()

$\left\{\begin{array}{lcl} t & = & \frac{1}{2} \, u + \frac{1}{2} \, v \\ r & = & -\frac{1}{2} \, u + \frac{1}{2} \, v \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$

In terms of the null coordinates $(u,v,\theta,\phi)$, the Minkowski metric writes

In [10]:
g.display(XN.frame(), XN)

$g = -\frac{1}{2} \mathrm{d} u\otimes \mathrm{d} v -\frac{1}{2} \mathrm{d} v\otimes \mathrm{d} u + \left( \frac{1}{4} \, u^{2} - \frac{1}{2} \, u v + \frac{1}{4} \, v^{2} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( \frac{1}{4} \, u^{2} \sin\left({\theta}\right)^{2} - \frac{1}{2} \, u v \sin\left({\theta}\right)^{2} + \frac{1}{4} \, v^{2} \sin\left({\theta}\right)^{2} \right) \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Let us plot the coordinate grid $(u,v)$ in terms of the coordinates $(t,r)$:

In [11]:
graph = XN.plot(XS, ambient_coords=(r,t), fixed_coords={th: pi/2, ph: pi}, nb_values=17,
plot_points=200, color='green', style={u: '-', v: ':'}, thickness={u: 1, v: 2})
show(graph)

In [12]:
show(graph, xmin=0, xmax=4, ymin=0, ymax=4, aspect_ratio=1, fontsize=16)

In [13]:
graph.save("glo_null_coord.pdf", xmin=0, xmax=4, ymin=0, ymax=4, aspect_ratio=1, fontsize=16)


Compactified null coordinates

Instead of $(u,v)$, which span $\mathbb{R}$, let consider the coordinates $U = \mathrm{atan}\, u$ and $V = \mathrm{atan}\, v$, which span $\left(-\frac{\pi}{2}, \frac{\pi}{2}\right)$:

In [14]:
graph = plot(atan(u), (u,-6, 6), thickness=2, axes_labels=[r'$u$', r'$U$']) + \
line([(-6,-pi/2), (6,-pi/2)], linestyle='--') + \
line([(-6,pi/2), (6,pi/2)], linestyle='--')
show(graph, aspect_ratio=1)

In [15]:
graph.save('glo_atan.pdf', aspect_ratio=1)

In [16]:
XNC.<U,V,th,ph> = M.chart(r'U:(-pi/2,pi/2) V:(-pi/2,pi/2) th:(0,pi):\theta ph:(0,2*pi):\phi')
XNC

$\left(M,(U, V, {\theta}, {\phi})\right)$
In [17]:
XNC.coord_range()

$U :\ \left( -\frac{1}{2} \, \pi , \frac{1}{2} \, \pi \right) ;\quad V :\ \left( -\frac{1}{2} \, \pi , \frac{1}{2} \, \pi \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\phi} :\ \left( 0 , 2 \, \pi \right)$
In [18]:
XN_to_XNC = XN.transition_map(XNC, [atan(u), atan(v), th, ph])
XN_to_XNC.display()

$\left\{\begin{array}{lcl} U & = & \arctan\left(u\right) \\ V & = & \arctan\left(v\right) \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [19]:
XN_to_XNC.inverse().display()

$\left\{\begin{array}{lcl} u & = & \tan\left(U\right) \\ v & = & \tan\left(V\right) \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$

Expressed in terms of the coordinates $(U,V,\theta,\phi)$, the metric tensor is

In [20]:
g.display(XNC.frame(), XNC)

$g = -\frac{1}{2 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2}} \mathrm{d} U\otimes \mathrm{d} V -\frac{1}{2 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2}} \mathrm{d} V\otimes \mathrm{d} U + \left( \frac{\cos\left(V\right)^{2} \sin\left(U\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) + \cos\left(U\right)^{2} \sin\left(V\right)^{2}}{4 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2}} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( \frac{\cos\left(V\right)^{2} \sin\left(U\right)^{2} \sin\left({\theta}\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) \sin\left({\theta}\right)^{2} + \cos\left(U\right)^{2} \sin\left(V\right)^{2} \sin\left({\theta}\right)^{2}}{4 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2}} \right) \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Let us call $\Omega^{-2}$ the common factor:

In [21]:
Omega = M.scalar_field({XNC: 2*cos(U)*cos(V)}, name='Omega', latex_name=r'\Omega')
Omega.display()

$\begin{array}{llcl} \Omega:& M & \longrightarrow & \mathbb{R} \\ & \left(u, v, {\theta}, {\phi}\right) & \longmapsto & \frac{2}{\sqrt{u^{2} + 1} \sqrt{v^{2} + 1}} \\ & \left(U, V, {\theta}, {\phi}\right) & \longmapsto & 2 \, \cos\left(U\right) \cos\left(V\right) \end{array}$
In [22]:
Omega.display(XS)

$\begin{array}{llcl} \Omega:& M & \longrightarrow & \mathbb{R} \\ & \left(t, r, {\theta}, {\phi}\right) & \longmapsto & \frac{2}{\sqrt{r^{2} + 2 \, r t + t^{2} + 1} \sqrt{r^{2} - 2 \, r t + t^{2} + 1}} \end{array}$

Conformal metric

We introduce the metric $\tilde g = \Omega^2 g$:

In [23]:
gt = M.lorentzian_metric('gt', latex_name=r'\tilde{g}')
gt.set(Omega^2*g)
gt.display(XNC.frame(), XNC)

$\tilde{g} = -2 \mathrm{d} U\otimes \mathrm{d} V -2 \mathrm{d} V\otimes \mathrm{d} U + \left( \cos\left(V\right)^{2} \sin\left(U\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) + \cos\left(U\right)^{2} \sin\left(V\right)^{2} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( \cos\left(V\right)^{2} \sin\left(U\right)^{2} \sin\left({\theta}\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) \sin\left({\theta}\right)^{2} + \cos\left(U\right)^{2} \sin\left(V\right)^{2} \sin\left({\theta}\right)^{2} \right) \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Clearly the metric components ${\tilde g}_{\theta\theta}$ and ${\tilde g}_{\phi\phi}$ can be simplified further. Let us do it by hand, by extracting the symbolic expression via expr():

In [24]:
g22 = gt[XNC.frame(), 2, 2, XNC].expr()
g22

$\cos\left(V\right)^{2} \sin\left(U\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) + \cos\left(U\right)^{2} \sin\left(V\right)^{2}$
In [25]:
g22.factor().reduce_trig()

$\sin\left(-U + V\right)^{2}$
In [26]:
g33st = gt[XNC.frame(), 3, 3, XNC].expr() / sin(th)^2
g33st

$\frac{\cos\left(V\right)^{2} \sin\left(U\right)^{2} \sin\left({\theta}\right)^{2} - 2 \, \cos\left(U\right) \cos\left(V\right) \sin\left(U\right) \sin\left(V\right) \sin\left({\theta}\right)^{2} + \cos\left(U\right)^{2} \sin\left(V\right)^{2} \sin\left({\theta}\right)^{2}}{\sin\left({\theta}\right)^{2}}$
In [27]:
g33st.factor().reduce_trig()

$\sin\left(-U + V\right)^{2}$
In [28]:
gt.add_comp(XNC.frame())[2,2, XNC] = g22.factor().reduce_trig()
gt.add_comp(XNC.frame())[3,3, XNC] = g33st.factor().reduce_trig() * sin(th)^2


Hence the final form of the conformal metric in terms of the compactified null coordinates:

In [29]:
gt.display(XNC.frame(), XNC)

$\tilde{g} = -2 \mathrm{d} U\otimes \mathrm{d} V -2 \mathrm{d} V\otimes \mathrm{d} U + \sin\left(-U + V\right)^{2} \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \sin\left(-U + V\right)^{2} \sin\left({\theta}\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

In terms of the non-compactified null coordinates $(u,v,\theta,\phi)$:

In [30]:
gt.display(XN.frame(), XN)

$\tilde{g} = \left( -\frac{2}{{\left(u^{2} + 1\right)} v^{2} + u^{2} + 1} \right) \mathrm{d} u\otimes \mathrm{d} v + \left( -\frac{2}{{\left(u^{2} + 1\right)} v^{2} + u^{2} + 1} \right) \mathrm{d} v\otimes \mathrm{d} u + \left( \frac{u^{2} - 2 \, u v + v^{2}}{{\left(u^{2} + 1\right)} v^{2} + u^{2} + 1} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( \frac{u^{2} \sin\left({\theta}\right)^{2} - 2 \, u v \sin\left({\theta}\right)^{2} + v^{2} \sin\left({\theta}\right)^{2}}{{\left(u^{2} + 1\right)} v^{2} + u^{2} + 1} \right) \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

and in terms of the default coordinates $(t,r,\theta,\phi)$:

In [31]:
gt.display()

$\tilde{g} = \left( -\frac{4}{r^{4} + t^{4} - 2 \, {\left(r^{2} - 1\right)} t^{2} + 2 \, r^{2} + 1} \right) \mathrm{d} t\otimes \mathrm{d} t + \left( \frac{4}{r^{4} + t^{4} - 2 \, {\left(r^{2} - 1\right)} t^{2} + 2 \, r^{2} + 1} \right) \mathrm{d} r\otimes \mathrm{d} r + \left( \frac{4 \, r^{2}}{r^{4} + t^{4} - 2 \, {\left(r^{2} - 1\right)} t^{2} + 2 \, r^{2} + 1} \right) \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \left( \frac{4 \, r^{2} \sin\left({\theta}\right)^{2}}{r^{4} + t^{4} - 2 \, {\left(r^{2} - 1\right)} t^{2} + 2 \, r^{2} + 1} \right) \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

Einstein cylinder coordinates

Let us introduce some coordinates $(\tau,\chi)$ such that the null coordinates $(U,V)$ are respectively half the retarded time $\tau -\chi$ and half the advanced time $\tau+\chi$:

In [32]:
XC.<tau,ch,th,ph> = M.chart(r'tau:(-pi,pi):\tau ch:(0,pi):\chi th:(0,pi):\theta ph:(0,2*pi):\phi')
XC

$\left(M,({\tau}, {\chi}, {\theta}, {\phi})\right)$
In [33]:
XC.coord_range()

${\tau} :\ \left( -\pi , \pi \right) ;\quad {\chi} :\ \left( 0 , \pi \right) ;\quad {\theta} :\ \left( 0 , \pi \right) ;\quad {\phi} :\ \left( 0 , 2 \, \pi \right)$
In [34]:
XC_to_XNC = XC.transition_map(XNC, [(tau-ch)/2, (tau+ch)/2, th, ph])
XC_to_XNC.display()

$\left\{\begin{array}{lcl} U & = & -\frac{1}{2} \, {\chi} + \frac{1}{2} \, {\tau} \\ V & = & \frac{1}{2} \, {\chi} + \frac{1}{2} \, {\tau} \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [35]:
XC_to_XNC.inverse().display()

$\left\{\begin{array}{lcl} {\tau} & = & U + V \\ {\chi} & = & -U + V \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$

The conformal metric takes then the form of the standard metric on the Einstein cylinder $\mathbb{R}\times\mathbb{S}^3$:

In [36]:
gt.display(XC.frame(), XC)

$\tilde{g} = -\mathrm{d} {\tau}\otimes \mathrm{d} {\tau}+\mathrm{d} {\chi}\otimes \mathrm{d} {\chi} + \sin\left({\chi}\right)^{2} \mathrm{d} {\theta}\otimes \mathrm{d} {\theta} + \sin\left({\chi}\right)^{2} \sin\left({\theta}\right)^{2} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

The square of the conformal factor expressed in all the coordinates introduced so far:

In [37]:
(Omega^2).display()

$\begin{array}{llcl} {\Omega}^{ 2 } : & M & \longrightarrow & \mathbb{R} \\ & \left(t, r, {\theta}, {\phi}\right) & \longmapsto & \frac{4}{r^{4} + t^{4} - 2 \, {\left(r^{2} - 1\right)} t^{2} + 2 \, r^{2} + 1} \\ & \left(u, v, {\theta}, {\phi}\right) & \longmapsto & \frac{4}{{\left(u^{2} + 1\right)} v^{2} + u^{2} + 1} \\ & \left(U, V, {\theta}, {\phi}\right) & \longmapsto & 4 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2} \\ & \left({\tau}, {\chi}, {\theta}, {\phi}\right) & \longmapsto & 4 \, \cos\left(\frac{1}{2} \, {\chi}\right)^{4} \cos\left(\frac{1}{2} \, {\tau}\right)^{4} - 8 \, \cos\left(\frac{1}{2} \, {\chi}\right)^{2} \cos\left(\frac{1}{2} \, {\tau}\right)^{2} \sin\left(\frac{1}{2} \, {\chi}\right)^{2} \sin\left(\frac{1}{2} \, {\tau}\right)^{2} + 4 \, \sin\left(\frac{1}{2} \, {\chi}\right)^{4} \sin\left(\frac{1}{2} \, {\tau}\right)^{4} \end{array}$
In [38]:
XS_to_XC = M.coord_change(XNC,XC) * M.coord_change(XN, XNC) * M.coord_change(XS, XN)
XS_to_XC.display()

$\left\{\begin{array}{lcl} {\tau} & = & \arctan\left(r + t\right) + \arctan\left(-r + t\right) \\ {\chi} & = & \arctan\left(r + t\right) - \arctan\left(-r + t\right) \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [39]:
XC_to_XS = M.coord_change(XN, XS) * M.coord_change(XNC, XN) * M.coord_change(XC,XNC)
XC_to_XS.display()

$\left\{\begin{array}{lcl} t & = & \frac{\cos\left(\frac{1}{2} \, {\tau}\right) \sin\left(\frac{1}{2} \, {\tau}\right)}{\cos\left(\frac{1}{2} \, {\chi}\right)^{2} \cos\left(\frac{1}{2} \, {\tau}\right)^{2} - \sin\left(\frac{1}{2} \, {\chi}\right)^{2} \sin\left(\frac{1}{2} \, {\tau}\right)^{2}} \\ r & = & \frac{\cos\left(\frac{1}{2} \, {\chi}\right) \sin\left(\frac{1}{2} \, {\chi}\right)}{\cos\left(\frac{1}{2} \, {\chi}\right)^{2} \cos\left(\frac{1}{2} \, {\tau}\right)^{2} - \sin\left(\frac{1}{2} \, {\chi}\right)^{2} \sin\left(\frac{1}{2} \, {\tau}\right)^{2}} \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$

The expressions for $t$ and $r$ can be simplified:

In [40]:
tc = XC_to_XS(tau,ch,th,ph)[0]
tc

$\frac{\cos\left(\frac{1}{2} \, {\tau}\right) \sin\left(\frac{1}{2} \, {\tau}\right)}{\cos\left(\frac{1}{2} \, {\chi}\right)^{2} \cos\left(\frac{1}{2} \, {\tau}\right)^{2} - \sin\left(\frac{1}{2} \, {\chi}\right)^{2} \sin\left(\frac{1}{2} \, {\tau}\right)^{2}}$
In [41]:
tc.reduce_trig()

$\frac{\sin\left({\tau}\right)}{\cos\left({\chi}\right) + \cos\left({\tau}\right)}$
In [42]:
rc = XC_to_XS(tau,ch,th,ph)[1]
rc

$\frac{\cos\left(\frac{1}{2} \, {\chi}\right) \sin\left(\frac{1}{2} \, {\chi}\right)}{\cos\left(\frac{1}{2} \, {\chi}\right)^{2} \cos\left(\frac{1}{2} \, {\tau}\right)^{2} - \sin\left(\frac{1}{2} \, {\chi}\right)^{2} \sin\left(\frac{1}{2} \, {\tau}\right)^{2}}$
In [43]:
rc.reduce_trig()

$\frac{\sin\left({\chi}\right)}{\cos\left({\chi}\right) + \cos\left({\tau}\right)}$
In [44]:
XS_to_XC.set_inverse(tc.reduce_trig(), rc.reduce_trig(), th, ph)
XC_to_XS = XS_to_XC.inverse()

Check of the inverse coordinate transformation: t == t r == r th == th ph == ph tau == arctan((sin(ch) + sin(tau))/(cos(ch) + cos(tau))) + arctan(-(sin(ch) - sin(tau))/(cos(ch) + cos(tau))) ch == arctan((sin(ch) + sin(tau))/(cos(ch) + cos(tau))) - arctan(-(sin(ch) - sin(tau))/(cos(ch) + cos(tau))) th == th ph == ph
In [45]:
XC_to_XS.display()

$\left\{\begin{array}{lcl} t & = & \frac{\sin\left({\tau}\right)}{\cos\left({\chi}\right) + \cos\left({\tau}\right)} \\ r & = & \frac{\sin\left({\chi}\right)}{\cos\left({\chi}\right) + \cos\left({\tau}\right)} \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$

Conformal Penrose diagram

Let us draw the coordinate grid $(t,r)$ in terms of the coordinates $(\tau,\chi)$:

In [46]:
graphXS = XS.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
max_range=30, nb_values=51, plot_points=250, color={t: 'red', r: 'grey'})
graph_i0 = circle((pi,0), 0.05, fill=True, color='grey') + \
text(r"$i^0$", (3.3, 0.2), fontsize=18, color='grey')
graph_ip = circle((0,pi), 0.05, fill=True, color='red') + \
text(r"$i^+$", (0.25, 3.3), fontsize=18, color='red')
graph_im = circle((0,-pi), 0.05, fill=True, color='red') + \
text(r"$i^-$", (0.25, -3.3), fontsize=18, color='red')
graph_Ip = line([(0,pi), (pi,0)], color='green', thickness=2) + \
text(r"$\mathscr{I}^+$", (1.8, 1.8), fontsize=18, color='green')
graph_Im = line([(0,-pi), (pi,0)], color='green', thickness=2) + \
text(r"$\mathscr{I}^-$", (1.8, -1.8), fontsize=18, color='green')
graph = graphXS + graph_i0 + graph_ip + graph_im + graph_Ip + graph_Im
show(graph)

In [47]:
graph.save('glo_conf_diag_Mink.pdf')


Some blow-up near $i^0$:

In [48]:
graph = XS.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
max_range=100, nb_values=41, plot_points=200, color={t: 'red', r: 'grey'})
graph += circle((pi,0), 0.005, fill=True, color='grey') + \
text(r"$i^0$", (pi, 0.02), fontsize=18, color='grey')
show(graph, xmin=3., xmax=3.2, ymin=-0.2, ymax=0.2, aspect_ratio=1)


To produce a more satisfactory figure, let us use some logarithmic radial coordinate:

In [49]:
XL.<t, rh, th, ph> = M.chart(r't rh:\rho th:(0,pi):\theta ph:(0,2*pi):\phi')
XL

$\left(M,(t, {\rho}, {\theta}, {\phi})\right)$
In [50]:
XS_to_XL = XS.transition_map(XL, [t, ln(r), th, ph])
XS_to_XL.display()

$\left\{\begin{array}{lcl} t & = & t \\ {\rho} & = & \log\left(r\right) \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [51]:
XS_to_XL.inverse().display()

$\left\{\begin{array}{lcl} t & = & t \\ r & = & e^{{\rho}} \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [52]:
XL_to_XC = M.coord_change(XS, XC) * M.coord_change(XL, XS)
XC_to_XL = M.coord_change(XS, XL) * M.coord_change(XC, XS)

In [53]:
graph = XL.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
ranges={t: (-20, 20), rh: (-2, 10)}, nb_values=19,
color={t: 'red', rh: 'grey'})
graph += circle((pi,0), 0.005, fill=True, color='grey') + \
text(r"$i^0$", (pi, 0.02), fontsize=18, color='grey')
show(graph, xmin=3., xmax=3.2, ymin=-0.2, ymax=0.2, aspect_ratio=1)


Null radial geodesics in the conformal diagram

To get a view of the null radial geodesics in the conformal diagram, it suffices to plot the chart $(u,v,\theta,\phi)$ in terms of the chart $(\tau,\chi,\theta,\phi)$. The following plot shows

• the null geodesics defined by $(u,\theta,\phi) = (u_0, \pi/2,\pi)$ for 17 values of $u_0$ evenly spaced in $[-8,8]$ (dashed lines)
• the null geodesics defined by $(v,\theta,\phi) = (v_0, \pi/2,\pi)$ for 17 values of $v_0$ evenly spaced in $[-8,8]$ (solid lines)
In [54]:
graphXN = XN.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
nb_values=17, plot_points=150, color='green',
style={u: '-', v: ':'}, thickness={u: 1, v: 2})
graph = graphXN + graph_i0 + graph_ip + graph_im + graph_Ip + graph_Im
show(graph)