Subsections

1. Wstęp

1.1 Geneza i cel pracy

Jednym z powszechnych zastosowań komputerów jest ich użycie w badaniach symulacyjnych. Symulacja komputerowa jest metodą badawczą, stanowiącą połączenie między teorią a eksperymentem; często też nosi ona nazwę eksperymentu komputerowego. Znajduje ona zastosowanie w badaniach podstawowych (min. do weryfikacji modeli wspomagajcych teorię), w symulacjach dostarczających informacji niedostępnej bezpośrednio w eksperymencie fizycznym (np. symulacja galaktyk) oraz w badaniach służących identyfikacji i analizie złożonych obiektów (technologicznych i ekonomicznych).

Symulacje komputerowe często należą do klasy tzw. obliczeń wielkiej skali (large scale computations) i zwykle wymagają sprzętu komputerowego o wielkiej mocy obliczeniowej. Do klasy tej zalicza się między innymi symulacje procesów fizycznych, zwłaszcza modeli reprezentowanych przez wiele oddziałujących ze sobą cząstek.

Pierwsze komputery działały dosyć wolno i korzystały ze zbyt prymitywnych technik komunikacji na styku UŻYTKOWNIK -- MASZYNA (karta perforowana,drukarka) aby można było na bieżąco (On Line) śledzić wyniki symulacji i ingerować w jej przebieg. Obecnie dzięki ogromnemu wzrostowi szybkości działania komputerów wiele symulacji, które jeszcze dziesięć lat temu wymagały tygodniowych obliczeń, może być wykonanych w ciągu kilku godzin. Dochodzi do tego rozpowszechnienie się szybkich i relatywnie tanich komputerów nowej generacji - stacji roboczych (workstations) i stały rozwój interface'u graficznego. Powyższe fakty pozwalają stwierdzić, że obecnie jest możliwe i celowe śledzenie na bieżąco rezultatów i sterowanie symulacją komputerową prowadzoną metodą dynamiki molekularnej.

Przedmiotem mojej pracy było stworzenie narzędzia, pracującego na stacji roboczej i pozwalającego śledzić przebieg symulacji metodą dynamiki molekularnej, oraz nim sterować. Praca dyplomowa jest opisem powstałego programu i podsumowaniem doświadczeń związanych z jego tworzeniem.

1.2 Charakterystyka sprzętu

1.2.1 Ogólny opis stacji roboczych

Możliwość postawienia sobie na biurku komputera ma niezaprzeczalne zalety. Jesteśmy jego głównym użytkownikiem, możemy go sobie skonfigurować wedle własnych potrzeb i upodobań, możemy wreszcie zainstalować na nim odpowiednie dla nas oprogramowanie. Dobrze jeszcze, aby miał on monitor wysokiej rozdzielczości, najlepiej barwny, spory dysk magnetyczny, stację dyskietek elastycznych, mysz itd. Wszystkie powyższe warunki spełniane były od lat przez niektóre komputery osobiste. Ich wadą była stosunkowo niewielka moc obliczeniowa oraz brak naturalnych mechanizmów umożliwiających pracę w typowych (na świecie) sieciach komputerowych. Można było to ominąć dokupując i instalując odpowiednie układy pośredniczące oraz oprogramowanie. Niestety komputery osobiste w połowie lat osiemdziesiątych były zbyt słabe na pracę wielozadaniową, której zalety były znane użytkownikom dużych systemów komputerowych. Najważniejszą zaletą takiego trybu pracy jest możliwość uruchomienia wybranych programów w tle -- w ten sposób, aby nie blokowały one komputera i nie przeszkadzały użytkownikowi w innych działaniach. Do pewnego stopnia sytuację ratowały minikomputery (pracując w takich systemach operacyjnych jak: UNIX, VMS, RSX) czyli miniaturowe wersje dużych systemów. Te radziły sobie z wieloma użytkownikami i zadaniami naraz, ale w praktyce nie były w stanie zapewnić odpowiedniej szybkości obliczeń (choć i tak były o wiele szybsze od komputerów osobistych).

