CoCalc Public FilesBHLectures / sage / conformal_Minkowski.ipynb
Author: Eric Gourgoulhon
Views : 131
Compute Environment: Ubuntu 18.04 (Deprecated)

# 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 (version 1.0, as included in SageMath 7.5 and higher versions)

NB: a version of SageMath at least equal to 7.5 is required to run this worksheet:

In [1]:
version()

'SageMath version 8.0.beta6, Release Date: 2017-05-12'

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

In [2]:
%display latex


We also define a viewer for 3D plots (use 'threejs' or 'jmol' for interactive 3D graphics):

In [3]:
viewer3D = 'threejs' # must be 'threejs', jmol', 'tachyon' or None (default)


## Spherical coordinates on Minkowski spacetime

We declare the spacetime manifold $M$:

In [4]:
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 [5]:
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 [6]:
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 [7]:
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 [8]:
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 [9]:
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 [10]:
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 [11]:
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 [12]:
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 [13]:
graph = XN.plot(XS, ambient_coords=(r,t), fixed_coords={th: pi/2, ph: pi},
number_values=17, plot_points=200, color='green',
style={u: '-', v: ':'}, thickness={u: 1, v: 2})
show(graph)

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

In [15]:
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 [16]:
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 [17]:
graph.save('glo_atan.pdf', aspect_ratio=1)

In [18]:
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 [19]:
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 [20]:
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 [21]:
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 [22]:
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} + \frac{{\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)} \sin\left({\theta}\right)^{2}}{4 \, \cos\left(U\right)^{2} \cos\left(V\right)^{2}} \mathrm{d} {\phi}\otimes \mathrm{d} {\phi}$

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

In [23]:
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 [24]:
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 [25]:
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} - 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)} \sin\left({\theta}\right)^{2} \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 [26]:
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 [27]:
g22.factor().reduce_trig()

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

$\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 [29]:
g33st.factor().reduce_trig()

$\sin\left(-U + V\right)^{2}$
In [30]:
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 [31]:
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 [32]:
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 [33]:
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 [34]:
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 [35]:
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 [36]:
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 [37]:
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 [38]:
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 [39]:
(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 [40]:
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 [41]:
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 [42]:
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 [43]:
tc.reduce_trig()

$\frac{\sin\left({\tau}\right)}{\cos\left({\chi}\right) + \cos\left({\tau}\right)}$
In [44]:
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 [45]:
rc.reduce_trig()

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

In [47]:
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 [48]:
graphXS = XS.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
max_range=30, number_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 [49]:
graph.save('glo_conf_diag_Mink.pdf')


Some blow-up near $i^0$:

In [50]:
graph = XS.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
max_range=100, number_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 [51]:
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 [52]:
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 [53]:
XS_to_XL.inverse().display()

$\left\{\begin{array}{lcl} t & = & t \\ r & = & e^{{\rho}} \\ {\theta} & = & {\theta} \\ {\phi} & = & {\phi} \end{array}\right.$
In [54]:
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 [55]:
graph = XL.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
ranges={t: (-20, 20), rh: (-2, 10)}, number_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 [56]:
graphXN = XN.plot(XC, ambient_coords=(ch, tau), fixed_coords={th: pi/2, ph: pi},
number_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)