<jupyter_start><jupyter_text>![Astrofisica Computacional](logo.png) ---<NAME> (<EMAIL>)---  Propiedades de la Solución de  Schwarzschild--- ResumenEste cuaderno utiliza [SageMath](https://www.sagemath.org) y [SageManifolds](https://sagemanifolds.obspm.fr/index.html) para calcular algunas propiedades geométricas del espacio-tiempo de Schwarzschild incluyendo  simbolos de Christoffel, el tensor de Riemann, el tensor de Ricci y el escalar de Kretschmann.  Nota: Este cuaderno fue creado utilizando SageMath >= 9.4<jupyter_code>version()<jupyter_output><empty_output><jupyter_text>Activamos la visualización matemática via LaTeX,<jupyter_code>%display latex<jupyter_output><empty_output><jupyter_text>1.  Definición del Espacio-TiempoEl espaciotiempo se define como una variedad Lorentziana 4-dimensional,<jupyter_code>MU = Manifold(4, 'MU', structure='Lorentzian')
print(MU)<jupyter_output>4-dimensional Lorentzian manifold MU<jupyter_text>1.1. Coordenadas Estandard Se introducen las coordenadas esfericas (estandard) o **coordenadas de Schwarzschild-Droste**  utilizando el método `.chart()` del objeto variedad`MU`. El argumento del método `.chart()` es una cadena de texto que define cada una de las coordenadas y sus rangos, si son diferentes de $(-\infty, +\infty)$, al igual que el sìmbolo LaTeX que las representará.Note que las variables de `Python` para cada coordenada son declaradas dentro del operador ``en el lado izquierdo. La variable `X` denotará la carta coordenada.<jupyter_code>X.<t,r,th,ph> = MU.chart(r"t r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
X<jupyter_output><empty_output><jupyter_text>2. Tensor MetricoPara definir la métrica de Schwarzschild, es necesario declarar el parámetro de masa $M$ como una variable simbólica utilizando al función `var()`. Adicionalmente asumiremos que este parámetro toma valores positivos.<jupyter_code>M = var('M')
assume(M>=0)<jupyter_output><empty_output><jupyter_text>Ahora definimos el tensor métrico<jupyter_code>g = MU.metric()
g[0,0] = -(1-2*M/r)
g[1,1] = 1/(1-2*M/r)
g[2,2] = r^2
g[3,3] = (r*sin(th))^2
g.display()
g[:]<jupyter_output><empty_output><jupyter_text>3. Simbolos de Christoffel (Conexiones)Los simbolos de Christoffel (de segunda especie) para la métrica $g$ en las coordenadas de Schwarzschild-Droste se definen como\begin{equation}\Gamma^\alpha_{\mu \nu} = \frac{1}{2} g^{\alpha \sigma} \left[ \partial_\mu g_{\sigma \nu} + \partial_\nu g_{\mu \sigma } - \partial_\sigma g_{\mu \nu} \right]\end{equation}Estas componentes se pueden obtener mediante el método `.christoffel_symbols_display()` del objeto métrica, `g`. Por defecto, solo se mostrarán las componentes no-nulas y no-redundantes (i.e. se tiene en cuenta la propiedad de simetría $\Gamma^\alpha_{\mu \nu} = \Gamma^\alpha_{\nu \mu}$). De igual forma, utilizando el símbolo `?` al final del comando, i.e. `g.christoffel_symbols_display?` se visualiza la información y opciones disponibles para el método.<jupyter_code>g.christoffel_symbols_display?
g.christoffel_symbols_display()<jupyter_output><empty_output><jupyter_text>También es posible acceder a cada componente particular,<jupyter_code>g.christoffel_symbols()[0,1,0]<jupyter_output><empty_output><jupyter_text>Podemos comprobar que la simetría en los indices inferiores se satisface,<jupyter_code>g.christoffel_symbols()[0,0,1] == g.christoffel_symbols()[0,1,0]<jupyter_output><empty_output><jupyter_text>4. Tensor de CurvaturaEl tensor de curvatura de Riemann se define como\begin{equation}R^\mu_{\,\, \nu \rho \sigma} = \frac{\partial \Gamma^\mu_{ \nu \sigma}}{\partial x^{\rho}} - \frac{\partial \Gamma^\mu_{ \nu \rho}}{\partial x^{\sigma}} + \Gamma^{\alpha}_{\nu \sigma}\Gamma^\mu_{\rho \alpha} - \Gamma^{\alpha}_{\ \nu \rho}\Gamma^\mu_{\sigma \alpha} \end{equation}Este puede calculares mediante el método `.riemann()` de la métrica,<jupyter_code>Riemann = g.riemann()
print(Riemann)<jupyter_output>Tensor field Riem(g) of type (1,3) on the 4-dimensional Lorentzian manifold MU<jupyter_text>**Es importante notar que este es un tensor de orden (1,3)**.<jupyter_code>Riemann<jupyter_output><empty_output><jupyter_text>Para visualizar sus componentes utilizamos el método `.display()`,<jupyter_code>Riemann.display()
Riemann[:]<jupyter_output><empty_output><jupyter_text>Cada componente particular se visualiza utilizando los índices correspondientes. Por ejemplo, la componente $R^0_{\ \,101} = R^t_{\ \,trt}$ será<jupyter_code>Riemann[0,1,1,0]
Riemann[0,1,0,1]<jupyter_output><empty_output><jupyter_text>Para obtener el tensor de curvatura del tipo (0,4) se utiliza el método `.down()`:<jupyter_code>Riemann_dddd = Riemann.down(g)
Riemann_dddd
Riemann_dddd.display()
Riemann_dddd.display_comp()
Riemann_dddd[0,1,0,1]
Riemann_dddd[0,1,1,0]
Riemann_dddd[1,0,0,1]
Riemann_dddd[1,0,0,1]<jupyter_output><empty_output><jupyter_text>5. Tensor de RicciEl tensor de Ricci se calcula con el método `.ricci()` de la metrica,<jupyter_code>Ricci = g.ricci()
Ricci<jupyter_output><empty_output><jupyter_text>Como era de esperar, todas sus componentes son cero en este caso,<jupyter_code>Ricci.display()
Ricci[:]<jupyter_output><empty_output><jupyter_text>Tensor de Ricci Tensor (Version Alternativa)Otra forma de calcular este tensor es contrayendo el trensor de Riemann\begin{equation}R_{\mu \nu} = R^\alpha_{\,\, \mu \alpha \nu} = g ^{\alpha \beta} R_{\alpha \mu \beta \nu}\end{equation}<jupyter_code>Ric = g.up(g)['^{ab}'] * Riemann.down(g)['_{acbd}']
Ricci[:]<jupyter_output><empty_output><jupyter_text>5.1. Escalar de Curvatura de RicciEl escalar de curvatura puede obtenerse contrayendo la métrica con el tesnor de Ricci,<jupyter_code>R = g['_{ab}'] * Ricci.up(g)['^{ab}']
print(R)
R.display()<jupyter_output><empty_output><jupyter_text>La expresión simbólica de un campo escalar se realiza utilizando el método `.expr()`:<jupyter_code>R.expr()<jupyter_output><empty_output><jupyter_text>También es posible utilizar el método `.ricci_scalar()`<jupyter_code>R = g.ricci_scalar()
R.expr()<jupyter_output><empty_output><jupyter_text>6. Escalar de Kretschmann El escalar de Kretschmann es el "cuadrado" del tensor de Riemann,\begin{equation} K = R_{\mu \nu \rho \sigma} R^{\mu \nu \rho \sigma}\end{equation}Para calcularlo, se necesita el tensor de curvtura con todos los indices abajo y con todos los indices arriba,  i.e. $R_{\mu \nu \rho \sigma}$ y $R^{\mu \nu \rho \sigma}$. Estos se evaluan utilizando los métodos`.down()` y `.up()`. Luego se realiza la contracción de los índices en el orden establecido,<jupyter_code>K = Riemann.down(g)['_{abcd}'] * Riemann.up(g)['^{abcd}']
K
K.display()
K.expr()<jupyter_output><empty_output><jupyter_text>Summary of methods```Manifold.chart()Manifold.metric()``````metric.christoffel_symbols_display()metric.christoffel_symbols()[]metric.riemann()metric.ricci()``````tensor.display()tensor[:]tensor.expr()tensor.up(metric)tensor.down(metric)```<jupyter_code>g.display?<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14028258362168397, 'fraction_numerical': 0.011678200692041523, 'mean_word_length': 6.847285067873303, 'pattern_counts': {'":': 0, '<': 90, '<?xml version=': 0, '>': 92, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '22', 'dir': 'jupyter-structured-clean-dedup', 'id': '339186', 'license': 'MIT', 'n_tokens_mistral': 2667, 'n_tokens_neox': 2552, 'n_words': 609, 'path': '02.Schwarzschild.ipynb', 'repo_name': 'ashcat2005/SchwarzschildBH', 'size': '6962'}