{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Study of stable circular orbits in the equatorial plane\n", "\n", "This Jupyter/SageMath notebook is related to the article [Lamy et al, arXiv:1802.01635](https://arxiv.org/abs/1802.01635)." ] }, { "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": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "from sage.manifolds.utilities import simplify_chain_real as simpl" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Spacetime" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "a0 = 0.7\n", "b0 = 1" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 5, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('r a b')\n", "var('th', latex_name=r'\\theta')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 6, "metadata": { }, "output_type": "execute_result" } ], "source": [ "m(b,r) = (1-unit_step(r))* r^3/(r^3 - 2*b^2) + \\\n", " unit_step(r)* r^3/(r^3 + 2*b^2)\n", "m(b,r)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 7, "metadata": { }, "output_type": "execute_result" } ], "source": [ "m(0,r) # Kerr limit" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "22e21cbf60931b001ab417e3b921ce78a3494004" }, "execution_count": 8, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot(m(1, r), (r, -6, 6), axes_labels=[r\"$r$\", r\"$m(r)$\"], \n", " title=r\"$b=1$\", title_pos=(0.9, 1.1))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Derivatives of the mass function" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 9, "metadata": { }, "output_type": "execute_result" } ], "source": [ "md(b, r) = diff(m(b, r), r)\n", "md(b, r)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Because of the step function, the derivative contains Dirac delta functions. We get rid of them by means of the following Python function:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def remove_dirac(f):\n", " return f.subs({dirac_delta(r): 0}).simplify()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 11, "metadata": { }, "output_type": "execute_result" } ], "source": [ "md(b, r) = remove_dirac(md(b, r))\n", "md(b, r)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "bc8961c390dfd2791a231218e30453c08aa07f97" }, "execution_count": 12, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot(md(1, r), (r, -6, 6), axes_labels=[r\"$r$\", r\"$m'(r)$\"],\n", " title=r\"$b=1$\", title_pos=(0.9, 1))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 13, "metadata": { }, "output_type": "execute_result" } ], "source": [ "mdd(b, r) = remove_dirac(diff(md(b, r), r))\n", "mdd(b, r)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "623557bcfae37d342a147261d7efae89c22e0277" }, "execution_count": 14, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot(mdd(1, r), (r, -6, 6), axes_labels=[r\"$r$\", r\"$m''\\,(r)$\"],\n", " title=r\"$b=1$\", title_pos=(0.9, 1))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Horizons" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "8e3c72cd248c14e83ab9a58bdda4a7f413e7310e" }, "execution_count": 15, "metadata": { }, "output_type": "execute_result" } ], "source": [ "D=r^2+a^2-2*m(b,r)*r\n", "plot(D.subs({a:a0},{b:b0}),(r,-5,5))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#find_root(D.subs({a:a0},{b:b0}),0,1)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Circular orbits in the equatorial plane (Condition1>0 & Condition2>0)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## $E$, $L$ and $\\Omega$ of a test particle in the equatorial plane" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#t_dot(a,b,E,L,r,th) = ((r^2+a^2)*(E*(r^2+a^2)-a*L)/D - a*(a*E*sin(th)^2-L))/Sigma\n", "#phi_dot(a,b,E,L,r,th) = (a*(E*(r^2+a^2)-a*L)/D - (a*E-L/sin(th)^2))/Sigma\n", "#mu0(a,b,E,L,r,th) = -(g00*t_dot^2 + 2*g03*t_dot*phi_dot + g33*phi_dot^2) #normalization (m0=0 for a photon)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 18, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('m0','b')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "M = function('M')(r)\n", "#M=r^3/(r^3+2*b^2)\n", "Sigma = r^2+a^2*cos(th)^2\n", "Delta = r^2+a^2-2*M*r\n", "g00 = -(1-2*r*M/Sigma)\n", "g03 = -2*a*r*sin(th)^2*M/Sigma\n", "g33 = (r^2 + a^2 + 2*r*(a*sin(th))^2*M/Sigma)*sin(th)^2" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 20, "metadata": { }, "output_type": "execute_result" } ], "source": [ "diff(r^3/(r^3+2*b^2),r)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "var('e l q');" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "dg00=diff(g00,r)\n", "dg03=diff(g03,r)\n", "dg33=diff(g33,r)\n", "Mdot=diff(M,r)\n", "omega_pos=(-dg03+sqrt(dg03^2-dg00*dg33))/dg33 \n", "omega_neg=(-dg03-sqrt(dg03^2-dg00*dg33))/dg33" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 23, "metadata": { }, "output_type": "execute_result" } ], "source": [ "simpl(omega_pos.subs({b:0, th:pi/2}))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "E_pos=-(g00+g03*omega_pos)/sqrt(-(g00+2*g03*omega_pos+g33*omega_pos^2)) \n", "E_neg=-(g00+g03*omega_neg)/sqrt(-(g00+2*g03*omega_neg+g33*omega_neg^2))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "L_pos=(g03+g33*omega_pos)/sqrt(-(g00+2*g03*omega_pos+g33*omega_pos^2))\n", "L_neg=(g03+g33*omega_neg)/sqrt(-(g00+2*g03*omega_neg+g33*omega_neg^2))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 26, "metadata": { }, "output_type": "execute_result" } ], "source": [ "simpl(E_pos.subs({th:pi/2,b:0})).simplify_full()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 27, "metadata": { }, "output_type": "execute_result" } ], "source": [ "L_pos.subs({th:pi/2,b:0}).simplify_full()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 28, "metadata": { }, "output_type": "execute_result" } ], "source": [ "L_neg.subs({th:pi/2,b:0}).simplify_full()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Conditions 1 & 2" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "reset('M')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "M=m(b,r)\n", "Md = md(b ,r)\n", "Mdd = mdd(b, r)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 31, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition1 = M/r - Md\n", "Condition1" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 32, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition1.subs({b:0}) # Kerr limit" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "Condition2_pos=-(a^2*r^2*Md^2 - r^4 + 3*a^2*M^2 + 3*(a^2*r + r^3)*M - (3*a^2*r^2 + r^4 + 4*a^2*r*M)*Md - 2*((a^3 + 3*a*r^2)*M - (a^3*r + a*r^3)*Md*sqrt(-(Md - M/r))))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "Condition2_neg=-(a^2*r^2*Md^2 - r^4 + 3*a^2*M^2 + 3*(a^2*r + r^3)*M - (3*a^2*r^2 + r^4 + 4*a^2*r*M)*Md + 2*((a^3 + 3*a*r^2)*M - (a^3*r + a*r^3)*Md*sqrt(-(Md - M/r))))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 35, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition2_pos.subs({b:0}) # Kerr limit" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 36, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition2_pos.subs({a:0},{b:0}) # Schwarzschild limit" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "p1 = plot(20, -1.587,0, fill=True, fillalpha=0.3)\n", "p2 = plot(20, 1.587, 5, fill=True, fillalpha=0.3)\n", "p3 = plot(20, 1.31, 1.34, fill=True, fillcolor='black', fillalpha=1)\n", "p4 = plot(20, 0.89, 0.92, fill=True, fillcolor='black', fillalpha=1)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 76 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 75 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "data": { "image/png": "59d7106437053c07c991eb6bb82d07c5c4e53c8d" }, "execution_count": 38, "metadata": { }, "output_type": "execute_result" } ], "source": [ "p = plot((Condition1.subs({b:b0}),\n", " Condition2_pos.subs({a:a0},{b:b0}),\n", " Condition2_neg.subs({a:a0},{b:b0})), (r,-3,5), ymax=12, ymin=-1.5,\n", " legend_label=['$A(r)$','$B_+(r)$','$B_-(r)$'], color=('blue','red','green'), \n", " axes_labels=[r'$r/m$',''])\n", "graph = p+p1+p2#+p3+p4\n", "show(graph)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "graph.save('Circular_orbits_a=07_b=1.pdf')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#find_root(Condition2_pos.subs({a:a0},{b:b0}),-1,-0.3)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 41, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition2_pos.subs({a:a0},{b:b0},{r:1.587})" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Stable circular orbits in the equatorial plane (Condition1>0, Condition2>0 & Condition 3<0), ISCO" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Defining $R$" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 42, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('E L Q m0')" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "reset('M')\n", "M=m(b,r)\n", "#Md = md(b ,r)\n", "#Mdd = mdd(b, r)\n", "Sigma = r^2+a^2*cos(th)^2\n", "Delta = r^2+a^2-2*M*r\n", "g00 = -(1-2*r*M/Sigma)\n", "g03 = -2*a*r*sin(th)^2*M/Sigma\n", "g33 = (r^2 + a^2 + 2*r*(a*sin(th))^2*M/Sigma)*sin(th)^2\n", "dg00=diff(g00,r)\n", "dg03=diff(g03,r)\n", "dg33=diff(g33,r)\n", "omega_pos=(-dg03+sqrt(dg03^2-dg00*dg33))/dg33 \n", "omega_neg=(-dg03-sqrt(dg03^2-dg00*dg33))/dg33\n", "E_pos=-(g00+g03*omega_pos)/sqrt(-(g00+2*g03*omega_pos+g33*omega_pos^2)) \n", "E_neg=-(g00+g03*omega_neg)/sqrt(-(g00+2*g03*omega_neg+g33*omega_neg^2))\n", "L_pos=(g03+g33*omega_pos)/sqrt(-(g00+2*g03*omega_pos+g33*omega_pos^2))\n", "L_neg=(g03+g33*omega_neg)/sqrt(-(g00+2*g03*omega_neg+g33*omega_neg^2))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 44, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R = ((r^2+a^2)*E - a*L)^2 - Delta*((a*E-L)^2 + m0^2*r^2 + Q)\n", "R" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 45, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({b:0}).simplify_full() # Kerr limit" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 46, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({a:0},{b:0}).simplify_full() # Schwarzschild limit" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 47, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rd = remove_dirac(diff(R, r))\n", "Rd" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 48, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rd.subs({b:0}).simplify_full() # Kerr limit" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 49, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rd.subs({a:0},{b:0}).simplify_full() # Schwarzschild limit" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 50, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rdd = remove_dirac(diff(Rd, r))\n", "Rdd" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 51, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rdd.subs({b:0}).simplify_full() # Kerr limit" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 52, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rdd.subs({a:0},{b:0}).simplify_full() # Schwarzschild limit" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "Rd2=Rdd.subs({E:e},{L:l},{Q:q})\n", "Rd2_normalized=Rd2.subs({m0:1}).simplify() #normalization by m0" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 54, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rd2_normalized.subs({b:0}).simplify_full() # Kerr limit" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 55, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Rd2_normalized.subs({a:0},{b:0}).simplify_full() # Schwarzschild limit" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Conditions 1, 2 & 3" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "q1=0 #value of q=Q/m0^2 corresponding to a motion in the equatorial plane \n", "e1_pos=E_pos.subs({a:a0},{b:b0}) #value of e=E/m0 corresponding to a circular orbit\n", "e1_neg=E_neg.subs({a:a0},{b:b0})\n", "l1_pos=L_pos.subs({a:a0},{b:b0}) #value of l=L/m0 corresponding to a circular orbit\n", "l1_neg=L_neg.subs({a:a0},{b:b0})" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "Condition3_pos = Rd2_normalized.subs({e:e1_pos},{l:l1_pos},{q:q1}).simplify()\n", "Condition3_neg = Rd2_normalized.subs({e:e1_neg},{l:l1_neg},{q:q1}).simplify() " ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 58, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition3_neg.subs({a:a0},{b:b0},{th:pi/2},{r:1})" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 67 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: 'unable to convert -488.7212108566773 + 1.1209327348532101e-13*I to float; use abs() or real_part() as desired'\n" ] }, { "data": { "image/png": "7ddbfbdd85e91f60169c4561b659ee35ba679d56" }, "execution_count": 59, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot(Condition3_neg.subs({a:a0},{b:b0},{th:pi/2}),(r,0,10))\n", "#pc3.save('ISCO_a0_b0.pdf')" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 47 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 72 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "data": { "image/png": "23179e68c3408106f33b912c6070d81f442190c5" }, "execution_count": 60, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot((Condition1.subs({b:b0}), \n", " Condition2_neg.subs({a:a0},{b:b0}),\n", " Condition3_neg.subs({a:a0},{b:b0},{th:pi/2})), (r,-3,10), ymax=10, ymin=-10,\n", " legend_label=['A(r)','B(r)','C(r)'], color=('blue','red','green'), \n", " title='Counter-rotating', axes_labels=[r'$r$',''])" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 46 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 57 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 46 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 73 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: ''\n" ] }, { "data": { "image/png": "508721ba993913ad76dac432dd25f77aad19ef49" }, "execution_count": 61, "metadata": { }, "output_type": "execute_result" }, { "data": { "image/png": "154b5abb1e7810fa23fe5cda84334857d935f2e2" }, "execution_count": 61, "metadata": { }, "output_type": "execute_result" } ], "source": [ "p_pos = plot((Condition1.subs({b:b0}), \n", " Condition2_pos.subs({a:a0},{b:b0}),\n", " Condition3_pos.subs({a:a0},{b:b0},{th:pi/2})), (r,-3,10), ymax=10, ymin=-10,\n", " legend_label=['A(r)','B(r)','C(r)'], color=('blue','red','green'), \n", " title='Co-rotating',axes_labels=[r'$r$',''])\n", "p_neg = plot((Condition1.subs({b:b0}), \n", " Condition2_neg.subs({a:a0},{b:b0}),\n", " Condition3_neg.subs({a:a0},{b:b0},{th:pi/2})), (r,-3,10), ymax=10, ymin=-10,\n", " legend_label=['A(r)','B(r)','C(r)'], color=('blue','red','green'), \n", " title='Counter-rotating', axes_labels=[r'$r$',''])\n", "show(p_pos)\n", "show(p_neg)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 62, "metadata": { }, "output_type": "execute_result" } ], "source": [ "find_root(Condition2_pos.subs({a:a0},{b:b0},{th:pi/2}),1.001,2)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 157 points.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "verbose 0 (3749: plot.py, generate_plot_points) Last error message: 'unable to convert -8.32736020802459 + 2.683660004211231*I to float; use abs() or real_part() as desired'\n" ] }, { "data": { "image/png": "c25851821cb8abff2c1cbbc5a9eebeafaf6654a3" }, "execution_count": 63, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot(Condition3_pos.subs({a:a0},{b:b0},{th:pi/2}),(r,0,2))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 64, "metadata": { }, "output_type": "execute_result" } ], "source": [ "Condition3_pos.subs({a:a0},{b:b0},{th:pi/2},{r:1.04})" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Frequency of the orbits at the ISCO" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "%display latex" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 66, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('r a b M0 m')\n", "var('th', latex_name=r'\\theta')" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "%display latex\n", "var('r a b M0 m')\n", "var('th', latex_name=r'\\theta')\n", "\n", "m0=4.31*10^6*2*10^30\n", "M(b,r) = m0*r^3/(r^3 + 2*m0*b^2)\n", "#M=function('M',r)\n", "Sigma = r^2 + a^2*cos(th)^2\n", "Delta = r^2 - 2*M*r + a^2\n", "g00(a,b,r) = -(1 - 2*r*M/Sigma)\n", "g03(a,b,r) = -2*a*r*sin(th)^2*M/Sigma\n", "g33(a,b,r) = (r^2 + a^2 + 2*r*(a*sin(th))^2*M/Sigma)*sin(th)^2" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "dg00=diff(g00,r)\n", "dg03=diff(g03,r)\n", "dg33=diff(g33,r)\n", "omega_pos=(-dg03+sqrt(dg03^2-dg00*dg33))/dg33 \n", "omega_neg=(-dg03-sqrt(dg03^2-dg00*dg33))/dg33" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "a1=m0*0.9\n", "b1=m0*1\n", "r1_pos=m0*1.59\n", "r1_neg=m0*8.43" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 70, "metadata": { }, "output_type": "execute_result" } ], "source": [ "om_pos=omega_pos.subs({a:a1},{b:b1},{r:r1_pos},{th:pi/2})\n", "(3*10^8)^3/(6.67*10^(-11))*om_pos" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 71, "metadata": { }, "output_type": "execute_result" } ], "source": [ "om_neg=omega_neg.subs({a:a1},{b:b1},{r:r1_neg},{th:pi/2})\n", "(3*10^8)^3/(6.67*10^(-11))*om_neg" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# General case: only $R(r,E,L,Q) \\geq 0$ allowed" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "reset('m0')" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 73, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('m0')" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 74, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({b:0},{m0:1}).simplify_full() # Kerr limit" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 75, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({a:0},{b:0},{m0:0}).simplify_full() # Schwarzschild limit" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "630ead0275296434a1a2f7b8df3f48541993a1bd" }, "execution_count": 76, "metadata": { }, "output_type": "execute_result" } ], "source": [ "a2 = 0.9\n", "b2 = 1\n", "e2 = 1\n", "l2 = 2\n", "q2 = -1\n", "plot0=plot(R.subs({m0:0},{a:a2},{b:b2},{E:e2},{L:l2},{Q:q2}), (r,-2,2), axes_labels = [r'$r/m$', r'$R(r,E_1,L_1,Q_1)$'])\n", "show(plot0)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 77, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({m0:0},{a:a2},{b:b2},{E:e2},{L:l2},{Q:q2})" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#find_root(R_null(a2,b2,e2,l2,q2,r),-2,2)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 79, "metadata": { }, "output_type": "execute_result" } ], "source": [ "R.subs({m0:0},{a:a2},{b:b2},{E:e2},{L:l2},{Q:q2},{r:1})" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "003292f45f0e362068aa437788f6ee062c4c6aac" }, "execution_count": 80, "metadata": { }, "output_type": "execute_result" } ], "source": [ "#p1 = plot(11, -0.665666,0.713731,ymax=8, fill=True, fillalpha=0.3)\n", "p2 = plot(25, -0.054222, 2, ymax=22, ymin=-10, fill=True, fillalpha=0.3)\n", "p3 = plot(11,-2, -1.446841, fill=True, fillalpha=0.3)\n", "p4 = plot(25, 1.425, 1.44, fill=True, fillcolor='black', fillalpha=1)\n", "p5 = plot(25, 0.545, 0.56, fill=True, fillcolor='black', fillalpha=1)\n", "plot2=plot0+p2+p4+p5\n", "show(plot2)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "#plot2.save('R_photons_dark_zone_b=0.pdf')" ] } ], "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.15" } }, "nbformat": 4, "nbformat_minor": 0 }