Source code for bhpwave.trajectory.geodesic

import numpy as np

######################################
# Define Useful Trajectory Functions #
######################################

OMEGA_MIN = 2.e-3
A_MAX = 0.9999

[docs]def kerr_circ_geo_radius(a, omega): """Calculates the Boyer-Lindquist radius of a circular geodesic with orbital frequency :code:`omega` in a Kerr spacetime paramtrized by the Kerr spin :code:`a` Parameters ---------- a : double or array Kerr spin parameter omega : double or array orbital frequency Returns ------- double or array """ return (abs(omega)*(1. - a*omega)/(omega**2))**(2./3.)
[docs]def kerr_circ_geo_orbital_frequency(a, r): """Calculates the orbital frequency of a circular geodesic with Boyer-Lindquist radius :code:`r` in a Kerr spacetime paramtrized by the Kerr spin :code:`a` Parameters ---------- a : double or array Kerr spin parameter r : double or array orbital radius Returns ------- double or array """ v = 1./np.sqrt(r) return pow(v, 3)/(1 + a*pow(v, 3))
[docs]def kerr_isco_radius(a): """Calculates the Boyer-Lindquist radius of the innermost stable circular orbit (ISCO) in a Kerr spacetime paramtrized by the Kerr spin :code:`a` Parameters ---------- a : double or array Kerr spin parameter Returns ------- double or array """ sgnX = np.sign(a) z1 = 1 + pow(1 - a*a, 1./3.)*(pow(1 - a, 1./3.) + pow(1 + a, 1./3.)) z2 = np.sqrt(3*a*a + z1*z1) return 3 + z2 - sgnX*np.sqrt((3. - z1)*(3. + z1 + 2.*z2))
[docs]def kerr_isco_frequency(a): """Calculates the orbital frequency of the innermost stable circular orbit (ISCO) in a Kerr spacetime paramtrized by the Kerr spin :code:`a` Parameters ---------- a : double or array Kerr spin parameter Returns ------- double or array """ rISCO = kerr_isco_radius(a) return kerr_circ_geo_orbital_frequency(a, rISCO)
[docs]def alpha_of_a_omega(a, omega): oISCO = kerr_isco_frequency(a) return alpha_of_omega_ISCO(omega, oISCO)
[docs]def alpha_of_omega_ISCO(omega, oISCO): return (abs(oISCO**(1./3.) - omega**(1./3.))/(oISCO**(1./3.) - OMEGA_MIN**(1./3.)))**(0.5)
[docs]def omega_of_a_alpha(a, alpha): oISCO = kerr_isco_frequency(a) return omega_of_alpha_ISCO(alpha, oISCO)
[docs]def omega_of_alpha_ISCO(alpha, oISCO): return pow(pow(oISCO, 1./3.) - pow(alpha, 2.)*(pow(oISCO, 1./3.) - pow(OMEGA_MIN, 1./3.)), 3.)
[docs]def chi_of_spin_subfunc(a): return pow(1. - a, 1./3.)
[docs]def chi_of_spin(a): return pow((chi_of_spin_subfunc(a) - chi_of_spin_subfunc(A_MAX))/(chi_of_spin_subfunc(-A_MAX) - chi_of_spin_subfunc(A_MAX)), 0.5)
[docs]def a_omega_to_chi_alpha(a, omega): chi = chi_of_spin(a) alpha = alpha_of_a_omega(a, omega) return (chi, alpha)