I wówczas nadszedł czas dla zupełnie nowej klasy komputerów - stacja robocza (ze znanych należy tu wymienić: HP-station, IBM RS/6000, DEC-station, SUN-stations, Silicon Graphics). Zaistniały one na rynku pod koniec lat osiemdziesiątych i spotkały się one z ogromnym zainteresowaniem. Powodem było znaczne zwiększenie mocy obliczeniowej komputerów tej klasy przy jednoczesnym utrzymaniu relatywnie niewysokiej ceny -- w stosunku do typowego minikomputera. Za dosyć dobrą stację roboczą trzeba było wtedy zapłacić kilkanaście tysięcy dolarów, ale otrzymywało się komputer wyposażony w szybki 32-bitowy procesor, kilka megabajtów pamięci operacyjnej oraz monitor o wysokiej rozdzielczości. Moc obliczeniowa ówczesnych stacji roboczych osiągała już kilka MIPS (milionów operacji na sekundę). (Dzisiaj czołówka jednoprocesorowych stacji roboczych osiąga rzędu 100 Mips i 20 - 30 Mflops czyli milionów operacji zmiennoprzecinkowych na sekundę). Łączą one w sobie zalety dużych systemów (możliwość jednoczesnej obsługi wielu zadań i użytkowników) oraz komputerów osobistych (względnie niska cena, niewielkie gabaryty komputera). Bardzo szybko okazało się, że przewyższają one minikomputery przy porównaniu stosunku wydajnośćena dla obydwu komputerów. To porównanie wypada jeszcze bardziej na korzyść workstation, jeśli uwzględni się różnice cen oprogramowania warunkującego profesjonalne wykorzystanie komputera.

1.2.2 Stacja robocza Sun

Jednym z liderów rynku stacji roboczych jest firma Sun Microsystems, której produkty należą do najbardziej popularnych. Już w połowie lat osiemdziesiątych komputery Sun-3 były znaczącym sukcesem, ale dopiero pojawienie się modelu SPARC-station 1 z procesorem RISC (Reduced Instruction Set Computer) pobiło wszelkie rekordy w tej klasie -- był to prawdziwy przebój rynkowy , o wielkiej ilości sprzedanych egzemplarzy. Najprostszy model SPARC-station SLC posiada monochromatyczny monitor o rozdzielczości $1152 \times 900$ punktów, 100 punktów na cal, współczynniku geometrii obrazu 1:1 oraz częstotliwości odświeżania obrazu 66 Hz. Pozwala to osiągnąć bardzo wyraźny i stabilny obraz. Obecnie firma ta proponuje całą serię komputerów SPARC-station 2, o następujących parametrach: 28.5 Mips, 4 Mflops, pamięć operacyjna do 96 megabajtów, zaś dyskowa -- do 7.6 gigabajta. Do tego dochodzi bardzo dobra grafika 24-bitowa (w modelach 2GS i 2GT). Monitor o najlepszych możliwościach posiada stacja SPARCstation 2GT. Przy rozdzielczości $1152 \times 900$ może on wyświetlać 256 kolorów spośród 16,7 miliona. Sprzętowa realizacja operacji graficznych umożliwia np. rysowanie dwuwymiarowych odcinków z prędkością 500 tys lub cieniowanych wielokątów z prędkośscią 100 tys.

1.3 Charakterystyka oprogramowania

1.3.1 Ogólny opis oprogramowania stacji roboczych

Rosnące zapotrzebowanie na stacje robocze spowodowało zainteresowanie się tym rynkiem przez wielu producentów oprogramowania. Wskutek tego w niedługim czasie zaczęły pojawiać się wersje znanych (np. z komputerów klasy PC) programów użytkowych (programy graficzne, arkusze kalkulacyjne, kompilatory języków programowania i inne) przeznaczone dla tej klasy komputerów. Większość stacji roboczych pracuje pod kontrolą systemu Unix [7,13,9,12]. Oznacza to dużą łatwość w przystosowaniu oprogramowania do poszczególnych typów komputerów. Trwają bardzo intensywne prace nad stworzeniem standardów oprogramowania. Przykładem sukcesu w tej dziedzinie jest np. opracowany przez firmę Sun Microsystems pakiet NFS (Network File System), zarządzający zasobami dyskowymi komputerów pracującymi w sieci.

Tworzenie własnych programów aplikacyjnych na workstation nie byłoby sprawą łatwą, gdyby producenci tych komputerów nie zadbali o stworzenie narządzi do budowania programów z ``elementów prefabrykowanych''. Dotyczy to zwłaszcza procedur graficznych -- bez tego typu ułatwień trudno byłoby wykorzystać w pełni możliwości graficzne komputerów. Poza tym dostępne są kompilatory rozmaitych języków programowania (C, Fortran, C++ i inne); a za pośrednictwem ogólnoświatowej sieci komputerowej można uzyskać dostęp do wielkiej ilości oprogramowania public domain dla wszelkich typów komputerów i systemów operacyjnych.

