2. Domácí úkol: Isingův model
Úvod
Isingův model je fyzikální model zkoumaný od dvacátých let dvacátého století, který se nejčastěji používá k popisu chování ne/magnetických materiálů. Je pojmenován po fyziku Ernestovi Isingovi a někdy i Wilhelmu Lenzovi (školitel Isinga).
Základní myšlenka je poměrně přímočará, pokusme se ji stručně popsat v dvourozměrném případě tak, aby popis byl srozumitelný i bez znalosti některých fyzikální prerekvizit.
Teoretický background
Popis modelu
Představte si malé magnetické částice (přesněji dipóly, malé magnety se severním a jižním pólem), které mohou být orientovány pouze ve dvou směrech, které si označíme jako a (např. nahoru/dolu). O těchto částicích budeme mluvit jako o "spinech".
Spiny jsou uspořádány do čtvercové mřížky a jednotlivě interagují pouze se svými nejbližšími sousedy, tj. až osmi okolními spiny. Nechť máme spinů, jejichž orientace si postupně označíme . Jejich konkrétní rozložení na mřížce teď není podstatné.
Míra interakce mezi -tým a -tým spinem je popsána hodnotou .
Dále předpokládejme, že naše mřížka je (resp. může být) ve vnějším magnetickém poli, jehož interakci s -tým spinem popíšeme veličinou , .
Celková energie systému, jehož konfigurace je je pak dána výrazem
kde suma běží přes všechny dvojice sousedních spinů a . Každá dvojice je započítána právě jednou.
S touto volbou znamének mají a následující význam:
- pokud , pak jde o feromagnetickou interakci,
- pokud , pak jde o anti-feromagnetickou interakci
- pokud , pak spolu spiny neinteragují
a
- pokud , pak má -tý spin tendenci mít orientaci ,
- pokud , pak má -tý spin tendenci mít orientaci ,
- pokud , pak má -tý spin není ovlivňován vnějším prostředím.
Konečně, posledním parametrem modelu je tzv. inverzní teplota , kde je teplota a Boltzmanova konstanta. Tento parametr bude mít význam pro časový vývoj systému, který je popsaný níže.
Hraniční podmínky
K úplnému popisu problému je nutné říci, jak se systém chová vzhledem ke spinům na kraji naší obdélníkové mřížky. Nejčastější jsou dvě z následujících možností.
Periodické hraniční podmínky: sousednost prodloužíme horizontálně i vertikálně periodickým způsobem. Pokud byly spiny uspořádány v dvourozměrné mřížce s indexy , , , pak
- sousedé jsou , , , , , , a ,
- sousedé jsou , , , , , ale i , , ,
- například mezi sousedy patří i ,
- atd.
Alternativně bychom mohli říci, že místo čtverce máme plochý torus. Slepili jsme k sobě vždy dvě protilehlé strany čtverce.
Pevné hraniční podmínky: spiny na okraji čtverce mají pevnou předepsanou hodnotu a nikdy se nemění.
Monte Carlo simulace časového vývoje (Metropolisův algoritmus)
V daném okamžiku nechť je systém v konfiguraci . Do tohoto výčtu nyní nepočítáme případné neměnné spiny předepsané pevnými hraničními podmínkami. Postupujeme v následujících krocích:
- Vyberme náhodně jeden ze spinů (pravděpodobnost výběru -tého spinu je ).
- Označme jako potenciální novou konfiguraci systému, která vznikla z konfigurace změnou hodnoty -tého spinu.
- Nyní se vývoj řídí podle změny energie:
- Pokud energie nové konfigurace je nižší nebo rovna než energie staré konfigurace, tedy , pak systém přejde do konfigurace a začínáme znovu krokem 1.
- Pokud naopak nová konfigurace má vyšší energii, tj. pak k přechodu do konfigurace dojde s pravděpodobností . V této situaci jde o hodnotu mezi a . Poté opět začínáme znovu krokem 1.
Implementační pokyny
Hlavním souborem je soubor ising.jl
, který je nutné doplnit vlastním kódem.
V tomto souboru naleznete modul Ising
, který využívá moduly Images
(generování jednoduchých obrázků) a ProgressMeter
(případné zobrazení běhu výpočtu; nutně ho používat nemusíte).
Případně si tyto balíčky doinstalujte příkazem ] add Images ProgressMeter
.
Modul exportuje (uživateli dává k dispozici; viz použití v ising.ipynb
) následující datové typy a metody.
IsingPeriodic
a IsingFixed
Typy Tyto typy jsou podtypy abstraktního typu IsingModel
.
První odpovídá Isingově modelu s periodickými okrajovými podmínkami a druhý Isingově modelu s pevnými okrajovými podmínkami.
Oba typy jsou si hodně podobné, liší se pouze v detailech, viz zdrojový kód.
V obou případech ukládáme hodnoty spinů v atributu sites
(matice) a parametry modelu v atributech
β
inverzní teplota (kladné číslo),h
vnější magnetické pole (matice reálných hodnot),J
matice udávající intenzitu interakce mezi sousedy, prvek uprostřed matice nemá význam, lze ho ignorovat. Její prvky mohou být libovolná reálná čísla. Měla by být symetrická vůči všem osám symetrie čtverce.
Při této numerické simulaci stačí operovat ve strojových číslech.
randomize!
Metoda Tato metoda jednoduše náhodně nastaví spiny v daném modelu. Hodí se při spouštění simulace.
evolve!
Metoda Tato metoda spustí simulaci modelu. Tedy postupně ho aktualizuje podle evolučního pravidla popsaného výše. Délka simulace je kontrolována dvěma hodnotami:
max_steps
: maximální počet kroků (ve smyslu úspěšně změněných spinů), výchozí hodnota1_000
.max_tries
: maximální počet neúspěšných pokusů (v řadě za sebou, po každém úspěšném přehození počítáme od znovu) o změnu hodnoty spinu, výchozí hodnota1_00
.
Druhá hodnota je důležitá.
Během vývoje systém spíše spěje (v závislosti na teplotě) k rovnováze, čímž se postupně zmenšuje pravděpodobnost změny spinu.
Simulace by se tedy mohla nebezpečně prodloužit.
Tomu zamezíme právě hodnotou max_tries
.
Nastavení vhodných hodnot může být (určitě je) závisle na nastavení parametrů modelu.
energy
Metoda Vypočte energii dané konfigurace.
plot
Metoda Slouží k vizualizaci spinů na mřížce. Můžete využít libovolný z grafických balíčků.
Můžete se pokusit i vytvořit animaci časového vývoje.
Další
Nebojte se přidat další vlastní pomocné metody. Je dobré kód logicky strukturovat a využívat možností Julia jako je třeba multiple dispatch.
Jupyter notebook
V repozitáři naleznete i Jupyter notebook ising.ipynb
v kterém jsou ukázky simulací různých situací.
Můžete se pokusit vytvořit vlastní varianty (počáteční podmínky, magnetické pole, interakce) a vygenerovat zajímavé obrázky. Můžete si pohrát i s vizualizací samotnou (změna barvy, nemusíte nutně vizualizovat spiny samotné, ale třeba jen nějakou lokální střední hodnotu…) Z nejzajímavějších mohu sestrojit poutavý BI-JUL poster.
Lokální spouštění testů
K lokálnímu spuštění testů budete pravděpodobně potřebovat doinstalovat balíček Glob
.
import Pkg; Pkg.add("Glob")
Poté v kořenovém adresáři tohoto zadání stačí z příkazové řádky spustit
$ julia --color=yes test/runtests.jl
Tímto příkazem spustíte všechny test v souborech test/test_*.jl
.
Případně tak do adresáře test
můžete snadno přidat i další pomocné vlastní testy vlastních pomocných metod, jen je musíte pojmenovat ve tvaru test_*.jl
.
Pokud vše dopadne dobře, měli byste vidět následující standardní výstup:
$ julia test/runtests.jl
┌ Info: Running tests in test_constructors.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Summary: | Pass Total Time
IsingPerodic: constructor | 2 2 0.2s
Test Summary: | Pass Total Time
IsingFixed: constructor | 2 2 0.1s
┌ Info: Running tests in test_energy.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Summary: | Pass Total Time
IsingFixed: energy | 4 4 0.1s
Test Summary: | Pass Total Time
IsingPeriodic: energy | 4 4 0.0s
┌ Info: Running tests in test_evolve.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Summary: | Pass Total Time
evolve!: simple test | 1 1 1.6s
┌ Info: Running tests in test_other.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
┌ Info: Running tests in test_randomize.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Summary: | Pass Total Time
randomize!: IsingPeriodic | 1 1 0.1s
Test Summary: | Pass Total Time
randomize!: IsingFixed | 5 5 0.6s
V opačném případě dostanete od Julia vynadáno!
Varování:
Pokud budete pro práci s grafikou používat jiný balíček, než je PyPlot
či Images
, nebo budete potřebovat další balíček doinstalovat, pak musíte upravit sedmý řádek souboru gitlab-ci.yml
. Tj. přidat váš balíček, aby byl k dispozici i v testovacím prostředí na gitlabu.
Řešení a odevzdání
Opět vytvořte větev odvozenou z větve assignment/02-ising
a nezvěte ji například solution/02-ising
.
Do solution/02-ising
vložte své řešení editací souboru ising.jl
případně přidáním testů do složky test
a ideálně modifikujte i ising.ipynb
a doplňte ho o vlastní pokusy.
Až budete se svým řešením spokojeni, vytvořte MR (to můžete i dříve, aspoň uvidíte výsledek testů, pokud je nespouštíte lokálně) a přiřaďte mě k němu jako assignee
.
Tímto aktem úkol odevzdáte.
Odkazy na literaturu
- [1] Ising, E. "Beitrag zur Theorie des Ferromagnetismus", Z. Phys., 31 (1), 1925, 253–258, doi:10.1007/BF02980577.
- [2] Brush, Stephen G. "History of the Lenz-Ising Model". Reviews of Modern Physics. 39 (4), 1967, 883–893, doi:10.1103/RevModPhys.39.883.