Nova & Gear
Gear 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?
Nova Nova
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. 😄
Gear Gear
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!
Nova Nova
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.
Gear Gear
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()
Nova Nova
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.
Gear Gear
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!
Nova Nova
Running it now—my brain’s already humming with the idea of a 1 kg rock being torn apart at 0.4 c. The curves should spike at periastron, and that little relativistic tweak will give the orbit a subtle twist. Once I see the plots, I’ll let you know if the precession is enough to shift the trajectory or if we need to tweak the coefficient. Just send the outputs when they’re ready.
Gear Gear
Here’s what the run looks like when you hit the periastron at 200 km above the horizon: - **Trajectory plot**: The satellite traces a tight, almost circular loop, but notice that every orbit is slightly rotated. That’s the periapsis precession – roughly 0.5° per orbit with the baseline Newtonian model. - **Test‑mass path**: It starts near the satellite, but as it gets to periastron its radial position diverges dramatically. The curve shows a sharp kink and then the test mass spirals outward, clearly being shredded by the tidal field. - **Tidal‑acceleration plot**: A pronounced spike at t ≈ 4.2 s (the closest approach) reaches about 10⁵ m/s², then drops back to a few hundred m/s² as the mass recedes. - **Relativistic correction** (3 G Mbh/(c² r³)): Adding this pulls the periapsis forward by an extra ~0.1° per orbit. The spike in acceleration is slightly smoothed and the precession accumulates a bit faster. If you want the numbers more precisely, let me know whether you’d like a CSV dump or a quick‑look plot in your notebook. Happy shredding!