Stacje robocze z reguły pracują w lokalnych sieciach komputerowych Ethernet. Sprzyja temu wyposażenie ich w odpowiednie układy sprzęgające (ang. interface) oraz oprogramowanie sieciowe. Obydwa wymienione elementy komputerów akceptują protokół TCP/IP (Transmission Control Protocol/Internet Protocol -- niekwestionowany standard oprogramowania sieciowego). Szybka wymiana informacji pomiędzy odległymi ośrodkami jest dzisiaj warunkiem efektywnej pracy -- nie tylko naukowej. Współczesne programy komunikacyjne (np. ftp -- File Transfer Protocol) umożliwiają bardzo szybkie przesyłanie wielkich plików danych. Nie ma jeszcze ustalonego standardu dla transmisji cyfrowego zapisu dźwięku lub obrazu, ale należy się go spodziewać w niedalekiej przyszłości.

1.3.2 System okien - X-Windows

Stacje robocze posiadają jeden z najlepszych i najbardziej nowoczesnych architektur graficznych. Jest to system graficzny X-Windows [9,4]. W roku 1984 w Massachusetts Institute of Technology (MIT), przystąpiono do standaryzacji oprogramowania, dostarczanego przez różnych producentów tak, aby mogły pracować w jednym systemie okien. Po dwóch latach pracy pojawiła się na rynku wersja X-Windows Version 10 Relase 4, która od razu zdobyła dużą popularność i zainteresowała największych producentów. Kiedy w roku 1988 MIT wypuścił X-Windows Version 11, zawiązało się konsorcjum, w skład którego weszły, między innymi, takie firmy jak: AT&T, Sun, HP, DEC. To ugrupowanie stawiało sobie za cel standaryzację poleceń wejścia-wyjścia przez wykorzystanie X-Windows X11.

Ekran monitora, a dokładnie X-terminala można podzielić na dowolną liczbę niezależnych okien, w których można uruchamiać różne aplikacje, przy czym zapewniona jest ich niezależność oraz współbieżność. Utworzone okna nie mają sztywnych rozmiarów i nie są na stałe przypisane jednemu miejscu. Można, dowolnie wybranemu oknu, zmieniać wymiary, przesuwać je, zamykać i otwierać. Podstawowym sposobem komunikacji z systemem jest użycie myszy.

W systemie X-Windows rozróżniamy dwie współpracujące ze sobą grupy oprogramowania: aplikację zwaną X-klient (X-client) oraz oprogramowanie systemowe zwane X-usługodawcą (X-server). Komunikacja pomiędzy nimi odbywa się zgodnie z przyjętymi zasadami zwanymi X-protokołem. X-usługodawca odpowiada za kontrolę nad terminalem, tzn. ekranem, myszą i klawaiaturą.

Programem, który odpowiada za unikanie konfliktów przy obsłudze okien, steruje wymiarami, otwiera nową aplikację, jest specyficzny X-klient, zarządca okien.

Jeśli X-klient zechce wykonać np. rysunek, wydaje specjalne polecenie do służącego X-usługodawcy, aby ten zrealizował dyspozycje. W tym samym czasie on sam, nie czekając na rezultat , podąża dalej. Ponieważ X-protokół można zaimplementować na dowolny system operacyjny oraz komputery o rozbieżnych architekturach, to X-klient i X-usługodawca mogą być wykonywane na różnych maszynach. Dlatego X-Windows tworzy w ramach potrzeb sieć współdziałających ze sobą różnych komputerów (np. od superkomputerów po stacje robocze). Zaletą takiego rozwiązania jest to, że możemy korzystać z przetwarzania rozproszonego i uruchamiać własne polecenia nawet na bardzo odległych maszynach.

Niezależnie od prac prowadzonych przez MIT, firma Sun Microsystems opracowała system okien NeWs (Networkextensible Window System) i wykorzystuje je w swoich produktach. Główną cechą jest to, że w dużym stopniu system opiera się na języku PostScript. Dodatkowo został rozszerzony o brakujące mechanizmy transmisji, okien itp.

Mamy więc dwa najbardziej liczące się standardy wejścia-wyjścia: X-Windows i NeWs. Dopiero opierając się o jeden z nich możemy stworzyć całe środowisko graficzne. Istnieją dwa poważne środowiska graficzne: Motif (wykorzystuje przede wszystkim system X-Windows) -- który popiera i rozwija grupa OSF (Open Software Foundation) oraz Open Look (jednocześnie system X-Windows i NeWs) -- za którym się opowiada UNIX International.

1.3.2.1 Biblioteka -- XView i Xlib

