Skip to content

anindex/penrose_process

Repository files navigation

Penrose Energy Extraction via Rocket Propulsion

arXiv License: MIT

Numerical study of energy extraction from rotating (Kerr) black holes via the Penrose process using rocket propulsion. This repository accompanies the paper "On the rarity of rocket-driven Penrose extraction in Kerr spacetime".

Results

Through 252,000 trajectory simulations (112,000 main experimental phases + 140,000 spin-threshold characterization), we establish:

Finding Value
Broad-scan success rate ($a/M = 0.95$) ~1%
Sweet-spot success rate ($a/M \geq 0.95$) 11--14%
Peak success rate ($v_e = 0.98c$, $\delta m = 0.4$) ~88.5%
Critical spin threshold $0.88 < a_{\rm crit}/M \lesssim 0.89$
Single-impulse efficiency $\eta_{\rm cum} \approx 19%$
Continuous thrust efficiency 2--4%

Sweet spot parameters: specific energy $E_0 \approx 1.2$, specific angular momentum $L_z \approx 3.0$, $v_e \gtrsim 0.91c$


Visualizations

Single Impulse Thrust

A single impulsive burn at periapsis achieves maximum efficiency (~19%) by concentrating all thrust at the point of minimum exhaust energy.

Single Impulse Penrose Extraction

Continuous Thrust

Sustained thrust throughout the ergosphere passage demonstrates path-averaging effects that reduce efficiency to 2--4%.

Continuous Penrose Extraction


Physics Overview

The Penrose Process

Within the ergosphere of a Kerr black hole, the stationary Killing vector becomes spacelike, permitting negative-energy states. A spacecraft can exploit this by ejecting exhaust with negative Killing energy $E_{\rm ex} < 0$, gaining energy at the expense of the black hole's rotation.

Propulsion Model

We work in the test-particle limit ($m_0 \ll M$), so backreaction and self-force are negligible. The code implements exact 4-momentum conservation:

$$p'_\mu = p_\mu - \delta\mu , u_{{\rm ex},\mu}$$

where the exhaust 4-velocity is $u_{\rm ex}^\mu = \gamma_e(u^\mu - v_e s^\mu)$ for exhaust speed $v_e$ and spatial direction $s^\mu$ orthogonal to the rocket's 4-velocity.

Penrose signature: Energy extraction occurs when exhaust Killing energy $E_{\rm ex} = -\gamma_e(u_t - v_e s_t) < 0$.


Repository Structure

penrose_process/
|-- kerr_utils.py                  # Kerr metric, geodesic equations, impulse mechanics
|-- single_thrust_case.py          # Single impulsive burn at periapsis
|-- continuous_thrust_case.py      # Sustained ergosphere thrust (RK4 integrator)
|-- pyproject.toml                 # Package configuration
|-- experiments/
|   |-- trajectory_classifier.py   # Orbit classification (flyby, plunge, bound)
|   |-- parameter_sweep.py         # Grid-based parameter exploration
|   |-- comprehensive_sweep.py     # Full statistical sweeps
|   |-- thrust_comparison.py       # Strategy comparison (geodesic/impulse/continuous)
|   |-- ensemble.py                # Monte Carlo analysis with BCa bootstrap CIs
|   |-- run_trajectory_study.py    # CLI orchestrator
|   |-- generate_prd_figures.py    # Paper figure generation (6 figures)
|   |-- regenerate_sweep_data.py   # Sweep data regeneration
|   |-- trajectory_visualization.py # Animated GIF generation
|   |-- phase_space.py             # Phase-space (E, Lz) diagrams
|   `-- benchmark.py               # Performance and reproducibility tracking
|-- tests/
|   |-- test_conservation_laws.py  # Conservation laws and analytical solutions
|   |-- test_derivatives.py        # Kerr metric derivative validation
|   |-- test_null_cases.py         # Schwarzschild and outside-ergosphere null tests
|   |-- test_geodesic.py           # Pure geodesic flyby validation
|   |-- test_optimal_thrust.py     # Optimal thrust direction test
|   |-- test_retrograde_thrust.py  # Retrograde exhaust Penrose condition test
|   |-- test_E_ex_directions.py    # Exhaust energy directional dependence
|   `-- test_integrator_convergence.py # ODE solver accuracy analysis
|-- results/                       # Pre-computed sweep data (JSON)
|-- figures/                       # Generated paper figures (PDF/PNG)
`-- visualizations/                # Animated GIFs

Installation

pip install -e .

This installs the package in editable mode, making all modules importable without path hacks.

Requirements: Python >= 3.8, numpy, scipy, matplotlib, pandas


Usage

Run simulations

# Single impulse case
python single_thrust_case.py

# Continuous thrust case
python continuous_thrust_case.py

Parameter studies

# Quick validation (~2 min)
python experiments/run_trajectory_study.py --mode quick

# Standard study (~10 min)
python experiments/run_trajectory_study.py --mode standard

# Full analysis (~30 min)
python experiments/run_trajectory_study.py --mode full

Generate animations

python experiments/trajectory_visualization.py --spin 0.95

Run tests

# Run all tests (requires pip install pytest)
pytest tests/

# Or run individual test files directly
python tests/test_conservation_laws.py
python tests/test_null_cases.py

Reproducing Paper Figures

All six figures from the paper can be reproduced using the provided scripts.

Quick reproduction (uses existing/fallback data)

# Generate all 6 figures (PDF + PNG)
python experiments/generate_prd_figures.py

This creates figures/fig1_orbit_classification.pdf through figures/fig6_ultrarel_saturation.pdf.

Full regeneration from simulations

To regenerate the underlying sweep data from scratch (~120,000 trajectories, 4-8 hours):

# Regenerate JSON data for Figures 5 and 6
python experiments/regenerate_sweep_data.py

# Then generate figures from new data
python experiments/generate_prd_figures.py

Options for regenerate_sweep_data.py:

  • --fig5: Only regenerate Figure 5 data (velocity phase transition)
  • --fig6: Only regenerate Figure 6 data (ultra-relativistic saturation)
  • --quick: Quick test mode (50 samples/point instead of 500)
  • --workers N: Number of parallel workers

Figure descriptions

Figure File Description
1 fig1_orbit_classification.pdf Orbit classification in $(E_0, L_z)$ space
2 fig2_ensemble_statistics.pdf Penrose success rate vs spin
3 fig3_thrust_comparison.pdf Single-impulse vs continuous thrust
4 fig4_spin_dependence.pdf Spin dependence of extraction window
5 fig5_thrust_sensitivity.pdf Velocity phase transition at $v_e \approx 0.91c$
6 fig6_ultrarel_saturation.pdf Efficiency saturation as $v_e \to c$

Numerical Configuration

The continuous thrust integrator uses classical RK4 with mass-shell projection. For geodesic phases, the recommended solver settings are:

from scipy.integrate import solve_ivp

solution = solve_ivp(
    geodesic_rhs,
    t_span=(0, tau_max),
    y0=initial_state,
    method='DOP853',      # 8th-order Dormand-Prince
    rtol=1e-10,
    atol=1e-12,
)

Initial conditions: $r_0 = 15M$, escape radius: $50M$


References

  1. R. Penrose and R. M. Floyd, Nature Phys. Sci. 229, 177 (1971). doi:10.1038/physci229177a0

  2. R. M. Wald, Astrophys. J. 191, 231 (1974). doi:10.1086/152959

  3. S. Chandrasekhar, The Mathematical Theory of Black Holes (Oxford University Press, 1983).

About

Penrose Energy Extraction Simulation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published