{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Extended rotating Hayward metric\n", "\n", "This Jupyter/SageMath notebook is related to the article [Lamy et al, arXiv:1802.01635](https://arxiv.org/abs/1802.01635).\n", "\n", "The metric is that obtained by [Bambi & Modesto, Phys. Lett. B **721**, 329 (2013)](http://www.sciencedirect.com/science/article/pii/S0370269313002505) by applying the Newman-Janis transformation to the (non-rotating) Hayward metric for regular black holes ([Hayward, PRL **96**, 031103 (2006)](https://doi.org/10.1103/PhysRevLett.96.031103)), extended to cover the region $r<0$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'SageMath version 8.1, Release Date: 2017-12-07'" ] }, "execution_count": 1, "metadata": { }, "output_type": "execute_result" } ], "source": [ "version()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "%display latex" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "To speed up the computation of the Riemann tensor, we ask for parallel computations on 8 threads:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "Parallelism().set(nproc=1) # use nproc=1 on CoCalc" ] }, { "cell_type": "code", "execution_count": 4, "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": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 5, "metadata": { }, "output_type": "execute_result" } ], "source": [ "M1 = M.open_subset('M_1')\n", "XBL1. = M1.chart(r't r:(0,+oo) th:(0,pi):\\theta ph:(0,2*pi):\\phi')\n", "XBL1" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 6, "metadata": { }, "output_type": "execute_result" } ], "source": [ "M2 = M.open_subset('M_2')\n", "forget(r>0)\n", "XBL2. = M2.chart(r't r:(-oo,0) th:(0,pi):\\theta ph:(0,2*pi):\\phi')\n", "M._top_charts.append(XBL2)\n", "XBL2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 7, "metadata": { }, "output_type": "execute_result" } ], "source": [ "forget(r<0)\n", "assumptions()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "g = M.lorentzian_metric('g')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "a, b = var('a b')\n", "Sigma = r^2 + a^2*cos(th)^2" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 10, "metadata": { }, "output_type": "execute_result" } ], "source": [ "m = r^3/(r^3 + 2*b^2)\n", "m1 = m\n", "Delta = r^2 - 2*m*r + a^2\n", "g1 = g.restrict(M1)\n", "g1[0,0] = -(1 - 2*r*m/Sigma)\n", "g1[0,3] = -2*a*r*sin(th)^2*m/Sigma\n", "g1[1,1] = Sigma/Delta\n", "g1[2,2] = Sigma\n", "g1[3,3] = (r^2 + a^2 + 2*r*(a*sin(th))^2*m/Sigma)*sin(th)^2\n", "g.display(XBL1.frame())" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 11, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.display_comp(XBL1.frame())" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 12, "metadata": { }, "output_type": "execute_result" } ], "source": [ "m = -r^3/(-r^3 + 2*b^2)\n", "m2 = m\n", "Delta = r^2 - 2*m*r + a^2\n", "g2 = g.restrict(M2)\n", "g2[0,0] = -(1 - 2*r*m/Sigma)\n", "g2[0,3] = -2*a*r*sin(th)^2*m/Sigma\n", "g2[1,1] = Sigma/Delta\n", "g2[2,2] = Sigma\n", "g2[3,3] = (r^2 + a^2 + 2*r*(a*sin(th))^2*m/Sigma)*sin(th)^2\n", "g.display(XBL2.frame())" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 13, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.display_comp(XBL2.frame())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "12c67e46242d17ec30af0bf576c4c8dbd9e6e311" }, "execution_count": 14, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot(m1.subs(b=1), (r, 0, 8), axes_labels=[r'$r/m$', r'$M(r)/m$'], gridlines=True) \n", "graph += plot(m2.subs(b=1), (r, -8, 0))\n", "graph" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 15, "metadata": { }, "output_type": "execute_result" } ], "source": [ "gm1 = g.inverse()\n", "gm1.display(XBL1.frame())" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 16, "metadata": { }, "output_type": "execute_result" } ], "source": [ "gm1.display(XBL2.frame())" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#g.christoffel_symbols_display(XBL1)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#gam = g.christoffel_symbols(XBL1)\n", "#for i in range(4):\n", "# for j in range(4):\n", "# for k in range(j,4):\n", "# print(\"---------------------\")\n", "# print(\"Gamma^{}_{}{} for r >=0:\".format(i,j,k))\n", "# if gam[i,j,k] == 0:\n", "# print(0)\n", "# else:\n", "# show(gam[i,j,k].expr().factor())\n", "# print(gam[i,j,k].expr().factor())" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#g.christoffel_symbols_display(XBL2)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#gam = g.christoffel_symbols(XBL2)\n", "#for i in range(4):\n", "# for j in range(4):\n", "# for k in range(j,4):\n", "# print(\"--------------------\")\n", "# print(\"Gamma^{}_{}{} for r < 0:\".format(i,j,k))\n", "# if gam[i,j,k] == 0:\n", "# print(0)\n", "# else:\n", "# show(gam[i,j,k].expr().factor())\n", "# print(gam[i,j,k].expr().factor())" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### $g_{tt}$ component" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 21, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.restrict(M1)[0,0]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 22, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.restrict(M2)[0,0]" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def plot_profile(field, param_values, rmin, rmax, y_label, comp=None, \n", " ymin=None, ymax=None, gridlines=True):\n", " graph = Graphics()\n", " rmin0 = max(rmin, 0)\n", " rmax0 = min(rmax, 0)\n", " if rmax > 0:\n", " f1 = field.restrict(M1)\n", " if comp is not None:\n", " f1 = f1[comp].expr()\n", " else:\n", " f1 = f1.expr()\n", " f1 = f1.subs(param_values)\n", " graph += plot(f1.subs(th=0), (r, rmin0, rmax), color='lightblue', \n", " legend_label=r'$\\theta=0$', axes_labels = [r'$r/m$', y_label],\n", " ymin=ymin, ymax=ymax, gridlines=gridlines)\n", " graph += plot(f1.subs(th=pi/4), (r, rmin0, rmax), color='magenta', \n", " legend_label=r'$\\theta=\\pi/4$')\n", " graph += plot(f1.subs(th=pi/2), (r, rmin0, rmax), color='blue', \n", " legend_label=r'$\\theta=\\pi/2$')\n", " if rmin < 0:\n", " f1 = field.restrict(M2)\n", " if comp is not None:\n", " f1 = f1[comp].expr()\n", " else:\n", " f1 = f1.expr()\n", " f1 = f1.subs(param_values)\n", " graph += plot(f1.subs(th=0), (r, rmin, rmax0), color='lightblue', \n", " axes_labels = [r'$r/m$', y_label],\n", " ymin=ymin, ymax=ymax)\n", " graph += plot(f1.subs(th=pi/4), (r, rmin, rmax0), color='magenta')\n", " graph += plot(f1.subs(th=pi/2), (r, rmin, rmax0), color='blue')\n", " return graph" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "20126daf656697fee1258c6ca8d6ccab60693cfb" }, "execution_count": 24, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(g, {a: 0.9, b: 1}, -8, 8, r'$g_{tt}$', comp=(0,0))\n", "graph.save('g_tt.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Lapse function\n", "\n", "The lapse function $N$ is deduced from the standard formula $g^{tt} = - 1/N^2$:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 25, "metadata": { }, "output_type": "execute_result" } ], "source": [ "M.top_charts()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 26, "metadata": { }, "output_type": "execute_result" } ], "source": [ "NN = M.scalar_field(coord_expression={XBL1: sqrt(- 1 / g.restrict(M1).inverse()[0,0]),\n", " XBL2: sqrt(- 1 / g.restrict(M2).inverse()[0,0])},\n", " name='N')\n", "NN.display()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "125b1f2fb4e4fb93cdda10f312d11a67327a69f0" }, "execution_count": 27, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(NN, {a: 0.9, b: 1}, -8, 8, r'$N$')\n", "graph.save('lapse.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### $g_{t\\phi}$ component" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "c85e7ba31a4421ad4889232cc53f8d9c065d8d67" }, "execution_count": 28, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(g, {a: 0.9, b: 1}, -8, 8, r'$g_{t\\phi}$', comp=(0,3))\n", "graph.save('g_tphi.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Other metric components" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "a0c1bdacd5fc9423dfa0a1bcfe3de6f2bc5ce950" }, "execution_count": 29, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(g, {a: 2, b: 0.5}, -4, 4, r'$g_{\\phi\\phi}$', comp=(3,3))\n", "graph.save('g_phiphi.pdf')\n", "graph" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 30, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.restrict(M1)[3,3].expr().factor()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 31, "metadata": { }, "output_type": "execute_result" } ], "source": [ "g.restrict(M2)[3,3].expr().factor()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "b1460a95bfc18f2c21accb6d5ab26979176891a8" }, "execution_count": 32, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(g, {a: 0.9, b: 1}, -4, 4, r'$g_{rr}$', comp=(1,1))\n", "graph.save('g_rr.pdf')\n", "graph" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "a159be5e87f56683a4c604d9e1072aa681026eab" }, "execution_count": 33, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(g, {a: 0.9, b: 1}, -2, 2, r'$g_{\\theta\\theta}$', comp=(2,2))\n", "graph.save('g_thth.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Ricci tensor" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Field of symmetric bilinear forms Ric(g) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "Ric = g.ricci() ; print(Ric)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 35, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ric.display_comp(XBL1.frame())" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "We check that for $b=0$, we are dealing with a solution of the vacuum Einstein equation:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 36, "metadata": { }, "output_type": "execute_result" } ], "source": [ "all([all([Ric[i,j].expr().subs(b=0) == 0 for i in range(4)]) for j in range(4)])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Ricci scalar:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 37, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rscal = g.ricci_scalar()\n", "Rscal.display()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "fb14945cd7c0b3211f3bc3fe5736fa22c803c0dc" }, "execution_count": 38, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(Rscal, {a: 0.9, b: 1}, -3, 3, r'$R$')\n", "graph.save('ricci_scalar_HT.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Riemann tensor" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor field Riem(g) of type (1,3) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "R = g.riemann() ; print(R)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 40, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R[0,1,2,3]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Kretschmann scalar\n", "\n", "The tensor $R^\\flat$, of components $R_{abcd} = g_{am} R^m_{\\ \\, bcd}$:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor field of type (0,4) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "dR = R.down(g); print(dR)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The tensor $R^\\sharp$, of components $R^{abcd} = g^{bp} g^{cq} g^{dr} R^a_{\\ \\, pqr}$:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor field of type (4,0) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "uR = R.up(g); print(uR)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Kretschmann scalar $K := R^{abcd} R_{abcd}$:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 43, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Kr_scalar = uR['^{abcd}']*dR['_{abcd}']\n", "Kr_scalar.display()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 44, "metadata": { }, "output_type": "execute_result" } ], "source": [ "K = Kr_scalar.expr()\n", "K" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 45, "metadata": { }, "output_type": "execute_result" } ], "source": [ "K_0 = K.subs(r=0)\n", "K_0" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The equatorial value of the Kretschmann scalar is" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 46, "metadata": { }, "output_type": "execute_result" } ], "source": [ "K_eq = K.subs(th=pi/2).simplify_full()\n", "K_eq" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 47, "metadata": { }, "output_type": "execute_result" } ], "source": [ "taylor(K_eq, r, 0, 6)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The limit $r\\rightarrow 0$:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 48, "metadata": { }, "output_type": "execute_result" } ], "source": [ "K_eq.subs(r=0)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "We recover the same value as that given by Eq. (24) of [Bambi & Modesto, Phys. Lett. B **721**, 329 (2013)](http://www.sciencedirect.com/science/article/pii/S0370269313002505) (note that the quantity $g$ used by Bambi & Modesto is related to our $b$ by $g^3 = 2 b^2$)." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "iframe": "e2ebb6056cf76a1a87c96cec1d6caab46c04e9e0" }, "output_type": "execute_result" } ], "source": [ "K1 = K.subs({a: 0.9, b: 1})\n", "plot3d(K1, (r, -1/2, 1/2), (th, 0, pi/2), plot_points=200,\n", " aspect_ratio=[2, 1, 0.1], axes_labels=['r', 'theta', 'K'],\n", " viewer='threejs', online=True)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "a12d28b48d797cbfb3ea5477cdb224658e1bab79" }, "execution_count": 50, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(Kr_scalar, {a: 0.9, b: 1}, -3, 3, r'$K$')\n", "graph.save('Kretschmann_scalar_HT.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "#### Non-rotating limit" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 51, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ka0 = K.subs(a=0).simplify_full()\n", "Ka0" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 52, "metadata": { }, "output_type": "execute_result" } ], "source": [ "taylor(Ka0, r, 0, 6)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Check: we recover Schwarzschild value when $b=0$:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 53, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ka0.subs(b=0).simplify_full()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Chern-Pontryagin scalar\n", "\n", "We start by getting the Levi-Civita 4-vector $\\epsilon^{abcd}$:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4-vector field on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "epsv = g.volume_form(contra=4)\n", "print(epsv)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 55, "metadata": { }, "output_type": "execute_result" } ], "source": [ "epsv.display()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The dual Riemann tensor is computed as \n", "$$ {}^*R^{abcd} = \\frac{1}{2} \\epsilon^{abmn} R_{mnrs} g^{rc} g^{sd} $$\n", "with $ \\frac{1}{2} \\epsilon^{abmn} R_{mnrs}$ as a first step:" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor field of type (2,2) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "tmp = 1/2*epsv['^{abmn}']*dR['_{mnrs}']\n", "print(tmp)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor field of type (4,0) on the 4-dimensional differentiable manifold M\n" ] } ], "source": [ "dual_Riem = tmp.up(g)\n", "print(dual_Riem)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 58, "metadata": { }, "output_type": "execute_result" } ], "source": [ "dual_Riem[0,1,2,3]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Chern-Pontryagin scalar is ${}^*R^{abcd} R_{abcd}$:" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 59, "metadata": { }, "output_type": "execute_result" } ], "source": [ "CP_scalar = dual_Riem['^{abcd}']*dR['_{abcd}']\n", "CP_scalar.display()" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 60, "metadata": { }, "output_type": "execute_result" } ], "source": [ "CP = CP_scalar.expr().factor()\n", "CP" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Kerr value is obtained for $b=0$:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 61, "metadata": { }, "output_type": "execute_result" } ], "source": [ "CP.subs(b=0).factor()" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 62, "metadata": { }, "output_type": "execute_result" } ], "source": [ "num = _.numerator()/(96*a*cos(th)*r)\n", "num" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 63, "metadata": { }, "output_type": "execute_result" } ], "source": [ "num.expand()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The above value of the Chern-Pontryagin scalar coincides with $-K_2$ as given by Eq. (32) with $Q=0$ of [Cherubini et al., IJMPD **11**, 827 (2002)](https://doi.org/10.1142/S0218271802002037)." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "iframe": "9208374b6ebc3fc17b96bc20b9f54019f3d2fcfd" }, "output_type": "execute_result" } ], "source": [ "CP1 = CP.subs({a: 0.9, b: 1})\n", "plot3d(CP1, (r, -1/2, 1/2), (th, 0, pi/2), plot_points=200,\n", " aspect_ratio=[2, 1, 0.1], axes_labels=['r', 'theta', 'CP'],\n", " viewer='threejs', online=True)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "7f5ed805c666e1b7e5ed8bd1bdb8ae5ffb8b6add" }, "execution_count": 65, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(CP_scalar, {a: 0.9, b: 1}, -3, 3, r'$CP$')\n", "graph.save('ChernPontryagin_scalar_HT.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Ricci squared\n", "\n", "The Ricci squared is $R_{ab} R^{ab}$:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 66, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ric2_scalar = Ric['_ab'] * Ric.up(g)['^ab']\n", "Ric2_scalar.display()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 67, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ric2 = Ric2_scalar.expr().factor()\n", "Ric2" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Kerr value is obtained for $b=0$; we check that it is zero:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 68, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Ric2.subs({b: 0})" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "iframe": "2f529b6ae0209c28cc0e673183369c6f6d8933ef" }, "output_type": "execute_result" } ], "source": [ "Ric2_plot = Ric2.subs({a: 0.9, b: 1})\n", "plot3d(Ric2_plot, (r, -1/2, 1/2), (th, 0, pi/2), plot_points=200,\n", " aspect_ratio=[2, 1, 0.1], axes_labels=['r', 'theta', 'R_{ab} R^{ab}'],\n", " viewer='threejs', online=True)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "6973c5d05b9ff7a6b397bfb3f8c93003b335f65a" }, "execution_count": 70, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(Ric2_scalar, {a: 0.9, b: 1}, -3, 3, r'$R_{ab} R^{ab}$')\n", "graph.save('Ric2_scalar_HT.pdf')\n", "graph" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Euler invariant" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "E_scalar=-Kr_scalar+4*Ric2_scalar-Rscal*Rscal" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "b26a5fcad17e67b0c10947b8cf207a67d1b09793" }, "execution_count": 73, "metadata": { }, "output_type": "execute_result" } ], "source": [ "graph = plot_profile(E_scalar, {a: 0.9, b: 1}, -3, 3, r'$E$')\n", "graph.save('Euler_scalar.pdf')\n", "graph" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ ] } ], "metadata": { "kernelspec": { "display_name": "SageMath (stable)", "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.14" } }, "nbformat": 4, "nbformat_minor": 0 }