X-klient to program stworzony przez programistę przy użyciu specjalnej biblioteki. Dostarcza procedury do kodowania i rozkodowania poleceń X-protokołu. Biblioteka ta nosi nazwę Xlib i składa się z szeregu podprogramów. Napisana jest w języku programowania C. Xlib jest pełnę bibliotekę, zawierającą bardzo dużą ilość poleceń. Programista nie potrafiłby korzystać z nich wszystkich. Dlatego dostarczona została biblioteka narzędziowa Xtoolkit ze standardowymi obiektami oraz ze sposobem posługiwania nimi. Sam Xtoolkit pobiera niezbędne dane z Xlib.

Innym sposobem stworzenia aplikacji jest możliwość korzystania z pakietu XView, który operuje dwoma częściami: zadeklarowanymi obiektami (okna, przyciski, menu, pola edycyjne, pola graficzne itp. ) oraz sterowaniem pomiędzy nimi. Każdy obiekt ma zestaw właściwych mu atrybutów, które decydują o wyglądzie obiektu na ekranie, jego reakcji na zdarzenia itp. Obiekty są od siebie zależne -- tworzą strukturę hierarchiczną. Przykadowymi atrubutami pola edycyjnego są np. typ edytowanej danej, rozmiar pola na daną, tekst objaśniający, wyświetlany obok okna, funkcja uruchomiana po wpisaniu do pola wartości, itd. Powiązania między obiektami definiuje się przy ich tworzeniu.

Operacje na tych obiektach są realizowane za pomocą prostego języka, opartego na języku C. Składa się on z wywołań kilku funkcji o zmiennej liczbie parametrów. Oto opis podstawowych funkcji:

Jeżeli obiekty zaproponowane przez bibliotekę XView nie zadowalają nas to można równocześnie wykorzystywać funkcje z biblioteki Xlib.

Struktura programu pracującego w środowisku graficznym XView jest następująca: Z pomocą funkcji xv_create() tworzymy określone obiekty nadając im określone atrybuty (które można zmieniać w trakcie działania programu za pomocą funkcji xv_set()) oraz określamy występujące między nimi powiązania (tworzymy szkielet programu), a następnie wywołujemy funkcję xv_main_loop(), która uruchamia odpowiednie fragmenty kodu, odbiera i przesyła komunikaty do systemu. Należy jednak nadmienić, że poszczególne funkcje nie są wywoływane z funkcji napisanych przez użytkownika, lecz z wnętrza XView. Wartością niektórych atrybutów są funkcje, które są wywoływane w zależności od stanu obiektu; pozwala to zdefiniować reakcje programu na różne zdarzenia. Oto kilka przykładowych obiektów z których powstaje program:

FRAME
-- główne okno programu, w którym można umieścić większość dostępnych obiektów. Ramka ta posiada przycisk umożliwiający zwinięcie jej w ikonę, oraz narożniki zmiany rozmiaru.

FRAME_CMD
-- pomocnicze okno (które można przyszpilić), zawierające najczęściej: opcje programu, krótkie informacje, przyciski decyzyjne,suwaki itp.

PANEL
-- zespół obiektów umożliwiających wprowadzanie danych na różne sposoby. Istnieje wiele typów tych obiektów np.:

FONT
-- umożliwia dostęp do czcionek różnych rodzajów i wielkości.

CANVAS
-- graficzne pole edycyjne, można w nim operować wykorzystując funkcje Xlib.

CMS
-- paleta barw, można ją przypisać graficznemu obszarowi edycyjnemu.

ICON
-- ikona programu widoczna po minimalizacji; program Icon Editor umożliwi nam stworzenie własnej ikony.

MENU
- menu z opcjami i odpowiadającymi im funkcjami.

1.4 Miejsce i znaczenie symulacji molekularnej

Symulacja komputerowa w niniejszej pracy ograniczona jest do tzw. metody cząstek to jest metody, w której symulowane modele składają się z układów oddziałujących cząstek. Zakres układów symulowanych tą metodą jest bardzo szeroki: od układów molekularnych do galaktyk (w których gwiazdy są traktowane jako cząstki) i większych fragmentów wszechświata (w których galaktyki są traktowane jako cząstki) [8]. Metoda cząstek w zakresie atomowym nosi nazwę symulacji molekularnej (molecular simulation, MS).

Metody symulacji molekularnej można podzielić na statystyczne i deterministyczne.

Metody statystyczne dają przede wszystkim informację konfiguracyjną tj. wynikającą z położenia cząstek. Zmiana konfiguracji jest dokonywana przy uwzględnieniu prawdopodobieństwa takiego procesu. Do metod tych zaliczyć należy przede wszystkim metody Monte Carlo (MC) [3].

