Zoznam úloh

7. Výbušné snívanie

Zadanie

Niekoľkí FKS vedúci sa pred časom zúčastnili nemenovanej šifrovačky s cieľom siahnuť si až na dno. Ako tak klesali na dno, uvideli vo vode ponorku1. Ponorka plávala vo výške $h$ nad dnom relatívnou rýchlosťou $u$ vzhľadom na vodu, v smere toku vody, ktorá tečie rýchlosťou $v$. Tu zrazu ponorka vybuchne a každým smerom vyletí malinký kúsok – guľôčka s hmotnosťou $m$. Zmena hybnosti po výbuchu každej guľôčky je $\FDiff p$, v danom smere jej letu. Do akej najväčšej vzdialenosti doletia úlomky ponorky od miesta výbuchu, ak je odporová sila vo vode priamo úmerná rýchlosti guľôčky? Pri riešení môžete používať výpočtovú techniku a celú situáciu si nasimulovať pre nejaké vami vhodne zvolené hodnoty parametrov.


  1. Možno sa im to však len od vyčerpania prisnilo. 

Keďže simulovať pohyb úlomkov je jednoduchšie ako riešiť nehomogénne diferenciálne rovnice, je jasné, ktorý spôsob riešenia si vyberieme. Bude to úplne najjednoduchšia Eulerova metóda. Tá nám hovorí, že ak poznáme v čase $t$ zrýchlenie úlomka $\vec{a}(t)$, tak ak úlomok mal v danom čase rýchlosť $\vec{v}(t)$ a polohu $\vec{r}(t)$, tak o malý čas $\FDiff t$ neskôr už mal rýchlosť $$ \vec{v}(t + \FDiff t) = \vec{v}(t) + \vec{a}(t)\FDiff t $$ a polohu $$ \vec{r}(t + \FDiff t) = \vec{r}(t) + \vec{v}(t)\FDiff t. $$ Na malom časovom úseku sme teda nejaký komplikovaný pohyb nahradili rovnomerným priamočiarym. A potom ak chceme poznať polohu a rýchlosť v čase $2\FDiff t$, tak budeme vychádzať z hodnôt v čase $\FDiff t$. Ak zvolíme časový krok dostatočne malý, tak naše numerické riešenie dosiahne nejakú presnosť, ktorú požadujeme. A to je všetko. Jednoduché, však?

Doteraz sme veličiny zapisovali všeobecne ako vektory, ale teraz si ich rozdelíme na zložky. Počiatočná poloha všetkých úlomkov je rovnaká. Danú máme výšku $h$ a vodorovnú súradnicu zvoľme nulovú, čiže $$ x(0) = 0 \QQText{a} y(0) = h. $$ Výbuchom dostanú všetky úlomky hybnosť $\FDiff p$. Každý má rovnakú hmotnosť $m$, čiže úlomky výbuch urýchlil na rýchlosť $\FDiff p/m$ voči ponorke. Tá išla rýchlosťou $u$ voči vode, ktorá ide rýchlosťou $v$ voči dnu. Preto počiatočné zložky rýchlosti sú $$ v_x(0) = u + v + \frac{\FDiff p}{m}\cos\alpha \QQText{a} v_y(0) = \frac{\FDiff p}{m}\sin\alpha, $$ kde $\alpha$ je uhol, pod ktorým úlomok vyletel, rátaný v kladnom smere od smeru rýchlosti ponorky. Ohľadom zrýchlenia použijeme Stokesov zákon $\vec{F} = -6\pi\mu R \vec{v}$, ktorý nám umožňuje vypočítať odporovú silu pôsobiacu na guľu polomeru $R$ pohybujúcu sa rýchlosťou $v$ voči kvapaline s dynamickou viskozitou $\mu$. Zrýchlenie je $\vec{a} = \vec{F}/m$ a guľa s hmotnosťou $m$ má polomer $R = \sqrt[3]{3m/(4\pi\rho)}$, kde $\rho$ je hustota gule. Okrem odporovej sily pôsobia ešte gravitačná a vztlaková v zvislom smere. Dokopy teda máme vo vodorovnom smere $$ a_x(t) = \frac{-6\pi\mu\sqrt[3]{\frac{3m}{4\pi\rho}}(v_x(t) - v)}{m}. $$ Rozdiel $v_x(t) - v$ je vodorovná zložka relatívnej rýchlosti úlomku voči vode. Pre zvislý smer máme $$ a_y(t) = \frac{-6\pi\mu\sqrt[3]{\frac{3m}{4\pi\rho}} v_y(t)}{m} - g + \frac{\rho_\mathrm{v}}{\rho}g, $$ kde posledný člen je pochádza zo vztlakovej sily.

