{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Kerr spacetime in 3+1 Kerr coordinates\n", "\n", "This Jupyter/SageMath worksheet is relative to the lectures\n", "[Geometry and physics of black holes](http://luth.obspm.fr/~luthier/gourgoulhon/bh16/)\n", " \n", "These computations are based on [SageManifolds](http://sagemanifolds.obspm.fr) (v0.9)\n", "\n", "Click [here](https://raw.githubusercontent.com/egourgoulhon/BHLectures/master/sage/Kerr_in_Kerr_coord.ipynb) to download the worksheet file (ipynb format). To run it, you must start SageMath with the Jupyter notebook, with the command `sage -n jupyter`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we set up the notebook to display mathematical objects using LaTeX formatting:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%display latex" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spacetime\n", "\n", "We declare the spacetime manifold $M$:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4-dimensional differentiable manifold M\n" ] } ], "source": [ "M = Manifold(4, 'M')\n", "print(M)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the 3+1 Kerr coordinates $(t,r,\\theta,\\phi)$ as a chart on $M$:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (M, (t, r, th, ph))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X. = M.chart(r't r th:(0,pi):\\theta ph:(0,2*pi):\\phi')\n", "X" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "t: (-oo, +oo); r: (-oo, +oo); th: (0, pi); ph: (0, 2*pi)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.coord_range()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Kerr parameters $m$ and $a$:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m = var('m', domain='real')\n", "assume(m>0)\n", "a = var('a', domain='real')\n", "assume(a>=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kerr metric\n", "\n", "We define the metric $g$ by its components w.r.t. the 3+1 Kerr coordinates:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "g = -(a^2*cos(th)^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) dt*dt + 2*m*r/(a^2*cos(th)^2 + r^2) dt*dr - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dt*dph + 2*m*r/(a^2*cos(th)^2 + r^2) dr*dt + (a^2*cos(th)^2 + 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) dr*dr - (a^3*cos(th)^2 + 2*a*m*r + a*r^2)*sin(th)^2/(a^2*cos(th)^2 + r^2) dr*dph + (a^2*cos(th)^2 + r^2) dth*dth - 2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dph*dt - (a^3*cos(th)^2 + 2*a*m*r + a*r^2)*sin(th)^2/(a^2*cos(th)^2 + r^2) dph*dr + (2*a^2*m*r*sin(th)^4 + (a^2*r^2 + r^4 + (a^4 + a^2*r^2)*cos(th)^2)*sin(th)^2)/(a^2*cos(th)^2 + r^2) dph*dph" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g = M.lorentzian_metric('g')\n", "rho2 = r^2 + (a*cos(th))^2\n", "g[0,0] = -(1 - 2*m*r/rho2)\n", "g[0,1] = 2*m*r/rho2\n", "g[0,3] = -2*a*m*r*sin(th)^2/rho2\n", "g[1,1] = 1 + 2*m*r/rho2\n", "g[1,3] = -a*(1 + 2*m*r/rho2)*sin(th)^2\n", "g[2,2] = rho2\n", "g[3,3] = (r^2+a^2+2*m*r*(a*sin(th))^2/rho2)*sin(th)^2\n", "g.display()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "g_t,t = -(a^2*cos(th)^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) \n", "g_t,r = 2*m*r/(a^2*cos(th)^2 + r^2) \n", "g_t,ph = -2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) \n", "g_r,t = 2*m*r/(a^2*cos(th)^2 + r^2) \n", "g_r,r = (a^2*cos(th)^2 + 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) \n", "g_r,ph = -(a^3*cos(th)^2 + 2*a*m*r + a*r^2)*sin(th)^2/(a^2*cos(th)^2 + r^2) \n", "g_th,th = a^2*cos(th)^2 + r^2 \n", "g_ph,t = -2*a*m*r*sin(th)^2/(a^2*cos(th)^2 + r^2) \n", "g_ph,r = -(a^3*cos(th)^2 + 2*a*m*r + a*r^2)*sin(th)^2/(a^2*cos(th)^2 + r^2) \n", "g_ph,ph = (2*a^2*m*r*sin(th)^4 + (a^2*r^2 + r^4 + (a^4 + a^2*r^2)*cos(th)^2)*sin(th)^2)/(a^2*cos(th)^2 + r^2) " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.display_comp()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The inverse metric is pretty simple:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-(a^2*cos(th)^2 + 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) 2*m*r/(a^2*cos(th)^2 + r^2) 0 0]\n", "[ 2*m*r/(a^2*cos(th)^2 + r^2) (a^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) 0 a/(a^2*cos(th)^2 + r^2)]\n", "[ 0 0 1/(a^2*cos(th)^2 + r^2) 0]\n", "[ 0 a/(a^2*cos(th)^2 + r^2) 0 -1/(a^2*sin(th)^4 - (a^2 + r^2)*sin(th)^2)]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.inverse()[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "as well as the determinant w.r.t. to the 3+1 Kerr coordinates:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "M --> R\n", "(t, r, th, ph) |--> a^4*cos(th)^6 - (a^4 - 2*a^2*r^2)*cos(th)^4 - r^4 - (2*a^2*r^2 - r^4)*cos(th)^2" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.determinant().display()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.determinant() == - (rho2*sin(th))^2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that we are dealing with a solution of the Einstein equation in vacuum:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Ric(g) = 0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.ricci().display() # long: takes 1 or 2 minutes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Christoffel symbols w.r.t. the 3+1 Kerr coordinates:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Gam^t_t,t = -2*(a^2*m^2*r*cos(th)^2 - m^2*r^3)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^t_t,r = -(a^4*m*cos(th)^4 + 2*a^2*m^2*r*cos(th)^2 - 2*m^2*r^3 - m*r^4)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^t_t,th = -2*a^2*m*r*cos(th)*sin(th)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) \n", "Gam^t_t,ph = 2*(a^3*m^2*r*cos(th)^2 - a*m^2*r^3)*sin(th)^2/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^t_r,r = -2*(a^4*m*cos(th)^4 + a^2*m^2*r*cos(th)^2 - m^2*r^3 - m*r^4)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^t_r,th = -2*a^2*m*r*cos(th)*sin(th)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) \n", "Gam^t_r,ph = (a^5*m*cos(th)^4 + 2*a^3*m^2*r*cos(th)^2 - 2*a*m^2*r^3 - a*m*r^4)*sin(th)^2/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^t_th,th = -2*m*r^2/(a^2*cos(th)^2 + r^2) \n", "Gam^t_th,ph = 2*a^3*m*r*cos(th)*sin(th)^3/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) \n", "Gam^t_ph,ph = -2*((a^4*m^2*r*cos(th)^2 - a^2*m^2*r^3)*sin(th)^4 + (a^4*m*r^2*cos(th)^4 + 2*a^2*m*r^4*cos(th)^2 + m*r^6)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_t,t = (a^2*m*r^2 - 2*m^2*r^3 + m*r^4 - (a^4*m - 2*a^2*m^2*r + a^2*m*r^2)*cos(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_t,r = (2*a^2*m^2*r*cos(th)^2 - 2*m^2*r^3 - (a^4*m*cos(th)^2 - a^2*m*r^2)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_t,ph = -(a^3*m*r^2 - 2*a*m^2*r^3 + a*m*r^4 - (a^5*m - 2*a^3*m^2*r + a^3*m*r^2)*cos(th)^2)*sin(th)^2/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_r,r = (2*a^4*m*cos(th)^4 + a^2*m*r^2 - 2*m^2*r^3 - m*r^4 - (a^4*m - 2*a^2*m^2*r + a^2*m*r^2)*cos(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_r,th = -a^2*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) \n", "Gam^r_r,ph = ((a^5*m*cos(th)^2 - a^3*m*r^2)*sin(th)^4 + (a^5*r*cos(th)^4 + 2*a*m^2*r^3 + a*r^5 - 2*(a^3*m^2*r - a^3*r^3)*cos(th)^2)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_th,th = -(a^2*r - 2*m*r^2 + r^3)/(a^2*cos(th)^2 + r^2) \n", "Gam^r_ph,ph = ((a^4*m*r^2 - 2*a^2*m^2*r^3 + a^2*m*r^4 - (a^6*m - 2*a^4*m^2*r + a^4*m*r^2)*cos(th)^2)*sin(th)^4 - (a^2*r^5 - 2*m*r^6 + r^7 + (a^6*r - 2*a^4*m*r^2 + a^4*r^3)*cos(th)^4 + 2*(a^4*r^3 - 2*a^2*m*r^4 + a^2*r^5)*cos(th)^2)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_t,t = -2*a^2*m*r*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_t,r = -2*a^2*m*r*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_t,ph = 2*(a^3*m*r + a*m*r^3)*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_r,r = -2*a^2*m*r*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_r,th = r/(a^2*cos(th)^2 + r^2) \n", "Gam^th_r,ph = (a^5*cos(th)^5 + 2*a^3*r^2*cos(th)^3 + (2*a^3*m*r + 2*a*m*r^3 + a*r^4)*cos(th))*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_th,th = -a^2*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) \n", "Gam^th_ph,ph = -((a^6 - 2*a^4*m*r + a^4*r^2)*cos(th)^5 + 2*(a^4*r^2 - 2*a^2*m*r^3 + a^2*r^4)*cos(th)^3 + (2*a^4*m*r + 4*a^2*m*r^3 + a^2*r^4 + r^6)*cos(th))*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_t,t = -(a^3*m*cos(th)^2 - a*m*r^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_t,r = -(a^3*m*cos(th)^2 - a*m*r^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_t,th = -2*a*m*r*cos(th)/((a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4)*sin(th)) \n", "Gam^ph_t,ph = (a^4*m*cos(th)^2 - a^2*m*r^2)*sin(th)^2/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_r,r = -(a^3*m*cos(th)^2 - a*m*r^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_r,th = -(a^3*cos(th)^3 + (2*a*m*r + a*r^2)*cos(th))/((a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4)*sin(th)) \n", "Gam^ph_r,ph = (a^4*r*cos(th)^4 + 2*a^2*r^3*cos(th)^2 + r^5 + (a^4*m*cos(th)^2 - a^2*m*r^2)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_th,th = -a*r/(a^2*cos(th)^2 + r^2) \n", "Gam^ph_th,ph = (a^4*cos(th)^5 - 2*(a^2*m*r - a^2*r^2)*cos(th)^3 + (2*a^2*m*r + r^4)*cos(th))/((a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4)*sin(th)) \n", "Gam^ph_ph,ph = -((a^5*m*cos(th)^2 - a^3*m*r^2)*sin(th)^4 + (a^5*r*cos(th)^4 + 2*a^3*r^3*cos(th)^2 + a*r^5)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.christoffel_symbols_display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vector normal to the hypersurfaces $r=\\mathrm{const}$" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1-form dr on the 4-dimensional differentiable manifold M\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "dr = dr" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dr = X.coframe()[1]\n", "print(dr)\n", "dr.display()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vector field on the 4-dimensional differentiable manifold M\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "2*m*r/(a^2*cos(th)^2 + r^2) d/dt + (a^2 - 2*m*r + r^2)/(a^2*cos(th)^2 + r^2) d/dr + a/(a^2*cos(th)^2 + r^2) d/dph" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nr = dr.up(g)\n", "print(nr)\n", "nr.display()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "m + sqrt(-a^2 + m^2)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "assume(a^2" ], "text/plain": [ "(t, m + sqrt(-a^2 + m^2), th, ph)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X(p)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tangent vector at Point p on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "nrH = nr.at(p)\n", "print(nrH)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tangent space at Point p on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "Tp = M.tangent_space(p)\n", "print(Tp)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Basis (d/dt,d/dr,d/dth,d/dph) on the Tangent space at Point p on the 4-dimensional differentiable manifold M" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Tp.default_basis()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*(sqrt(a + m)*sqrt(-a + m)*m + m^2)/(a^2*sin(th)^2 - 2*sqrt(a + m)*sqrt(-a + m)*m - 2*m^2),\n", " 0,\n", " 0,\n", " -a/(a^2*sin(th)^2 - 2*sqrt(a + m)*sqrt(-a + m)*m - 2*m^2)]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nrH[:]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "1/2*a/((m + sqrt(-a^2 + m^2))*m)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "OmegaH = a/(2*m*rp)\n", "OmegaH" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector field d/dt on the 4-dimensional differentiable manifold M" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xi = X.frame()[0]\n", "xi" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector field d/dph on the 4-dimensional differentiable manifold M" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eta = X.frame()[3]\n", "eta" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "d/dt + 1/2*a/(sqrt(a + m)*sqrt(-a + m)*m + m^2) d/dph" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chi = xi + OmegaH*eta\n", "chi.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ingoing principal null geodesics" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "k = d/dt - d/dr" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k = M.vector_field(name='k')\n", "k[0] = 1\n", "k[1] = -1\n", "k.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that $k$ is a null vector:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "g(k,k): M --> R\n", " (t, r, th, ph) |--> 0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g(k,k).display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Computation of $\\nabla_k k$:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nab = g.connection()\n", "acc = nab(k).contract(k)\n", "acc.display()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "nabla_g(k) = (a^2*m*cos(th)^2 - m*r^2)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dt*dt + (a^2*m*cos(th)^2 - m*r^2)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dt*dr - (a^3*m*cos(th)^2 - a*m*r^2)*sin(th)^2/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dt*dph - (a^2*m*cos(th)^2 - m*r^2)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dr*dt - (a^2*m*cos(th)^2 - m*r^2)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dr*dr + a^2*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) d/dr*dth - ((a^3*m - a^3*r)*sin(th)^4 - (a^3*m - a^3*r - a*m*r^2 - a*r^3)*sin(th)^2)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) d/dr*dph - r/(a^2*cos(th)^2 + r^2) d/dth*dth - a*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) d/dth*dph + a*cos(th)/((a^2*cos(th)^2 + r^2)*sin(th)) d/dph*dth - r/(a^2*cos(th)^2 + r^2) d/dph*dph" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nab(k).display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outgoing principal null geodesics" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "el = 1/2*(a^2 + 2*m*r + r^2)/(a^2 + r^2) d/dt + 1/2*(a^2 - 2*m*r + r^2)/(a^2 + r^2) d/dr + a/(a^2 + r^2) d/dph" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el = M.vector_field(name='el', latex_name=r'\\ell')\n", "el[0] = 1/2 + m*r/(r^2+a^2)\n", "el[1] = 1/2 - m*r/(r^2+a^2)\n", "el[3] = a/(r^2+a^2)\n", "el.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that $\\ell$ is a null vector:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "g(el,el): M --> R\n", " (t, r, th, ph) |--> 0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g(el,el).display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Computation of $\\nabla_\\ell \\ell$:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-1/2*(a^4*m + 2*a^2*m^2*r - 2*m^2*r^3 - m*r^4)/(a^6 + 3*a^4*r^2 + 3*a^2*r^4 + r^6) d/dt - 1/2*(a^4*m - 2*a^2*m^2*r + 2*m^2*r^3 - m*r^4)/(a^6 + 3*a^4*r^2 + 3*a^2*r^4 + r^6) d/dr - (a^3*m - a*m*r^2)/(a^6 + 3*a^4*r^2 + 3*a^2*r^4 + r^6) d/dph" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acc = nab(el).contract(el)\n", "acc.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We check that $\\nabla_\\ell \\ell \\propto \\ell$:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-(a^2*m - m*r^2)/(a^4 + 2*a^2*r^2 + r^4)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "-(a^2*m - m*r^2)/(a^4 + 2*a^2*r^2 + r^4)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "-(a^2*m - m*r^2)/(a^4 + 2*a^2*r^2 + r^4)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in [0,1,3]:\n", " pretty_print(acc[i] / el[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence we may write $\\nabla_\\ell\\ell = \\kappa \\ell$:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-(a^2*m - m*r^2)/(a^4 + 2*a^2*r^2 + r^4)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kappa = (acc[0] / el[0]).expr()\n", "kappa" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acc == kappa * el" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Surface gravity\n", "\n", "On $H$, $\\ell$ coincides with the Killing vector $\\chi$:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el.at(p) == chi.at(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thefore the surface gravity of the Kerr black hole is nothing but the value of the non-affinity coefficient of $\\ell$ on $H$:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "1/2*(a^2 - m^2 - sqrt(-a^2 + m^2)*m)/(a^2*m - 2*m^3 - 2*sqrt(-a^2 + m^2)*m^2)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kappaH = kappa.subs(r=rp).simplify_full()\n", "kappaH" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool(kappaH == sqrt(m^2-a^2)/(2*m*(m+sqrt(m^2-a^2))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A variant for $\\ell$:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "el = (a^2 + 2*m*r + r^2) d/dt + (a^2 - 2*m*r + r^2) d/dr + 2*a d/dph" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el = M.vector_field(name='el', latex_name=r'\\ell')\n", "el[0] = r^2+a^2 + 2*m*r\n", "el[1] = r^2+a^2 - 2*m*r\n", "el[3] = 2*a\n", "el.display()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "g(el,el): M --> R\n", " (t, r, th, ph) |--> 0" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g(el,el).display()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(-2*a^2*m + 2*m*r^2 + 2*r^3 + 2*(a^2 - 2*m^2)*r) d/dt + (-2*a^2*m - 6*m*r^2 + 2*r^3 + 2*(a^2 + 2*m^2)*r) d/dr + (-4*a*m + 4*a*r) d/dph" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acc = nab(el).contract(el)\n", "acc.display()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-2*m + 2*r" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "-2*m + 2*r" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "-2*m + 2*r" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in [0,1,3]:\n", " pretty_print(acc[i] / el[i])" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-2*m + 2*r" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kappa = (acc[0] / el[0]).expr()\n", "kappa" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acc == kappa * el" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 6.10", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }