#!/usr/bin/env python # coding: utf-8 # # Carter-Penrose diagram of Schwarzschild spacetime # # This Jupyter/SageMath notebook is relative to the lectures # [Geometry and physics of black holes](https://relativite.obspm.fr/blackholes/). # # The involved computations make use of tools developed through the [SageManifolds project](https://sagemanifolds.obspm.fr). # # *NB:* a version of SageMath at least equal to 9.4 is required to run this notebook: # In[1]: version() # First we set up the notebook to display mathematical objects using LaTeX formatting: # In[2]: get_ipython().run_line_magic('display', 'latex') # ## Spacetime # # We declare the spacetime manifold $M$: # In[3]: M = Manifold(4, 'M') print(M) # ## The Schwarzschild-Droste domain # # The domain of Schwarzschild-Droste coordinates is $M_{\rm SD} = M_{\rm I} \cup M_{\rm II}$: # In[4]: M_SD = M.open_subset('M_SD', latex_name=r'M_{\rm SD}') M_I = M_SD.open_subset('M_I', latex_name=r'M_{\rm I}') M_II = M_SD.open_subset('M_II', latex_name=r'M_{\rm II}') M_SD.declare_union(M_I, M_II) # The Schwarzschild-Droste coordinates $(t,r,\theta,\phi)$: # In[5]: m = var('m', domain='real') assume(m>=0) X_SD. = M_SD.chart(r't r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\varphi', coord_restrictions=lambda t,r,th,ph: r!=2*m) X_SD # In[6]: X_SD_I = X_SD.restrict(M_I, r>2*m) X_SD_I # In[7]: X_SD_II = X_SD.restrict(M_II, r<2*m) X_SD_II # In[8]: M.default_chart() # In[9]: M.atlas() # ## Kruskal-Szekeres coordinates # In[10]: X_KS. = M.chart(r'T X th:(0,pi):\theta ph:(0,2*pi):\varphi', coord_restrictions=lambda T,X,th,ph: T^2 < 1 + X^2) X_KS # In[11]: X_KS_I = X_KS.restrict(M_I, [X>0, T-X]) X_KS_I # In[12]: X_KS_II = X_KS.restrict(M_II, [T>0, T>abs(X)]) X_KS_II # In[13]: SD_I_to_KS = X_SD_I.transition_map(X_KS_I, [sqrt(r/(2*m)-1)*exp(r/(4*m))*sinh(t/(4*m)), sqrt(r/(2*m)-1)*exp(r/(4*m))*cosh(t/(4*m)), th, ph]) SD_I_to_KS.display() # In[14]: SD_II_to_KS = X_SD_II.transition_map(X_KS_II, [sqrt(1-r/(2*m))*exp(r/(4*m))*cosh(t/(4*m)), sqrt(1-r/(2*m))*exp(r/(4*m))*sinh(t/(4*m)), th, ph]) SD_II_to_KS.display() # ### Plot of Schwarzschild-Droste grid on $M_{\rm I}$ in terms of KS coordinates # In[15]: graph = X_SD_I.plot(X_KS, ambient_coords=(X,T), fixed_coords={th:pi/2,ph:pi}, ranges={t:(-10,10), r:(2.001,5)}, steps={t:1, r:0.5}, style={t:'--', r:'-'}, color='blue', parameters={m:1}) # Adding the Schwarzschild horizon to the plot: # In[16]: hor = line([(0,0), (4,4)], color='black', thickness=2) \ + text(r'$\mathscr{H}$', (3, 2.7), fontsize=20, color='black') # In[17]: hor2 = line([(0,0), (4,4)], color='black', thickness=2) \ + text(r'$\mathscr{H}$', (2.95, 3.2), fontsize=20, color='black') region_labels = text(r'$\mathscr{M}_{\rm I}$', (2.4, 0.4), fontsize=20, color='blue') graph2 = graph + hor2 + region_labels show(graph2, xmin=-3, xmax=3, ymin=-3, ymax=3) # Adding the curvature singularity $r=0$ to the plot: # In[18]: sing = X_SD_II.plot(X_KS, fixed_coords={r:0, th:pi/2, ph:pi}, ambient_coords=(X,T), color='brown', thickness=4, style='--', parameters={m:1}) \ + text(r'$r=0$', (2.5, 3), rotation=45, fontsize=16, color='brown') # In[19]: graph += X_SD_II.plot(X_KS, ambient_coords=(X,T), fixed_coords={th:pi/2,ph:pi}, ranges={t:(-10,10), r:(0.001,1.999)}, steps={t:1, r:0.5}, style={t:'--', r:'-'}, color='steelblue', parameters={m:1}) region_labels = text(r'$\mathscr{M}_{\rm I}$', (2.4, 0.4), fontsize=20, color='blue') + \ text(r'$\mathscr{M}_{\rm II}$', (0, 0.5), fontsize=20, color='steelblue') graph += hor + sing + region_labels show(graph, xmin=-3, xmax=3, ymin=-3, ymax=3, figsize=8) # ## Extension to $M_{\rm III}$ and $M_{\rm IV}$ # The second Schwarzschild-Droste domain: # In[20]: M_SD2 = M.open_subset('M_SD2', latex_name=r"{M'}_{\rm SD}", coord_def={X_KS: T<-X}) X_SD2. = M_SD2.chart(r't r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\varphi') # Definition of regions $M_{\rm III}$ and $M_{\rm IV}$: # In[21]: M_III = M_SD2.open_subset('M_III', latex_name=r'M_{\rm III}', coord_def={X_KS.restrict(M_SD2): [X<0, X2*m) X_SD_III # In[25]: SD_III_to_KS = X_SD_III.transition_map(X_KS_III, [-sqrt(r/(2*m)-1)*exp(r/(4*m))*sinh(t/(4*m)), - sqrt(r/(2*m)-1)*exp(r/(4*m))*cosh(t/(4*m)), th, ph]) SD_III_to_KS.display() # In[26]: X_SD_IV = X_SD2.restrict(M_IV, r<2*m) X_SD_IV # In[27]: SD_IV_to_KS = X_SD_IV.transition_map(X_KS_IV, [-sqrt(1-r/(2*m))*exp(r/(4*m))*cosh(t/(4*m)), -sqrt(1-r/(2*m))*exp(r/(4*m))*sinh(t/(4*m)), th, ph]) SD_IV_to_KS.display() # ## Penrose-Frolov-Novikov coordinates # # The coordinates $(\tilde T, \tilde X, \theta, \varphi)$ associated with the conformal compactification of the Schwarzschild spacetime are # In[28]: X_C. = M.chart(r'T1:(-pi,pi):\tilde{T} X1:(-pi,pi):\tilde{X} th:(0,pi):\theta ph:(0,2*pi):\varphi', coord_restrictions=lambda T1,X1,th,ph: [abs(T1-X1)