2026. június 26., péntek

Atomtámadás hatásának modellezése

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