Časové kroky pre každý úlomok vykonávame, kým platí $y > 0$, teda že je nad dnom. Ak táto podmienka prestane platiť, tak pre aktuálne hodnoty vypočítame vzdialenosť od miesta výbuchu Pytagorovou vetou $d = \sqrt{x^2 + h^2}$.

Pre hodnoty $h = \qty{3}{\metre}$, $v = \qty{6}{\metre\per\second}$, $u = \qty{2}{\metre\per\second}$, $\mu = \qty{8.9e-4}{\pascal\second}$ (voda), $m = \qty{1}{\kilo\gram}$, $\rho = \qty{7850}{\kilo\gram\per\metre\cubed}$ (oceľ), $\rho_\mathrm{v} = \qty{1000}{\kilo\gram\per\metre\cubed}$, $\FDiff t = \qty{1e-4}{\second}$, $g = \qty{10}{\metre\per\second\squared}$ a $\FDiff p = \qty{10}{\kilo\gram\metre\per\second}$ dostávame, že ak si celých $\ang{360}$ rovnomerne rozdelíme na 1000 uhlov $\alpha$, tak najďalej doletel úlomok, ktorý bol vyletel pod uhlom $\ang{52.61}$, a to konkrétne do vzdialenosti $\qty{30.28}{\metre}$.

Na obrázku 1 možno videť dráhy ôsmich vybraných úlomkov s rôznymi uhlami $\alpha$. Aby bolo vidno unášavé pôsobenie vody, použili sme preň tisícnásobok dynamickej viskozity vody.

obrázok 1: Dráhy ôsmich vybraných úlomokov obrázok 1: Dráhy ôsmich vybraných úlomokov

Kód riešiaci túto úlohu takisto prikladáme.

import numpy as np                 # kniznica s matematickymi funkciami

h = 3                              # vyska nad dnom
v = 6                              # rychlost vody voci dnu
u = 2                              # rychlost ponorky voci vode
visk = 8.9e-4                      # dynamicka viskozita vody
m = 1                              # hmotnost guliciek
rho = 7850                         # hustota guliciek
R = np.cbrt(3*m / (4*np.pi*rho))   # polomer guliciek
rhov = 1000                        # hustota vody
dt = 0.0001                        # casovy krok
g  = 10                            # gravitacne zrychlenie
dp = 10                            # udelena hybnost
vp = dp/m                          # udelena rychlost

vzdialenosti = []                  # zoznam na ukladanie vzdialenosti od miesta vybuchu
uhly = np.linspace(0, 360, 1000)   # pocitame pre 1000 uhlov medzi 0 a 360 stupnami
for a in uhly:
    # pociatocna poloha
    x = 0
    y = h
    # pociatocna rychlost
    vx = u + v + vp*np.cos(np.radians(a))
    vy = 0     + vp*np.sin(np.radians(a))

    # simulujeme, dokym je gulicka nad dnom
    while(y > 0):
        ax = -6*np.pi*visk*R*(vx - v)/m
        ay = -6*np.pi*visk*R*vy/m - g + rhov/rho*g
        vx = vx + ax*dt
        vy = vy + ay*dt
        x  =  x + vx*dt
        y  =  y + vy*dt

    vzdialenosti.append(np.sqrt(x**2 + h**2)) # ulozime vzdialenost od miesta vybuchu

index = np.argmax(vzdialenosti)    # index najvacsej hodnoty v zozname vzdialenosti
print(f"Najvacsiu vzdialenost {vzdialenosti[index]} m presla gulicka vyletevsia pod uhlom {uhly[index]}°.")
Pre odovzdávanie sa musíš prihlásiť.