Płyny i stopy są aktywnymi wektorami transportu chemicznego i fizycznego w środowiskach naturalnych. Podwyższone tempo dyfuzji atomowej sprzyja wymianom chemicznym i reakcjom, niska lepkość w połączeniu ze zmienną wypornością sprzyja dużemu transportowi masy, a relacje gęstości między kryształem a stopem sprzyjają warstwowaniu wewnątrz ciał planetarnych. Brak sieci okresowej, typowo wysokie temperatury wymagane do osiągnięcia stanu stopionego oraz trudności z hartowaniem sprawiają, że eksperymentalne wyznaczenie szeregu oczywistych właściwości, takich jak gęstość, dyfuzja i lepkość, jest niezwykle wymagające. Trudności te sprawiają, że alternatywne metody obliczeniowe stanowią potężne i użyteczne narzędzia do badania tej klasy materiałów.
Wraz z rozwojem mocy obliczeniowej i dostępnością superkomputerów, do badania stanu dynamicznego niekrystalicznego układu atomistycznego stosuje się obecnie dwie główne techniki numerycznych symulacji atomistycznych: metodę Monte Carlo1 oraz dynamikę molekularną (MD)1,2. W symulacjach Monte Carlo przestrzeń konfiguracyjna jest próbkowana losowo; metody Monte Carlo wykazują liniową skalowalność w obliczeniach równoległych, jeśli wszystkie obserwacje z próbek są od siebie niezależne. Jakość wyników zależy od jakości generatora liczb pseudolosowych oraz reprezentatywności próbkowania. Metody Monte Carlo wykazują liniową skalowalność w paralelizacji, jeśli próbkowanie jest niezależne. W dynamice molekularnej (MD) przestrzeń konfiguracyjna jest próbkowana za pomocą zależnych od czasu trajektorii atomowych. Punktem wyjścia jest określona konfiguracja, a trajektorie atomowe są obliczane poprzez całkowanie newtonowskich równań ruchu. Siły międzyatomowe mogą być obliczane przy użyciu modelowych potencjałów międzyatomowych (w klasycznym MD) lub metod pierwszych zasad (w MD ab initio, czyli z pierwszych zasad). Jakość wyników zależy od długości trajektorii oraz jej zdolności do unikania uwięzienia w minimach lokalnych.
Symulacje dynamiki molekularnej zawierają ogromną ilość informacji, wszystkie związane z zachowaniem dynamicznym układu. Właściwości uśrednione termodynamicznie, takie jak energia wewnętrzna, temperatura i ciśnienie, są stosunkowo standardowe do obliczenia. Można je wyodrębnić z plików wyjściowych symulacji i uśrednić, natomiast wielkości bezpośrednio związane z ruchem atomów, jak i z ich wzajemnymi relacjami, muszą zostać obliczone po wyekstrahowaniu położeń i prędkości atomów.
W związku z tym ogromny wysiłek poświęcono wizualizacji wyników; obecnie na różnych platformach dostępnych jest wiele pakietów, zarówno otwartoźródłowych, jak i komercyjnych [Ovito3, VMD4, Vesta5, Travis6, itd.]. Wszystkie te narzędzia do wizualizacji efektywnie przetwarzają odległości międzyatomowe, a co za tym idzie, umożliwiają sprawne obliczanie funkcji rozkładu radialnego oraz współczynników dyfuzji. Różne grupy przeprowadzające wielkoskalowe symulacje dynamiki molekularnej dysponują autorskim oprogramowaniem do analizy innych właściwości wynikających z symulacji, które czasem jest udostępniane jako shareware lub w innych formach ograniczonego dostępu dla społeczności, a niekiedy ma ograniczony zakres i zastosowanie w ramach konkretnych pakietów. W niektórych z tych pakietów opracowano i zaimplementowano zaawansowane algorytmy służące do wyodrębniania informacji o wiązaniach międzyatomowych, wzorcach geometrycznych i termodynamice3,4,5,6,7, itd.
W niniejszej pracy proponujemy pakiet UMD – otwartoźródłowy pakiet napisany w języku Python do analizy wyników symulacji dynamiki molekularnej. Pakiet UMD umożliwia obliczanie szerokiego zakresu właściwości strukturalnych, dynamicznych i termodynamicznych (Rysunek 1). Pakiet jest dostępny za pośrednictwem strony GitHub (https://github.com/rcaracas/UMD_package) oraz dedykowanej strony (http://moonimpact.eu/umd-package/) projektu ERC IMPACT jako pakiet w otwartym dostępie.
Aby uczynić to rozwiązanie uniwersalnym i łatwiejszym w obsłudze, nasze podejście polega na tym, aby najpierw wyodrębnić z pliku wyjściowego właściwego przebiegu dynamiki molekularnej wszystkie informacje dotyczące stanu termodynamicznego oraz trajektorii atomowych. Informacje te są przechowywane w dedykowanym pliku, którego format jest niezależny od oryginalnego pakietu MD, w którym przeprowadzono symulację. Pliki te nazywamy plikami „umd”, co oznacza Universal Molecular Dynamics. Dzięki temu nasz pakiet UMD może być z łatwością wykorzystany przez każdą grupę zajmującą się metodami ab initio z dowolnym oprogramowaniem, przy minimalnym nakładzie pracy związanej z adaptacją. Jedynym wymogiem korzystania z obecnego pakietu jest napisanie odpowiedniego parsera, który przetworzy dane wyjściowe konkretnego oprogramowania MD na format pliku umd, jeśli taki parser jeszcze nie istnieje. Obecnie udostępniamy takie parsery dla pakietów VASP8 oraz QBox9.

Rycina 1: Schemat blokowy biblioteki UMD.
Właściwości fizyczne zaznaczono kolorem niebieskim, a główne skrypty Python wraz z ich opcjami kolorem czerwonym. Kliknij tutaj, aby wyświetlić powiększoną wersję tej ryciny.
Pliki umd są plikami ASCII; typowe rozszerzenie to „umd.dat”, choć nie jest ono obowiązkowe. Wszystkie komponenty analityczne potrafią odczytywać pliki ASCII w formacie umd, niezależnie od rzeczywistego rozszerzenia nazwy. Jednakże niektóre skrypty automatyczne, zaprojektowane do szybkiego przeprowadzania statystyk na wielką skalę w wielu symulacjach, poszukują konkretnie plików z rozszerzeniem umd.dat. Każda właściwość fizyczna jest zapisana w jednej linii. Każda linia zaczyna się od słowa kluczowego. Dzięki temu format jest wysoce adaptacyjny i pozwala na dodawanie nowych właściwości do pliku umd, zachowując jednocześnie jego czytelność pomiędzy wersjami. Pierwsze 30 linii pliku umd z symulacji pyrolitu przy 4,6 GPa i 3000 K, wykorzystanej poniżej w dyskusji, przedstawiono na Ryc. 2.

Rysunek 2: Początek pliku umd opisującego symulację ciekłego pyrolitu przy 4.6 GPa i 3000 K.
Za nagłówkiem następuje opis każdego migawki (snapshot). Każda właściwość jest zapisana w jednej linii i zawiera nazwę właściwości fizycznej, wartość(y) oraz jednostki, oddzielone od siebie spacjami. Kliknij tutaj, aby wyświetlić powiększoną wersję tego rysunku.
Wszystkie pliki umd zawierają nagłówek opisujący zawartość komórki symulacyjnej: liczbę atomów, elektronów i typów atomowych, a także szczegółowe informacje dla każdego atomu, takie jak jego typ, symbol chemiczny, liczba elektronów walencyjnych i masa. Pusta linia oznacza koniec nagłówka i oddziela go od głównej części pliku umd.
Następnie szczegółowo opisany jest każdy krok symulacji. Najpierw podawane są chwilowe parametry termodynamiczne, z których każdy znajduje się w osobnej linii, określając (i) nazwę parametru, np. energię, naprężenia, równoważne ciśnienie hydrostatyczne, gęstość, objętość, parametry sieci itp., (ii) jego wartość(y) oraz (iii) jednostki. Następnie następuje tabela opisująca atomy. Linia nagłówka zawiera różne miary, takie jak pozycje kartezjańskie, prędkości, ładunki itp. oraz ich jednostki. Potem każdy atom jest szczegółowo opisany w jednej linii. W grupach po trzy, odpowiadających trzem osiom x, y, z, wpisy stanowią: pozycje zredukowane, pozycje kartezjańskie złożone do komórki symulacyjnej, pozycje kartezjańskie (uwzględniające fakt, że atomy mogą przejść przez kilka komórek elementarnych podczas symulacji), prędkości atomowe oraz siły atomowe. Dwie ostatnie pozycje to wartości skalarne: ładunek i moment magnetyczny.
Za prawidłowe funkcjonowanie całego pakietu odpowiadają dwie główne biblioteki. Biblioteka umd_process.py zajmuje się plikami umd, na przykład ich odczytywaniem i drukowaniem. Biblioteka crystallography.py przetwarza wszystkie informacje związane z właściwą strukturą atomową. Podstawową filozofią biblioteki crystallography.py jest traktowanie sieci jako przestrzeni wektorowej. Parametry komórki elementarnej wraz z ich orientacją reprezentują wektory bazy. „Przestrzeń” posiada szereg atrybutów skalarnych (objętość właściwa, gęstość, temperatura i konkretna liczba atomów), właściwości termodynamiczne (energia wewnętrzna, ciśnienie, ciepło właściwe itp.) oraz szereg właściwości tensorowych (naprężenie i sprężystość). Przestrzeń ta jest wypełniona atomami. Klasa „Lattice” definiuje ten zespół, a także zawiera kilka krótkich obliczeń, takich jak objętość właściwa, gęstość, wyznaczanie sieci odwrotnej z bezpośredniej itd. Klasa „Atoms” definiuje atomy. Są one charakteryzowane przez szereg właściwości skalarnych (nazwa, symbol, masa, liczba elektronów itp.) oraz szereg właściwości wektorowych (położenie w przestrzeni, albo względem bazy wektorowej opisanej w klasie Lattice, albo względem uniwersalnych współrzędnych kartezjańskich, prędkości, siły itp.). Poza tymi dwiema klasami biblioteka crystallography.py zawiera szereg funkcji służących do przeprowadzania różnych testów i obliczeń, takich jak odległości atomowe czy mnożenie komórek. Dołączony jest również układ okresowy pierwiastków w formie słownika.
Różne komponenty pakietu umd generują kilka plików wyjściowych. Co do zasady są to pliki ASCII, w których wszystkie wpisy są oddzielone tabulatorami, a ich struktura jest maksymalnie intuicyjna. Na przykład zawsze jasno wskazują one właściwość fizyczną oraz jednostki. Pliki umd.dat w pełni spełniają tę zasadę.