\(a:\) | |

\(p:\) | |

\(e:\) | |

\(\theta_\text{inc}:\) | deg |

\(\mathcal{E}:\) | |

\(\mathcal{L}:\) | |

\(\mathcal{Q}:\) | |

\(\Omega_r:\) | |

\(\Omega_\theta:\) | |

\(\Omega_\varphi:\) | |

\(\Gamma:\) |

## Brief Explanation

Any timelike geodesic about a Kerr black hole has associated with it three constants of motion: energy \(\mathcal{E}\), angular momentum \(\mathcal{L}\) and the Carter constant \(\mathcal{Q}\). In addition, generic bound orbits have three frequencies associated with the orbital motion. With respect to Boyer-Lindquist coordinate time these are the rate of azimuthal angle accumulation \(\Omega_\varphi\), radial libration \(\Omega_r\) and polar libration \(\Omega_\theta\). These frequencies can also be defined with respect to Mino time. The Mino time frequencies, \(\Upsilon_\alpha\), can be calculated via \(\Upsilon_\alpha = \Gamma \Omega_\alpha \). The above interactive Javascript code computes these constants and frequencies given the orbital parameters.

## Method, Code and Limitations

The equations to compute the constants of motion come from W. Schmidt’s Celestial mechanics in Kerr spacetime.

A method to compute the orbital frequencies can also be found in that work but that method requires numerically integrating various equations. Instead I use equations in terms of elliptic integrals from Fujita and Hikida’s Analytical solutions of bound timelike geodesic orbits in Kerr spacetime.

To compute elliptic integrals in Javascript I use Leo Stein‘s library which can be found on GitHub.

Limitations: Not all parameters will lead to bound stable orbits. The code will not warn you of this, in part because calculating when a set of parameters leads to a stable orbit is not straight forward for generic orbits. Instead you will get NaN’s (Not a Number). Also the code gives an error for the Schwarzschild \(a=0\) case. It’s on my todo list to fix that (note you can put in very small values of \(a\)).

## Extra

I also wrote, and am making freely available, code to compute the orbital constants and frequencies in:

- Mathematica
- Python
- Python (arbitrary precision using mpmath)

I also have C and C++ (arbitrary precision using Arb) implementations but they need a little tidying up before public release.

## Future work

Plot the associated orbits in an interactive manner similar to Leo’s nice visualization of photon orbits. These orbits have a very rich structure, e.g.,

This orbit has parameters \((a,p,e,\theta_\text{min}) = (0.998,3,0.7,\pi/4) \). The apparent complexity of the orbit can be made simpler by moving to a co-rotating coordinate system. This resulting orbit is quite pretty:

I already have Mathematica code to make the calculation (that code produced the above two images). The Mathematica code could easily be converted to Python but Javascript would be more difficult due to a lack of good numerical libraries.