Az alábbi Python program a nukleáris fegyverek hatásait (hőhatás, lökéshullám, kezdeti sugárzás) modellezi a cube-root scalingot alkalmazva. A program kiszámítja az egyes pusztítási zónák sugarait egy megadott robbanási energia alapján:
---------
import math
class NuclearExplosionModel:
def __init__(self, yield_ktons):
"""
:param yield_ktons: A robbanás ereje kilotonnában (pl. 15 = Hiroshima)
"""
self.yield_ktons = yield_ktons
# Skálázási tényező (cube-root scaling)
self.scale_factor = math.pow(self.yield_ktons, 1/3)
def calculate_fireball_radius(self):
"""Tűzgömb sugara (hőhatás kezdete) méterben."""
return 670 * self.scale_factor
def calculate_blast_overpressure_radius(self, psi=5):
"""
Lökéshullám hatótávolsága méterben.
Alapértelmezetten az 5 PSI (súlyos épületkárok és emberi sérülések) zónát számolja.
"""
if psi == 20: # 20 PSI: Vasbeton épületek megsemmisülése
return 370 * self.scale_factor
elif psi == 5: # 5 PSI: Átlagos épületek összeomlása
return 740 * self.scale_factor
elif psi == 1: # 1 PSI: Ablaküvegek betörése
return 2130 * self.scale_factor
return 0
def calculate_radiation_radius(self, dose_Sv=5):
"""
Kezdeti ionizáló sugárzás hatótávolsága méterben (5 Sv halálos dózis).
"""
if dose_Sv == 5:
return 1100 * self.scale_factor
return 0
def print_report(self):
print(f"--- Atomcsapás Modell: {self.yield_ktons} kt TNT ---")
print(f"1. Tűzgömb sugara: ~{self.calculate_fireball_radius():.2f} m")
print(f"2. Lökéshullám (20 PSI - Teljes pusztulás): ~{self.calculate_blast_overpressure_radius(20):.2f} m")
print(f"3. Lökéshullám (5 PSI - Épületek dőlnek): ~{self.calculate_blast_overpressure_radius(5):.2f} m")
print(f"4. Lökéshullám (1 PSI - Ablakok törnek): ~{self.calculate_blast_overpressure_radius(1):.2f} m")
print(f"5. Ionizáló sugárzás (5 Sv - Halálos): ~{self.calculate_radiation_radius(5):.2f} m")
# Modell futtatása példa adattal (pl. 50 kilotonnás robbanás)
if __name__ == "__main__":
nuke = NuclearExplosionModel(yield_ktons=50)
nuke.print_report()
------------
--- Atomcsapás Modell: 50 kt TNT ---
1. Tűzgömb sugara: ~2468.30 m
2. Lökéshullám (20 PSI - Teljes pusztulás): ~1363.09 m
3. Lökéshullám (5 PSI - Épületek dőlnek): ~2726.18 m
4. Lökéshullám (1 PSI - Ablakok törnek): ~7846.99 m
5. Ionizáló sugárzás (5 Sv - Halálos): ~4052.43 m
----------
import numpy as np
import matplotlib.pyplot as plt
def nuklearis_modell(hatohato_kt, robbanasi_magassag_m=0):
"""
Atomeffektusok számítása (egyszerűsített skálázási törvények alapján).
hatohato_kt: Robbanóerő kilotonnában
robbanasi_magassag_m: Felszíni robbanás esetén 0
"""
# Hatósugarak számítása (közelítő empirikus képletek)
# Tűzgolyó sugara (km)
tuzgolyo = 0.16 * (hatohato_kt ** 0.38)
# 20 psi (súlyos épületkárok, zóna közepe)
psi_20 = 0.45 * (hatohato_kt ** 0.33)
# 5 psi (közepes épületkárok, légnyomás)
psi_5 = 0.98 * (hatohato_kt ** 0.33)
# 1 psi (ablaküveg törések, könnyű sérülések)
psi_1 = 2.45 * (hatohato_kt ** 0.33)
# Hősugárzás (3. fokozatú égési sérülések)
ho_sugar = 1.0 * (hatohato_kt ** 0.41)
return {
'tuzgolyo': tuzgolyo,
'psi_20': psi_20,
'psi_5': psi_5,
'psi_1': psi_1,
'ho_sugar': ho_sugar
}
def szimulacio_megjelenites(hatohato_kt):
adatok = nuklearis_modell(hatohato_kt)
# Vizuális körök beállítása
sugarak = [
('Tűzgolyó (minden elpárolog)', adatok['tuzgolyo'], 'darkred'),
('20 psi Túlnyomás (pusztító)', adatok['psi_20'], 'red'),
('5 psi Túlnyomás (súlyos kár)', adatok['psi_5'], 'orange'),
('Hősugárzás (3. fokú égés)', adatok['ho_sugar'], 'gold'),
('1 psi Túlnyomás (ablakok törnek)', adatok['psi_1'], 'yellow')
]
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_facecolor('lightgray')
# Körök rajzolása
for nev, sugar, szin in reversed(sugarak):
circle = plt.Circle((0, 0), sugar, color=szin, alpha=0.5, label=f"{nev} ({sugar:.2f} km)")
ax.add_patch(circle)
# Célpont (epicentrum)
ax.plot(0, 0, 'kX', markersize=10, label="Epicentrum (becsapódási pont)")
# Grafikon beállítások
max_sugar = adatok['psi_1'] * 1.2
ax.set_xlim(-max_sugar, max_sugar)
ax.set_ylim(-max_sugar, max_sugar)
ax.set_aspect('equal')
ax.set_title(f"Atomcsapás szimulációja ({hatohato_kt} kt robbanóerő)\n Hatósugarak kilométerben", fontsize=14)
ax.set_xlabel("X távolság (km)")
ax.set_ylabel("Y távolság (km)")
# Jelmagyarázat és rács
ax.legend(loc='upper right', bbox_to_anchor=(1.35, 1))
ax.grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()
# --- Szimuláció futtatása ---
# Példa egy tipikus kisebb taktikai atomfegyverre (pl. 15 kilotonna - Hirosima méret)
valasztott_kt = 15
print(f"{valasztott_kt} kilotonnás nukleáris robbanás hatásainak vizualizációja...")
szimulacio_megjelenites(valasztott_kt)
---------------
15 kilotonnás nukleáris robbanás hatásainak vizualizációja...
Könyvek
https://mek.oszk.hu/08400/08435/08435.pdf
https://mtmi.unideb.hu/pluginfile.php/554/mod_resource/content/3/thinkcspy3.pdf
Nincsenek megjegyzések:
Megjegyzés küldése