| | import numpy as np |
| | import pandas as pd |
| | import json |
| | import os |
| |
|
| | |
| | c = 299792458 |
| | E_mc2 = c**2 |
| | TSR = E_mc2 / (1.38e-23) |
| | alpha = 1.0 |
| | Q = 2 ** (1 / 12) |
| | dark_energy_density = 5.96e-27 |
| | dark_matter_density = 2.25e-27 |
| | collision_distance = 1e-10 |
| | Hubble_constant = 70.0 |
| | Hubble_constant_SI = ( |
| | Hubble_constant * 1000 / 3.086e22 |
| | ) |
| |
|
| | |
| | temperature_initial = 1.42e32 |
| | particle_density_initial = 5.16e96 |
| | particle_speed_initial = c |
| |
|
| | |
| | t_planck = 5.39e-44 |
| | t_simulation = t_planck * 1e5 |
| |
|
| | |
| | quark_masses = { |
| | "up": 2.3e-3, |
| | "down": 4.8e-3, |
| | "charm": 1.28, |
| | "strange": 0.095, |
| | "top": 173.0, |
| | "bottom": 4.18, |
| | "electron": 5.11e-4, |
| | "muon": 1.05e-1, |
| | "tau": 1.78, |
| | "photon": 0, |
| | } |
| |
|
| | |
| | GeV_to_J = 1.60217662e-10 |
| |
|
| | |
| | num_steps = int(t_simulation / t_planck) |
| |
|
| | |
| | tunneling_probabilities = np.arange(0.1, 1.1, 0.1) |
| |
|
| | |
| | data_dir = "big_bang_simulation_data" |
| | os.makedirs(data_dir, exist_ok=True) |
| |
|
| | |
| | def relativistic_energy(particle_speed, particle_mass): |
| | if particle_speed >= c: |
| | return np.inf |
| | return particle_mass * c**2 / np.sqrt(max(1e-10, 1 - (particle_speed / c) ** 2)) |
| |
|
| |
|
| | def relativistic_momentum(particle_speed, particle_mass): |
| | if particle_speed >= c: |
| | return np.inf |
| | return ( |
| | particle_mass |
| | * particle_speed |
| | / np.sqrt(max(1e-10, 1 - (particle_speed / c) ** 2)) |
| | ) |
| |
|
| |
|
| | def update_speed(current_speed, current_temperature, particle_mass): |
| | rel_momentum = relativistic_momentum(current_speed, particle_mass) |
| | return c * np.sqrt( |
| | max(1e-10, 1 - (rel_momentum / (rel_momentum + dark_energy_density)) ** 2) |
| | ) |
| |
|
| |
|
| | |
| | for tunneling_probability in tunneling_probabilities: |
| | print(f"Simulating for tunneling probability: {tunneling_probability}") |
| |
|
| | |
| | particle_speeds = np.zeros((len(quark_masses), num_steps)) |
| | particle_temperatures = np.zeros( |
| | (len(quark_masses), num_steps) |
| | ) |
| | particle_masses_evolution = np.zeros( |
| | (len(quark_masses), num_steps) |
| | ) |
| | tunneling_steps = np.zeros( |
| | (len(quark_masses), num_steps), dtype=bool |
| | ) |
| |
|
| | |
| | particle_masses = np.array([mass * GeV_to_J for mass in quark_masses.values()]) |
| |
|
| | for j, (quark, mass) in enumerate(quark_masses.items()): |
| | particle_masses_evolution[j, 0] = particle_masses[j] |
| |
|
| | for i in range(1, num_steps): |
| | particle_speeds[j, i] = update_speed( |
| | particle_speeds[j, i - 1], |
| | particle_temperatures[j, i - 1], |
| | particle_masses[j], |
| | ) |
| |
|
| | value = ( |
| | 1 |
| | - (particle_speeds[j, i] / (TSR * temperature_initial)) |
| | + dark_matter_density |
| | ) |
| |
|
| | if np.random.rand() < tunneling_probability: |
| | particle_speeds[j, i] = particle_speeds[j, 0] |
| | tunneling_steps[j, i] = True |
| |
|
| | if value < 0: |
| | value = 0 |
| |
|
| | particle_temperatures[j, i] = ( |
| | alpha * particle_speeds[j, i] ** 2 |
| | ) |
| |
|
| | |
| | speed_squared_diff = ( |
| | particle_speeds[j, i] ** 2 - particle_speeds[j, i - 1] ** 2 |
| | ) |
| |
|
| | |
| | if speed_squared_diff == 0: |
| | particle_masses_evolution[j, i] = particle_masses_evolution[j, i - 1] |
| | else: |
| | |
| | energy_diff = relativistic_energy( |
| | particle_speeds[j, i], particle_masses[j] |
| | ) - relativistic_energy(particle_speeds[j, i - 1], particle_masses[j]) |
| |
|
| | |
| | if abs(energy_diff) < 1e-15: |
| | particle_masses_evolution[j, i] = particle_masses_evolution[ |
| | j, i - 1 |
| | ] |
| | else: |
| | |
| | new_mass = ( |
| | particle_masses_evolution[j, i - 1] + energy_diff / c**2 |
| | ) |
| | if np.isfinite(new_mass): |
| | particle_masses_evolution[j, i] = new_mass |
| | else: |
| | particle_masses_evolution[j, i] = particle_masses_evolution[ |
| | j, i - 1 |
| | ] |
| |
|
| | |
| | particle_speeds[j, i] *= 1 - Hubble_constant_SI * t_planck |
| |
|
| | |
| | particle_temperatures[j, i] *= 1 - Hubble_constant_SI * t_planck |
| |
|
| | |
| | print( |
| | f"Calculated masses at the end of the simulation (Tunneling Probability: {tunneling_probability}):" |
| | ) |
| | for j, quark in enumerate(quark_masses.keys()): |
| | print( |
| | f"{quark}: {particle_masses_evolution[j, -1] / GeV_to_J:.4e} GeV" |
| | ) |
| |
|
| | |
| | data_filename = os.path.join( |
| | data_dir, f"big_bang_simulation_data_{tunneling_probability:.1f}.json" |
| | ) |
| | data = { |
| | "tunneling_probability": tunneling_probability, |
| | "particle_masses_evolution": particle_masses_evolution.tolist(), |
| | } |
| | with open(data_filename, "w") as f: |
| | json.dump(data, f) |
| |
|