{
"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
}