2026. június 26., péntek

Tokaji vulkán kitörés modellezése

Egy vulkáni kitörés összetett fizikai folyamat (magma áramlása, gázok terjedése), így a modellezéséhez a Python nyelvben leggyakrabban a numpy és matplotlib csomagokat alkalmazzák a numerikus számításokhoz és az eredmények vizualizációjához.Az alábbi Python szkript egy Tokajhoz hasonló rétegvulkán kitörését szimulálja: lemodellezi a láva terjedését a gravitáció és a domborzat hatására, valamint a vulkáni hamu szélirány szerinti szóródását. 
--------------
import numpy as np
import matplotlib.pyplot as plt

def simulacio_vulkan(grid_size=100, kitoresi_intenzitas=500):
    # 1. Alapvető paraméterek és domborzat (Magassági mátrix)
    # A kráter a mátrix közepén helyezkedik el
    domborzat = np.zeros((grid_size, grid_size))
    for i in range(grid_size):
        for j in range(grid_size):
            tav_kozponttol = np.sqrt((i - grid_size/2)**2 + (j - grid_size/2)**2)
            # Egy kúp alakú hegy létrehozása (Tokaji-hegyek jellege)
            domborzat[i, j] = 500 - tav_kozponttol * 10 
            if domborzat[i, j] < 0: domborzat[i, j] = 0

    # 2. Láva szimuláció (egyszerűsített celluláris automata)
    lava = np.zeros((grid_size, grid_size))
    krat_x, krat_y = grid_size // 2, grid_size // 2
    lava[krat_x, krat_y] = kitoresi_intenzitas

    # Láva terjedése a lejtőn lefelé
    for _ in range(20): # Szimulációs lépések
        uj_lava = lava.copy()
        for x in range(1, grid_size-1):
            for y in range(1, grid_size-1):
                if lava[x, y] > 0:
                    szomszedok = [
                        (x+1, y), (x-1, y), (x, y+1), (x, y-1)
                    ]
                    for sx, sy in szomszedok:
                        if domborzat[sx, sy] < domborzat[x, y]:
                            atadas = lava[x, y] * 0.1
                            uj_lava[x, y] -= atadas
                            uj_lava[sx, sy] += atadas
        lava = uj_lava

    # 3. Hamuszórás szimuláció (Gauss-eloszlás a szélirány alapján)
    # Tegyük fel, hogy a szél észak-keleti irányba fúj (Tokaj felé)
    hamu = np.zeros((grid_size, grid_size))
    szel_irany_x = 5
    szel_irany_y = 5
    for x in range(grid_size):
        for y in range(grid_size):
            # Távolság a krátertől szélirányban
            dx = x - (krat_x + szel_irany_x)
            dy = y - (krat_y + szel_irany_y)
            tavolsag = np.sqrt(dx**2 + dy**2)
            # Hamu vastagságának csökkenése távolsággal
            hamu[x, y] = max(0, 1000 - tavolsag * 20)

    # 4. Eredmények vizualizációja
    fig, ax = plt.subplots(1, 2, figsize=(12, 6))

    # Láva megjelenítése
    im1 = ax[0].imshow(lava, cmap='hot', origin='lower')
    ax[0].set_title("Láva terjedési modell")
    ax[0].set_xlabel("X koordináta (km)")
    ax[0].set_ylabel("Y koordináta (km)")
    fig.colorbar(im1, ax=ax[0], label='Láva vastagság (m)')

    # Hamu szóródás megjelenítése
    im2 = ax[1].imshow(hamu, cmap='Greys', origin='lower')
    ax[1].set_title("Vulkáni hamu lerakódás (Szélirány: ÉK)")
    ax[1].set_xlabel("X koordináta (km)")
    ax[1].set_ylabel("Y koordináta (km)")
    fig.colorbar(im2, ax=ax[1], label='Hamu vastagság (mm)')

    plt.tight_layout()
    plt.show()

simulacio_vulkan()
---------------------
Mit csinál a program?
A simulacio_vulkan() függvény 4 fő lépést hajt végre:

Domborzat létrehozása
Láva terjedésének szimulálása
Hamu lerakódásának modellezése
Eredmények vizualizálása
A végén meghívja:

simulacio_vulkan()
1) Domborzat létrehozása
domborzat = np.zeros((grid_size, grid_size))
Ez egy grid_size x grid_size méretű mátrix, alapból 0-val feltöltve.

Ezután minden cellára kiszámolja a középponttól való távolságot:

