General Relativity

Einstein's Masterpiece: Gravity is the curvature of spacetime. Mass-energy tells spacetime how to curve, and spacetime tells mass-energy how to move.

Chapter 20: Reissner-Nordström Solution

The Reissner-Nordström solution describes a charged, non-rotating black hole. While astrophysical black holes are expected to be nearly neutral, this solution provides important theoretical insights into black hole structure.

The Metric

\( ds^2 = -\left(1 - \frac{r_s}{r} + \frac{r_Q^2}{r^2}\right)c^2dt^2 + \frac{dr^2}{1 - \frac{r_s}{r} + \frac{r_Q^2}{r^2}} + r^2 d\Omega^2 \)

where rQ² = Q²G/(4πε₀c⁴)

Horizons

\( r_\pm = M \pm \sqrt{M^2 - Q^2} \) (in geometric units)

Outer (event) horizon r+ and inner (Cauchy) horizon r-

Three Cases

<

Two horizons exist. Structure similar to Kerr with outer and inner horizons.

Q² = M²

Extremal case: r+ = r- = M. Single degenerate horizon.

>

No horizon! Naked singularity. Forbidden by cosmic censorship.

Python: RN Effective Potential

#!/usr/bin/env python3
"""
reissner_nordstrom.py - Reissner-Nordström black hole analysis
Run: python3 reissner_nordstrom.py
"""
import numpy as np
import matplotlib.pyplot as plt

M = 1.0

def f_RN(r, Q):
    """Metric function for Reissner-Nordström"""
    return 1 - 2*M/r + Q**2/r**2

def horizons(Q):
    """Calculate horizon radii"""
    discriminant = M**2 - Q**2
    if discriminant < 0:
        return None, None
    r_plus = M + np.sqrt(discriminant)
    r_minus = M - np.sqrt(discriminant)
    return r_plus, r_minus

def effective_potential(r, L, Q):
    """Effective potential for massive particle"""
    f = f_RN(r, Q)
    return f * (1 + L**2/r**2) / 2

# Plot metric function for different charges
fig, axes = plt.subplots(1, 2, figsize=(14, 6))

ax1 = axes[0]
r_vals = np.linspace(0.5, 5, 500)
Q_values = [0, 0.5, 0.9, 1.0, 1.1]

for Q in Q_values:
    f = [f_RN(r, Q) for r in r_vals]
    label = f'Q = {Q}M'
    if Q > 1: label += ' (naked)'
    ax1.plot(r_vals, f, label=label)

ax1.axhline(y=0, color='gray', linestyle='--', alpha=0.5)
ax1.set_xlabel('r/M')
ax1.set_ylabel('f(r) = 1 - 2M/r + Q²/r²')
ax1.set_title('Metric Function f(r)')
ax1.legend()
ax1.grid(True, alpha=0.3)
ax1.set_ylim(-1, 1.5)

# Effective potential
ax2 = axes[1]
L = 4.0 * M
r_vals = np.linspace(1.5, 15, 500)

for Q in [0, 0.5, 0.9]:
    V = [effective_potential(r, L, Q) for r in r_vals]
    ax2.plot(r_vals, V, label=f'Q = {Q}M')

ax2.set_xlabel('r/M')
ax2.set_ylabel('V_eff')
ax2.set_title(f'Effective Potential (L = {L/M}M)')
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('rn_analysis.png', dpi=150)
plt.show()

print("Reissner-Nordström Horizons:")
for Q in [0, 0.5, 0.9, 1.0]:
    r_p, r_m = horizons(Q)
    if r_p:
        print(f"  Q = {Q}M: r+ = {r_p:.3f}M, r- = {r_m:.3f}M")
    else:
        print(f"  Q = {Q}M: Extremal/naked singularity")

print("\nPlot saved as 'rn_analysis.png'")