Nova & Gear
Hey Nova, I’ve been building a little prototype that can simulate the extreme tidal forces you’d find near a black hole—thought you’d like to test it out?
That sounds incredible—tuning in to the universe’s edge always gets my brain buzzing. Just send me the specs, and I’ll stare at the data until the stars start aligning. But be ready for a deep dive into the math; I’ll probably keep calculating orbital periods for a few hours. 😄
Sure thing! Here’s the low‑down on the tidal‑force simulator:
- **Model**: 3‑body system (black hole, satellite, test mass)
- **Black hole mass**: 10 solar masses (≈1.99×10³⁰ kg)
- **Event horizon radius**: 29 km
- **Satellite orbit**: 200 km above the horizon, circular, speed 0.4 c
- **Test mass**: 1 kg particle at the satellite’s perigee, starting 10 m behind
- **Gravitational constant**: 6.674×10⁻¹¹ N·m²/kg²
- **Time step**: 1 ms for numerical integration
- **Output**: Position, velocity, tidal acceleration vs. time; plots for periastron precession and stretch factor
- **Software**: Custom Python script with SciPy integrator (RK45)
- **Run time**: ~10 s simulation, ~2 s compute on a mid‑range CPU
Just plug the numbers into the script and you’ll see the test mass tear apart at periapsis. Let me know if you want the code or need tweaks!
Wow, that’s right up my alley! The numbers look solid—just give me the script and I’ll run it, watching the 1 kg rock get shredded in that 0.4 c dance. If it blows up any more than expected, I’ll tweak the step size or maybe add a relativistic correction. Let’s see the plots—curious to see that periastron precession you mentioned. Send the code over, and I’ll get to work.
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# Constants
G = 6.674e-11 # m^3 kg^-1 s^-2
Mbh = 10 * 1.988e30 # 10 solar masses in kg
Rh = 2 * G * Mbh / (3e8**2) # Schwarzschild radius (~29 km)
r_orbit = Rh + 200e3 # 200 km above horizon
v_orbit = 0.4 * 3e8 # 0.4c
m_test = 1.0 # kg
# Initial conditions: satellite position and velocity
sat_pos = np.array([r_orbit, 0.0, 0.0])
sat_vel = np.array([0.0, v_orbit, 0.0])
# Test mass 10 m behind satellite
test_pos = sat_pos + np.array([-10.0, 0.0, 0.0])
test_vel = sat_vel
# State vector: [sat_x, sat_y, sat_z, sat_vx, sat_vy, sat_vz,
# test_x, test_y, test_z, test_vx, test_vy, test_vz]
y0 = np.hstack((sat_pos, sat_vel, test_pos, test_vel))
def accel(pos):
r = np.linalg.norm(pos)
return -G * Mbh * pos / r**3
def derivatives(t, y):
# Satellite
sat_p = y[0:3]
sat_v = y[3:6]
sat_a = accel(sat_p)
# Test mass
test_p = y[6:9]
test_v = y[9:12]
test_a = accel(test_p)
# Tidal acceleration (difference)
tidal = test_a - sat_a
return np.hstack((sat_v, sat_a, test_v, tidal))
t_span = (0, 10) # seconds
t_eval = np.arange(0, 10, 0.001)
sol = solve_ivp(derivatives, t_span, y0, t_eval=t_eval, rtol=1e-8, atol=1e-10)
# Extract positions
sat_positions = sol.y[0:3, :]
test_positions = sol.y[6:9, :]
# Plot trajectories
plt.figure(figsize=(8,6))
plt.plot(sat_positions[0], sat_positions[1], 'b', label='Satellite')
plt.plot(test_positions[0], test_positions[1], 'r', label='Test mass')
plt.scatter([sat_positions[0,0]], [sat_positions[1,0]], c='b', s=50)
plt.scatter([test_positions[0,0]], [test_positions[1,0]], c='r', s=50)
plt.xlabel('x (m)')
plt.ylabel('y (m)')
plt.title('Orbital trajectories')
plt.legend()
plt.axis('equal')
plt.grid(True)
plt.show()
# Plot tidal acceleration magnitude vs time
tidal_mag = np.linalg.norm(sol.y[9:12, :] - sol.y[3:6, :], axis=0)
plt.figure()
plt.plot(sol.t, tidal_mag)
plt.xlabel('Time (s)')
plt.ylabel('Tidal acceleration magnitude (m/s²)')
plt.title('Tidal forces over time')
plt.grid(True)
plt.show()
That looks solid—thanks for the code! I’ll run it right now and watch how the test mass stretches out at periastron. If the tidal spikes look a bit too sharp, maybe we could add a tiny relativistic correction to the acceleration. Let me know what the plots show; I’m curious to see the periastron precession you mentioned.
Hey Nova, the plots will show the satellite looping in that 200‑km orbit and the test mass drifting away right as it hits the periastron. The tidal acceleration spikes right at that closest approach, stretching the rock. If you add a tiny relativistic term—something like 3 G Mbh/(c² r³)—you’ll see the periapsis precess a few degrees over each orbit. The precession will be subtle, but you’ll spot a shift in the trajectory if you overlay consecutive loops. Let me know how the curves look once you run it, and we can fine‑tune the correction!