Rozšírenie článkov: https://hrubos.tech/blogy/2026/08/hypoteza-o-tokamaku-hrubosova
Uvažujme že na obrázku nižšie od ČNS budú prúdy plazmy vystrelované z tých výstupkov, á poďme nasimulovať ako budú interagovať energeticky tie letiace v tvare trojuholníka a tie v tvare hviezdic:
zdroj: Česká nukleární společnost: https://hrubos.tech/blogy/content/images/20261020200508-ITER.jpeg

https://hrubos.tech/blogy/content/images/20261020200659-ITER_E.jpg
simu realtime: https://hrubos.tech/simulacie/plazma3.mp4
using Pkg
Pkg.add("Plots")
using Plots
# =========================================================
# PLAZMA: trojuholníkový a hviezdicový prúd častíc
# Výstup: plazma.mp4
# =========================================================
const N = 240
const FPS = 30
const DURATION = 8.0
f1 = 0.8 # frekvencia trojuholníkového prúdu
f2 = 2 * f1 # frekvencia hviezdicového prúdu
amplituda = 0.5 # amplitúda energetických oscilácií
# ---------------------------------------------------------
# Geometria dráh
# ---------------------------------------------------------
triangle = [
-1.0 -0.65
1.0 -0.65
0.0 1.0
]
star = reduce(vcat, [
reshape([
(isodd(i) ? 1.0 : 0.42) *
cos(-pi / 2 + (i - 1) * pi / 5),
(isodd(i) ? 1.0 : 0.42) *
sin(-pi / 2 + (i - 1) * pi / 5)
], 1, 2)
for i in 1:10
])
# ---------------------------------------------------------
# Poloha častice na uzavretej polygonálnej dráhe
# ---------------------------------------------------------
function polygon_point(points, u)
n = size(points, 1)
x = mod(u, 1.0) * n
i = floor(Int, x) + 1
q = x - floor(x)
j = mod1(i + 1, n)
px = (1 - q) * points[i, 1] + q * points[j, 1]
py = (1 - q) * points[i, 2] + q * points[j, 2]
return px, py
end
# ---------------------------------------------------------
# Modelové nezáporné kinetické energie
#
# E1, E2 sú normalizované modelové hodnoty, nie eV ani J.
# Nejde o riešenie úplných rovníc dynamiky plazmy.
# ---------------------------------------------------------
function energy(t)
E1 = 0.52 + amplituda * 0.32 *
(0.5 + 0.5 * sin(2 * pi * f1 * t))
E2 = 0.48 + amplituda * 0.34 *
(0.5 + 0.5 * sin(2 * pi * f2 * t + 0.9))
return E1, E2
end
# ---------------------------------------------------------
# Graf jednej dráhy a pohybujúcich sa častíc
# ---------------------------------------------------------
function particle_plot(points, t, f, color, title_text)
p = plot(
aspect_ratio = :equal,
xlims = (-1.3, 1.3),
ylims = (-1.3, 1.3),
title = title_text,
xlabel = "x",
ylabel = "y",
legend = false,
grid = true
)
closed_x = [points[:, 1]; points[1, 1]]
closed_y = [points[:, 2]; points[1, 2]]
plot!(
p, closed_x, closed_y,
color = color,
linewidth = 2
)
# Dvanásť častíc v prúde
xs = Float64[]
ys = Float64[]
for j in 0:11
u = mod(j / 12 + f * t, 1.0)
x, y = polygon_point(points, u)
push!(xs, x)
push!(ys, y)
end
scatter!(
p, xs, ys,
color = color,
markersize = 5,
markerstrokewidth = 0
)
return p
end
# ---------------------------------------------------------
# Časová os
# ---------------------------------------------------------
times = collect(range(0.0, DURATION, length = N))
anim = Animation()
# ---------------------------------------------------------
# Generovanie snímok
# ---------------------------------------------------------
for k in 1:N
t = times[k]
# Vľavo hore: trojuholníkový prúd
p1 = particle_plot(
triangle, t, f1, :dodgerblue,
"Trojuholnikovy prud"
)
# Vľavo dole: hviezdicový prúd
p2 = particle_plot(
star, t, f2, :orange,
"Hviezdicovy prud"
)
# Energie od začiatku po aktuálny čas
ts = times[1:k]
values = [energy(s) for s in ts]
E1 = first.(values)
E2 = last.(values)
# Rozdiel energie: hviezdica mínus trojuholník
dE = E2 .- E1
# Vpravo hore: obe energie
p3 = plot(
ts, E1,
color = :dodgerblue,
linewidth = 2.5,
label = "E1 - trojuholnik",
xlabel = "Cas",
ylabel = "Normalizovana energia",
title = "Porovnanie energii",
xlims = (0, DURATION),
ylims = (0, 1.0),
legend = :topright,
grid = true
)
plot!(
p3, ts, E2,
color = :orange,
linewidth = 2.5,
label = "E2 - hviezdica"
)
vline!(
p3, [t],
color = :gray,
linestyle = :dash,
linewidth = 1,
label = false
)
# Vpravo dole: rozdiel energií
p4 = plot(
ts, dE,
color = :purple,
linewidth = 2.5,
label = "Delta E = E2 - E1",
xlabel = "Cas",
ylabel = "Rozdiel energie",
title = "Rozdiel energii",
xlims = (0, DURATION),
ylims = (-0.4, 0.4),
legend = :topright,
grid = true
)
hline!(
p4, [0.0],
color = :black,
linestyle = :dash,
linewidth = 1.5,
label = "Delta E = 0"
)
vline!(
p4, [t],
color = :gray,
linestyle = :dash,
linewidth = 1,
label = false
)
# Celkové rozloženie: dva pohyby a dva grafy
fig = plot(
p1, p3,
p2, p4,
layout = (2, 2),
size = (1400, 900),
plot_title = "Proudy castic plazmy | t = $(round(t, digits=2))"
)
Plots.frame(anim, fig)
if k % 30 == 0
println("Vygenerovanych snimok: $k / $N")
end
end
# ---------------------------------------------------------
# Export MP4
# ---------------------------------------------------------
mp4(anim, "plazma3.mp4", fps = FPS)
println()
println("Simulacia dokoncena.")
println("Vystupny subor: plazma.mp4")
println("Rozlisenie: 1400 x 900")
println("Pocet snimok: $N")
println("FPS: $FPS")
Za pomoc s kódom simulácie ďakujem GPT AI v JuliaLang ;)