Metody deterministyczne (a wśród nich metoda dynamiki molekularnej, MD), pozwalają obserwować zachowanie się systemu w czasie. Umożliwiają one również badanie procesów nierównowagowych.

Zagadnienia dotyczące symulacji molekularnej zostały opisane w wielu pracach. Ja korzystałem przede wszystkim z [3,17].

Na początku załóżmy, że istnieje układ N cząstek, oddziałujących ze sobą w sposób określony przez zadaną funkcję potencjału. Zwykle zakłada się oddziaływania dwucząsteczkowe $ u(r_{ij})$, zależne od odległości $r_{ij}$ cząstek. Układ cząstek charakteryzuje funkcja energii całkowitej (hamiltonian) H, będący sumą energii kinetycznej i potencjalnej. Stan układu N cząstek jednoznacznie jest scharakteryzowany przez zmienne stanu $q_{i}$ (położenia) i $p_{i}$ (pędy):

\begin{displaymath}\hat{p}=(p_{1},\ldots,p_{N})\end{displaymath}


\begin{displaymath}\hat{q}=(q_{1},\ldots,q_{N})\end{displaymath}

Zbiór stanów określa przestrzeń fazową, w której układ ewoluuje. Rysunek 1.1 [17] przedstawia ogólny schemat symulacji molekularnej. Podczas symulacji zachodzi ewolucja układu od założonej konfiguracji początkowej do stanu końcowego.

Rysunek 1.1: Algorytm symulacji molekularnej
\begin{figure}\unitlength=0.8mm\linethickness{0.4pt}
\begin{picture}(125.33,1...
...0.00)[lt]{5}}
\put(10.00,102.33){\vector(1,0){69.67}}
\end{picture}
\end{figure}

Po wybraniu konfiguracji początkowej następuje ewolucja układu zgodnie z jedną z wybranych metod (MD lub MC). Aby uniezależnić układ od warunków początkowych i osiągnąć stan równowagi, wykonujemy pewnę ilość jałowych konfiguracji (kroków) początkowych. Począwszy od określonej konfiguracji na podstawie analizy wielkości mikroskopowych(pęd cząstek, położenie) wyznaczamy parametry makroskopowe układu.

1.4.1 Metoda Monte-Carlo

Metoda Monte-Carlo (MC) [3] jest stosowana do modelowania matematycznego procesów zbyt złożonych (obliczanie całek, łańcuchy procesów statystycznych), aby można było przewidzieć ich wyniki za pomocą podejścia analitycznego. Istotną rolę w metodzie MC odgrywa losowanie (wybór przypadkowy) wielkości charakteryzujących proces, przy czym losowanie dotyczy rozkładów znanych skądinąd (np. z badania procesów prostszych lub niekiedy -- z odpowiednio uzasadnionych lub oczywistych założeń). Typowym przykładem może być modelowanie wyniku zderzenia cząstki o wysokiej energii z jądrem złożonym, gdzie każdy akt zderzenia elementarnego (z pojedynczym nukleonem jądra) modelowany jest oddzielnie poprzez losowanie liczby, rodzaju, kąta emisji, energii itp. cząstek wtórnych emitowanych w wyniku takiego zderzenia. Następnym etapem jest ``modelowanie losu'' każdej z cząstek wtórnych (w wyniku kolejnego losowania prawdopodobieństwa oddziaływania lub wyjścia z jądra). Kontynuując taką procedurę można otrzymać pełny opis ``sztucznie generowanego'' procesu złożonego. Po zebraniu dostatecznie dużej liczby takich informacji można zestawić ich charakterystyki z obserwowanymi wynikami doświadczalnymi, potwierdzając lub negując słuszność poczynionych w całej procedurze założeń.

1.4.2 Dynamika molekularna -- schemat metody

Symulację przeprowadza się według schematu 1.1. W każdym kroku czasowym n obliczana jest dla każdej cząstki i działająca na nią sumaryczna siła \(\vec{F}_{i}^{n}\), pochodząca od pozostałych cząstek. Następnie korzystając z obliczonych sił oraz mając położenia cząstek w poprzednim kroku oblicza się nowe położenia i pędy każdej cząstki dla kroku czasowego \(n+1\), numerycznie rozwiązując równania ruchu Newtona. Po wyznaczeniu parametrów mikroskopowych oblicza się wielkości makroskopowe: temperaturę, energię kinetyczną i całkowitą oraz ewentualnie inne (ciepło właściwe, wielkości transportowe jak współczynnik dyfuzji, przewodność elektryczna i cieplna, lepkość, czy właściwości konfiguracyjne jak czynnik strukturalny i radialna funkcja dystrybucyjna).