Modele siatkowe w fizyce

Prowadzący

Łukasz Mioduszewski (chętnie odpowiem mailowo na wszelkie pytania nt. warsztatów)

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ęć

ising_small.gif

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 obok1 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.

perkolacja.gif

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 gifie2 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).

piasek.gif

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 animacji3 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 $\vec{m}$ w zewnętrznym polu magnetycznym o indukcji $\vec{B}$ to $E=-\vec{m}\cdot \vec{B}$. Pole wytworzone przez pojedynczy dipol to

dipole.png
(1)
\begin{align} \vec{B}_{\vec{m}}(\vec{r})=\frac{\mu_{0}}{4\pi}\left(\frac{3\vec{r}(\vec{m}\cdot\vec{r})}{r^{5}}-\frac{{\vec{m}}}{r^{3}}\right) \end{align}

gdzie $\vec{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 $|\vec{m_1}|=|\vec{m_2}|$ odległych od siebie o $z$ (tak że wektor od jednego dipola do drugiego to $\vec{z}$) w dwóch przypadkach:

  1. Bez zewnętrznego pola magnetycznego
  2. Z zewnętrznym, jednorodnym polem $\vec{B}$ skierowanym prostopadle do $\vec{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ć:

  1. Krótki gif pokazujący przebieg symulacji
  2. 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$)
  3. Wykres średniej energii kinetycznej w zależności od czasu (powinna być stała)
  4. 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

prt_200x200_1382461607.jpg

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:

  1. Periodyczne warunki brzegowe (czyli tak jak w gazie, że mrówka natrafiając na ścianę wyjdzie z przeciwnej strony).
  2. 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

  1. Artykuł o algorytmie Wolffa, który kodziliśmy 1. dnia (z dowodem, dlaczego on działa): Text.pdf
  2. Ogólnie o modelu Isinga i nie tylko: 01-2ising.pdf
  3. Inny przykład zastosowania metody Monte Carlo: 97-06-051.pdf

Perkolacja i fraktale

  1. O perkolacji i lepkości cieczy: perkol.html
  2. Różne metody liczenia wymiaru fraktalnego: lec5.pdf
  3. Płatny :( artykuł, z którego abstraktu wynika, że dobrze policzyliśmy wymiar fraktalny klastra: abstrakt

Osypywanie piasku

  1. Opis ćwiczenia, które w sumie powtórzyliśmy na WWW: cwicz11.pdf

Dodatkowe informacje

  1. Jeśli ktoś chciał zasymulować coś innego, wg swojego pomysłu, była taka możliwość.
  2. 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).
  3. 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.
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License