Modele siatkowe w fizyce
Prowadzący
Łukasz Mioduszewski (chętnie odpowiem mailowo na wszelkie pytania nt. warsztatów: lukasz.mioduszewski@interia.pl )
Opis
Warsztaty polegały na zakodzeniu w Pythonie (indywidualnie, każdy na swoim laptopie) różnych modeli zjawisk fizycznych, które da się opisać na siatce. Końcowym wynikiem były wykresy i gify pokazujące przebieg symulacji danego fizycznego układu. Więcej wygenerowanych gifów w prezentacji gify.pptx.
Być może spotkaliście się już z modelami siatkowymi rzeczy mało fizycznych, takimi jak gra w życie czy elementarne automaty komórkowe. Jeśli nie, polecam obejrzeć, bo to też ciekawe, ale nie wchodzi w zakres fizycznych warsztatów.
Program zajęć
Dzień 1: Monte Carlo i model Isinga
Ferromagnetyki (np. żelazo) składają się z domen, które mają jakiś moment magnetyczny. Gdy pojawi się zewnętrzne pole magnetyczne, domeny ustawiają się wzdłuż tego pola - i właśnie to symulowaliśmy 1. dnia (w uproszczonej wersji). Na gifie obok [1]domeny (piksele) mogą ustawić się w 2 kierunkach (czarnym lub białym). Użyliśmy do tego metody Monte Carlo, bardzo popularnej w fizycznych symulacjach.
Dzień 2: Perkolacja
Czyli przesączanie się cieczy przez porowaty materiał. Jak deszcz dostaje się do wód gruntowych? Jak powstają szczeliny? Jak zrobić dobrą kawę? Te wszystkie procesy można (w bardzo, bardzo dużym uproszczeniu) opisać modelem perkolacji. Gdy do pierwszego piksela w gifie[2] inny piksel może dołączyć z prawdopodobieństwem około \(p=0,597 \), tworzy się klaster (kolory oznaczają kiedy dołączył się dany piksel).
Dzień 3: Szukanie fraktali w wynikach
Okazuje się, że struktury wygenerowane przez niektóre modele to fraktale. Policzyliśmy wymiar fraktalny dla naszych układów i przekonaliśmy się, że nie jest całkowity (wymiar pudełkowy był nieco mniejszy od 2). Trzeciego dnia było więcej swobody, ale starczyło czasu na zasymulowanie osypywania piasku: w animacji [3]kolor czerwony oznacza wiele ziarenek piasku, a zielony mało. Gdy dany piksel ma ponad 3 ziarenka, oddaje po jednym sąsiadom. Zaczynając od planszy równo przepełnionej piaskiem (czerwony), osypywanie powoduje powstawanie na niej różnych wzorów.
Wymagania
Posiadanie na laptopie Pythona w wersji 2.4 lub późniejszej, z działającymi pakietami numpy i matplotlib (pakiet scipy nie będzie niezbędny, ale też warto zainstalować), a także domyślnymi pakietami random, math i PIL (Python Imaging Library). Znajomość Pythona na poziomie tego kursu (bez części "Numerical Integration" i następnych) powinna w zupełności wystarczyć.
Zadania kwalifikacyjne
Zadanie 1: dwa dipole magnetyczne
Energia dipola o momencie magnetycznym \(\overrightarrow{m}\) w zewnętrznym polu magnetycznym o indukcji \(\overrightarrow{B}\) to \(E = -\overrightarrow{m} \cdot \overrightarrow{B}\) Pole wytworzone przez pojedynczy dipol to:
\(\overrightarrow{B}_{\overrightarrow{m}}(\overrightarrow{r}) = \frac{ \mu_{0}}{4\pi}(\frac{3\overrightarrow{r}(\overrightarrow{{m}}\cdot\overrightarrow{r})}{r^5}- \frac{\overrightarrow{m}}{r^3} )\) (1)
gdzie \(\overrightarrow{r}\) to wektor zaczepiony w dipolu, którego drugi koniec wyznacza punkt w którym liczymy pole; a \(\mu_{0}\) to przenikalność magnetyczna próżni.
Policz energię układu dwóch dipoli o tym samym (co do wartości) momencie magnetycznym \(|\overrightarrow{m_{1}} | = |\overrightarrow{m_{2}} | \) odległych od siebie o \(z\) (tak że wektor od jednego dipola do drugiego to \(\overrightarrow{z}\)) w dwóch przypadkach:
- Bez zewnętrznego pola magnetycznego
- Z zewnętrznym, jednorodnym polem \(\overrightarrow{B}\) skierowanym prostopadle do \(\overrightarrow{z}\)(patrz rysunek)
Dla obu przypadków sprawdź, kiedy (dla jakiego ustawienia dipoli względem siebie i pola) energia jest największa, a kiedy najmniejsza?
Zadanie 2: symulacja gazu doskonałego
Napisz w Pythonie symulację dwuwymiarowego gazu doskonałego, w której N cząsteczek (kółek o promieniu \(r\)i masie \(m=2\))[4], zderza się ze sobą idealnie sprężyście. Kółka mają na początku symulacji mieć wszystkie jednakową prędkość v, skierowaną w losową stronę. Prostokąt, na którym toczyć się będzie symulacja, ma być zrobiony tak, że gdy cząsteczka wpadnie w ścianę, wyleci z przeciwnej strony (z tym samym wektorem prędkości), tak jak w grze Asteroids. Wynikiem symulacji ma być:
- Krótki gif pokazujący przebieg symulacji
- Końcowy (po długim czasie symulacji) histogram rozkładu energii cząsteczek (na osi pionowej - liczba cząsteczek, poziomej - ich energia kinetyczna \(\frac{mv^2}{2} = v^2\))
- Wykres średniej energii kinetycznej w zależności od czasu (powinna być stała)
- Dodatkowo (nie wpłynie na kwalifikację, ale pomoże zrozumieć to, co będę mówił na warsztatach): dopasowanie (np. przy pomocy SciPy) rozkładu Boltzmanna (\(P(E) = N \cdot exp(\frac{-E}{kT})\), gdzie \(N\) i \(kT\) to parametry dopasowania) do histogramu energii kinetycznej. W tym celu trzeba będzie histogram robić "ręcznie", np. tak jak tutaj.
Aby oszczędzić Wam szukania odpowiednich Pythonowych poleceń, przygotowałem pomoc, czyli przykładowy kod w Pythonie, z którego można swobodnie korzystać.
Zadanie 3: mrówka Langtona
Tym razem przykład niefizyczny: dwuwymiarowy automat komórkowy zwany mrówką Langtona. Zasady działania wyjaśnia Wikipedia, zadanie polega na stworzeniu gifa, np. takiego jak na wiki. Dla mrówki także przygotowałem przykładowy kod. Zadanie można rozszerzyć o:
- Periodyczne warunki brzegowe (czyli tak jak w gazie, że mrówka natrafiając na ścianę wyjdzie z przeciwnej strony).
- Wybranie jakichś ciekawych warunków początkowych i przeprowadzenie odpowiednio długiej symulacji, aby otrzymać obrazki takie jak ten po prawej (wzięty ze strony code.algorithmicdesign.net):
Literatura
Model Isinga i Monte Carlo
- Artykuł o algorytmie Wolffa, który kodziliśmy 1. dnia (z dowodem, dlaczego on działa): Text.pdf
- Ogólnie o modelu Isinga i nie tylko: 01-2ising.pdf
- Inny przykład zastosowania metody Monte Carlo: 97-06-051.pdf
Perkolacja i fraktale
- O perkolacji i lepkości cieczy: perkol.html
- Różne metody liczenia wymiaru fraktalnego: lec5.pdf
- Płatny :( artykuł, z którego abstraktu wynika, że dobrze policzyliśmy wymiar fraktalny klastra: abstrakt
Osypywanie piasku
- Opis ćwiczenia, które w sumie powtórzyliśmy na WWW: cwicz11.pdf
Dodatkowe informacje
- Jeśli ktoś chciał zasymulować coś innego, wg swojego pomysłu, była taka możliwość.
- Python oferuje naprawdę dużo możliwości - polecam krótką listę narzędzi dla naukowców (są tam też przydatne rzeczy niezwiązane z Pythonem).
- Polecenie zmieniające wszystkie obrazki png w gifa, z kolejnymi obrazkami następującymi po sobie w kolejności alfabetycznej z odstępem 20ms:
convert *.png -delay 20 animacja.gif
Jeśli powyższy kod nie działa, być może pomoże instalacja ImageMagick. Użytkowników Windows ostrzegam o convert issue.