tav_kozponttol = np.sqrt((i - grid_size/2)**2 + (j - grid_size/2)**2)
Majd ehhez rendeli a magasságot:

domborzat[i, j] = 500 - tav_kozponttol * 10
Tehát:

középen magas
kifelé haladva egyre alacsonyabb
ha negatív lenne, 0-ra állítja
Ez gyakorlatilag egy kúpszerű hegyet készít.

Megjegyzés
A komment szerint „Tokaji-hegyek jellege”, de valójában ez csak egy általános kúpmodell, nem valós topográfia.

2) Láva szimuláció
lava = np.zeros((grid_size, grid_size))
krat_x, krat_y = grid_size // 2, grid_size // 2
lava[krat_x, krat_y] = kitoresi_intenzitas
A kráter a rács közepére kerül, és oda kerül a kezdeti lávamennyiség.

Terjedési logika
A program 20 lépésen keresztül szimulálja a terjedést:

for _ in range(20):
Minden aktív cellánál megvizsgálja a 4 szomszédot:

szomszedok = [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]
Ha a szomszéd alacsonyabban van, mint az aktuális cella:

if domborzat[sx, sy] < domborzat[x, y]:
akkor a láva 10%-át átadja:

atadas = lava[x, y] * 0.1
uj_lava[x, y] -= atadas
uj_lava[sx, sy] += atadas
Fontos viselkedés
Ez azt modellezi, hogy a láva lefelé folyik a lejtőn.

Probléma
A modell egyszerűsége miatt:

egy cella több szomszédnak is adhat ugyanabban a körben
a láva gyorsan eloszlik
nem szerepel viszkozitás, hűlés, megszilárdulás
Ez inkább demonstrációs modell, nem fizikai szimuláció.

3) Hamu szóródás
hamu = np.zeros((grid_size, grid_size))
szel_irany_x = 5
szel_irany_y = 5
Itt feltételezi, hogy a szél észak-keleti irányba fúj.

Ezután minden cellára kiszámolja a krátertől való távolságot a szélirány eltolásával:

dx = x - (krat_x + szel_irany_x)
dy = y - (krat_y + szel_irany_y)
tavolsag = np.sqrt(dx**2 + dy**2)
hamu[x, y] = max(0, 1000 - tavolsag * 20)
Mit jelent ez?
a középponthoz közeli területeken vastagabb hamu
távolabb vékonyabb
a szélirány miatt az eloszlás eltolódik
Megjegyzés
Ez nem valódi légköri modell, hanem egy egyszerű Gauss-szerű lecsengés.

4) Vizualizáció
A program két ábrát rajzol:

Láva
im1 = ax[0].imshow(lava, cmap='hot', origin='lower')
hot színskála
alulról induló koordináta-rendszer
Hamu
im2 = ax[1].imshow(hamu, cmap='Greys', origin='lower')
szürke színskála
világosabb/sötétebb területek mutatják a vastagságot
A colorbar segít az értékek értelmezésében.

Erősségek
Egyszerűen érthető
Jól szemlélteti a rácsalapú modellezést
Szép vizualizációt ad
Jó demonstráció arra, hogyan lehet természeti jelenséget modellezni
Gyengeségek
1. Nem fizikai pontosságú
A láva terjedése túl egyszerű:

nincs hőmérséklet
nincs viszkozitás
nincs megszilárdulás
nincs térfogatmegmaradás
2. A hamu szóródás mesterséges
A szélirány csak egy eltolás:

nincs turbulencia
nincs légköri rétegződés
nincs valós terjedési modell
3. A domborzat statikus
A vulkán kitörése nem változtatja meg érdemben a hegy formáját.

4. A kód lassú lehet nagy rácsnál
Két egymásba ágyazott ciklus van több helyen, ami nagyobb grid_size esetén lassú.

Technikai megfigyelések
Importok
import numpy as np
import matplotlib.pyplot as plt
Ezek megfelelőek, nincs hiányzó import.

Paraméterek
A függvény paraméterei:

def simulacio_vulkan(grid_size=100, kitoresi_intenzitas=500):
Ez jó, mert könnyen állítható.

Szintaxis
A kód alapvetően szintaktikailag helyes.

Összegzés
Ez egy szemléltető, oktatási célú vulkánmodell, generál egy kúpszerű domborzatot,
indít egy láva-terjedést a középpontból, létrehoz egy egyszerű hamu-lerakódási mintát,

Nincsenek megjegyzések:

Megjegyzés küldése