Cviření
Projekt: simulace molekulární dynamiky
- kód by měl dodržovat zásady čistého kódu a měl by být dobře zdokumentován
- nejměné po každém cvičení commitujte změny
- ideálně po každém cvičení odesílejte pull request na GitHub
Cíl projektu
Cílem projektu je napsat kód pro simulaci molekulární dynamiky (MD), která modeluje interakce mezi atomy v daném systému a umožní prozkoumat vlastnosti systému za různých podmínek. Tento projekt pokryje pokročilé koncepty programování včetně pokročilých operací s poli, dynamické alokace, pure a přetížených funkcí, modulů, objektově orientovaného programování (OOP), funkčního programování (FP) a coarrays pro paralelní zpracování. Budete používat Git pro správu verzí a budete pravidelně odesílat pull requesty na GitHub.
Cvičení 1 - Git
- projděte a zkuste si příklady z kapitol 1-4 na https://git-scm.com/book/cs/v2
- Project začněte klonování repozitáře:
git clone https://github.com/msvbd/fortran_2_project_md
Cvičení 2 - třída Atom
- zopakujte si uživatelský typ
type
, projděte si kapitolu “Objektově orientované programování v jazyce Fortran” a vytvořte tříduAtom
pro reprezentaci atomu - třída
Atom
bude mít pro začátek následující atributy:- polohový vektor
r
(2D nebo 3D pole) - rychlost
v
(2D nebo 3D pole) - síla
f
(2D nebo 3D pole) - hmotnost
m
- polohový vektor
Cvičení 3 - inicializace
- vytvořte novou třídu
Box
pro reprezentaci simulačního boxu - třída
Box
bude mít následující atributy:- rozměry boxu
L
(2D nebo 3D pole) - počet částic
n
- pole částic
atoms
(pole třídAtom
)
- rozměry boxu
- třída
Box
bude mít následující metody:init_atoms
pro inicializaci poloh a rychlostí částic
Cvičení 4 - výpočet síly
- vytvořte nový modul pro výpočet sil mezi částicemi
- modul bude mít následující funkce:
-
init_force
pro inicializaci výpočtu sil - funkce bude jako vstup brát funkci pro výpočet síly mezi dvěma částicemi -
compute_force
pro výpočet sil mezi dvěma částicemi - argumentem budou dvě částice a výstupem síla -
compute_forces
pro výpočet sil mezi všemi částicemi v boxu - funkce spočátá síly částic -
pří výpočtu vzdálenosti je třeba brát v úvahu periodické okrajové podmínky (https://en.wikipedia.org/wiki/Periodic_boundary_conditions) a počítat interakci od nejbližšího obrazu
-
všechny funkce by měly být pure a nemělo by záležet zda počítáme ve 2D nebo 3D
-
napište funkce lennard_jones, která bude jako argumet brát vzdálenost mezi částicemi a vracet sílu mezi nimi
-
Cvičení 5 - integrace pohybových rovnic
- v třídě
Box
vytvořte metodu pro integraci pohybových rovnic- Implementujte Verletův rychlostí algoritmus pro řešení pohybových rovnic [https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet](https://en.wikipedia.
org/wiki/Verlet_integration#Velocity_Verlet)
- funce budou muset být dvě, jedna pro výpočet polohy a druhá pro výpočet rychlosti
- funkce pro výpočet polohy musí brát v úvahu periodické okrajové podmínky (https://en.wikipedia.org/wiki/Periodic_boundary_conditions)
- pro výpočet polohy a rychlosti můžete využít znalosti z částí “Funkcionální programování v jazyce Fortran” nebo použít funkci
elemental
- vytvořte subroutinu
update
pro aktualizaci poloh a rychlostí částic- funkce bude brát jako vstup pole částic
- funkce bude kombinovat funkce pro výpočet sil a integraci pohybových rovnic
- Implementujte Verletův rychlostí algoritmus pro řešení pohybových rovnic [https://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet](https://en.wikipedia.
org/wiki/Verlet_integration#Velocity_Verlet)
Cvičení 7 - paralelní zpracování
- Vytvořte paralelní verzi simulace s využitím coarrays pro distribuované zpracování.
- nejpomalší části kódu je výpočet sil mezi částicemi, zkuste tuto část paralelizovat
Cvičení 8 - měření a výstup
-
Implementujte modul pro zápis výsledků simulace do souboru.
-
vytvořte funkce či subroutiny pro výpočet a výpist statistik, např. teploty a energie. Můžete také tlaku.
- statistiky zapisujte do souboru a zobrazte v grafu
-
dále můžete implementovat výpis poloh částic do souboru .xyz, který lze zobrazit v programu VMD
- polohy zapisujte do souboru .xyz
- výsledky simulace zobrazte v programu VMD a zkuste si vytvořit animaci