Subsections

2. Podręcznik użytkownika programu MONITOR

Program MONITOR służy do śledzenia wyników symulacji molekularnej. Szczegóły impementacyjne oraz organizacja programu zostaną przedstawione w części dokumentacyjnej niniejszej pracy. Rozdział ten ma na celu opisanie sposobu efektywnego posługiwania się programem MONITOR.

Wszelkie rysunki zawarte w pracy - prezentujące wygląd programu głównego, zostały stworzone podczas pracy programu w środowisku OPENWINDOWS wersja 2.0. Program może działać bez żadnych problemów w innych środowiskach, np. X-WINDOWS wersja 5, jednak wygląd poszczególnych elementów jak i samego programu głównego może się różnić od tego, który jest pokazany w mojej pracy.

Generalne założenia towarzyszące projektowaniu programu MONITOR dotyczyły jego niezależności i możliwości współpracy z różnymi programami symulacyjnymi MD. Zmiany wprowadzone do programu MD powinny być jak najmniejsze i skupione w jednym fragmencie kodu. Zmodyfikowany program symulacyjny powinien również pracować w trybie tradycyjnym ( tj. bez obecności programu MONITOR). Program MONITOR może być uruchomiony i przerwany w dowolnej chwili pracy programu symulacyjnego.

W trakcie śledzenia symulacji, zbierania i wyświetlania wyników, programy komunikują się poprzez plik. Sposób ten został wybrany ze względu na to, że program symulacyjny i tak produkuje plik z danymi potrzebnymi do ew. dalszej obróbki Off line. Jest to plik ASCII, w którym kolumny opisują przebiegi czasowe poszczególnych zmiennych. Każda kolumna może być opatrzona nazwą (użytą w opisie osi wykresów).

2.1 Opis modułu prezentacji wyników


2.1.1 Format pliku wejściowego

Program symulacyjny, zapisuje wyniki symulacji do pliku tekstowego. Plik ten jest następnie czytany i przetwarzany przez program MONITOR. Format pliku jest następujący
;1-a linia komentarza
;2-a linia komentarza
...
;n-ta linia komentarza
<nazwa 1-ej kolumny> <nazwa 2-ej kolumny> ... <nazwa m-tej kolumny>
<dana 1.1>           <dana 1.2>           ... <dana 1.m>
<dana 2.1>           <dana 2.2>           ... <dana 2.m>
...                  ...                          ...
<dana n.1>           <dana n.2>           ... <dana n.m>
<eof>
Początkowe linie zaczynające się znaku ``;'' są traktowane jako komentarz i są opuszczane podczas czytania pliku.

Bezpośrednio za liniami komentarza, znajduje się wiersz z nazwami kolumn. Poszczególne nazwy są oddzielone białymi znakami. Program MONITOR po wczytaniu tej linijki tworzy na jej podstawie w ramce z nazwami osi przyciski o nazwie <nazwa 1-ej kolumny> , <nazwa 2-ej kolumny> , ..., <nazwa m-tej kolumny> (funkcja read_names_of_column()). Ponieważ nazwy kolumn są rozdzielane białymi znakami, dlatego w nazwie kolumny nie może wystąpić żaden biały znak.

Następne linijki, aż do końca pliku zawierają dane. Dane te są pogrupowane kolumnami tzn. w kolumnie o nazwie <nazwa i-tej kolumny> znajdują się liczby charakteryzujące wymieniony ``i-ty'' parametr symulacji. Dane te są czytane przez program i na ich podstawie rysowany jest wykres.

2.1.2 Uruchomienie programu

Program MONITOR uruchamiamy poleceniem: monitor [<plik z danymi>] [-<PID>]

Po uruchomieniu, program ładuje automatycznie podany plik, inicjuje połączenie przez kolejkę komunikatów z procesem o numerze <PID> i wyświetla fragment wykresu utworzonego przez punkty, których współrzędne znajdują się w pliku wejściowym w kolumnie pierwszej oraz automatycznie przechodzi do stanu Off line-Unfixed (podrozdział 2.1.4). Jeżeli przy wywołaniu programu MONITOR nie podano nazwy pliku z danymi, pierwszą czynnością powinno być załadowanie pliku w sposób podany w dalszej części opracowania.

Rysunek 2.1 pokazuje wygląd głównego okna programu. Okno to składa się z następujących elementów:

Rysunek: Główne okno programu MONITOR
=13cm \epsffile{rys1.ps}

2.1.3 Ogólny opis opcji programu

Sterowanie programem wyświetlającym odbywa się za pomocą przyszpilanego menu, dostępnego po naciśnięciu w obszarze graficznym prawego klawisza myszy. Aby wybrać daną pozycję należy nakierować kursor na daną pozycję i przycisnąć lewy klawisz myszy. Jeżeli dana pozycja posiada przy swojej nazwie symbol grota strzałki oznacza to, że do tego symbolu jest dołączone podmenu. Naciskając prawy klawisz myszy, powodujemy rozwinięcie podmenu. Naciśnięcie lewego klawisza myszy na wymienionej pozycji powoduje wybranie pierwszego elementu podmenu, bez rozwijania go.Główne menu ma 5 opcji. Oto ich ogólny opis:

2.1.3.1 Opcja On line Off line

Opcja ta powoduje zmianę statusu programu z Off line, na On line (śledzenie pliku danych) i na odwrót.

2.1.3.2 Opcja Fixed / Unfixed

Opcja ta powoduje zmianę statusu wykresu z Unfixed (zmienna skala wykresu, dostosowująca się do danych) na Fixed (stała skala wykresu) i na odwrót.

2.1.3.3 Opcja Load

Służy ona do wczytania pliku z danymi. Otwiera okienko pomocnicze, w którym wpisujemy nazwe pliku z danymi. Po otwarciu pliku z danymi następuje wczytanie pierwszej porcji danych.

2.1.3.4 Opcja Set

Otwiera nowe podmenu, w którym można ustawiać dodatkowe parametry, takie jak:

2.1.3.5 Opcja Send

Wysłanie danych do procesu sterowanego.

2.1.3.6 Opcja Quit

Wywołanie tej opcji powoduje zakończenie pracy programu.

2.1.4 Szczegółowa instrukcja obsługi programu

Rozdział ten jest uzupełnieniem poprzedniego. Zawiera on szczegółowe informacje dotyczące sposobu posługiwania się programem.


2.1.4.1 Zmiana statusu

Wybierając opcję On lineÓff line zmieniamy status programu na przeciwny. Po uruchomieniu programu program jest automatycznie przechodzi do stanu Off line. W tym stanie są możliwe następujące działania:

W stanie On Line, co ustalony kwant czasu następuje wczytanie kolejnej grupy współrzędnych, po czym następuje uaktualnienie wykresu.

Opcja Fixed/Unfixed pozwala na zmianę statusu wykresu. W stanie Unfixed (przyjętym domyślnie) wykres jest tworzony w taki sposób , aby wypełniał on w maksymalnym stopniu powierzchnię okienka. Wczytanie nowej porcji danych powoduje natychmiastową zmianę maksymalnych i minimalnych wartości osi Y, tak aby dokładność wykresu była jak największa. Jeżeli chcemy aby wczytanie nowej porcji danych nie powodowało zmiany krańcowych wartości osi Y ( za wyjątkiem sytuacji, gdy współrzędna Y danego punktu wykracza poza ten przedział); w takim przypadku należy wybrać opcję Fixed. Dodatkowo w stanie Fixed mamy możliwość ustalenia wartości krańcowych osi Y (Opcja Y axis limit).


2.1.4.2 Wczytywanie danych

Plik z danymi można wczytać na 3 sposoby:

  1. Wywołanie programu MONITOR z argumentem np. monitor val300.dat. Po uruchomieniu podany plik jest ładowany i rysowany jest wykres na podstawie danych zawartych w pliku wejściowym.

  2. Wykonanie tzw. Drag and Drop. W tym celu należy w głównym oknie programu File Manager nacisnąć lewy przycisk myszy na ikonie pliku danych, a następnie trzymając wciśnięty lewy klawisz myszy, należy przeciągnąć ikonę do obszaru graficznego programu MONITOR i zwolnić lewy przycisk myszy.

  3. Wywołanie opcji Load. Po wywołaniu tej opcji otwiera się okienko pomocnicze jak na rysunku 2.2.

    Pozycja Directory określa katalog z którego będzie wczytywany plik z danymi. Jeżeli podany katalog nas nie zadawala, należy skasować podaną nazwę (bądź jej część) klawiszem Delete (Back Space), a następnie wpisać nową i wcisnąć klawisz Return.

    Po określeniu nazwy katalogu, w wierszu File wpisujemy nazwę pliku z danymi dla programu. Nasz wybór zatwierdzamy klawiszem Return, bądź przyciskiem Load w okienku pomocniczym.

Jeżeli podany plik nie istnieje, podaliśmy złą nazwę pliku lub dany plik nie jest dostępny, w takim przypadku w obszarze stopek zostanie wyświetlony odpowiedni komunikat.

Rysunek 2.2: Okienko pomocnicze: Load
=13cm \epsffile{rys2.ps}

2.1.4.3 Zmiana wartości na osiach współrzędnych

Wywołując podopcję Set X axis values lub Set Y axis values powodujemy otwarcie okna zawierającego nazwy parametrów symulacji, zawarte w pliku z danymi (Rysunek 2.3). Naciskając lewy klawisz myszy na nazwie wybranego parametru, powodujemy natychmiastową zmianę wartości wyświetlanych na danej osi. Program automatycznie przerysowuje cały wykres, wypisując nazwę parametru symulacji wraz z jednostką (o ile takowa była podana w pliku danych) nad daną osią.

Rysunek: Okienko z nazwami parametrów symulacji
=13cm \epsffile{rys3.ps}

2.1.4.4 Zmiana wartości krańcowych osi Y

Jak już wcześniej nadmieniłem w stanie Fixed mamy możliwość określenia przedziału wartości wyświetlanych na osi Y. Wybranie opcji Y axis limit powoduje otwarcie okienka jak na rysunku 2.4. Okienko to składa się z dwóch paneli tekstowych oraz przycisku Set. Panele służą do określenia minimalnej i maksymalnej wartości wyświetlanej na osi Y. Po określeniu tych wartości należy wcisnąć przycisk Set, co spowoduje uaktualnienie wykresu w zadanym przedziale.
Rysunek 2.4: Okienko pomocnicze: Y axis limit
=6cm \epsffile{rys7.ps}

2.1.4.5 Zmiana parametrów programu

Wybranie podopcji Set Others otwiera okienko parametrów programu (rysunek 2.5). Okno to składa się z trzech linii. Każdy parametr znajduje się w osobnej linijce.

Rysunek: Okienko parametrów programu
=7cm \epsffile{rys4.ps}

Parametr Sort X axis określa czy wartości na osi X mają być posortowane rosnąco czy też nie. Jeżeli sortowanie jest wyłączone kolejne wartości na osi X są umieszczane według porządku ich występowania w pliku wejściowym. Parametr ten można zmieniać, wciskając lewy klawisz myszy na klawiszu Yes (jeżeli sobie życzymy sortowania wartości na osi X) lub No (w przeciwnym przypadku.). Defaultową wartością tego parametru jest: ``No Sort''.

Parametr Period mówi jaki jest odstęp czasowy pomiędzy kolejnymi aktualizacjami wykresu. Okres aktualizacji jest wyrażony w sekundach. Można go zmieniać wpisując odpowiednią wartość do panela numerycznego, występującego po słowie Period [s], bądź wciskając lewym klawiszem myszy przyciski potencjometrów , umiejscowione z prawej strony panela numerycznego. Defaultowo wartość parametru Period wynosi 5 sekund.

Ostatnia linia w oknie parametrów zawiera 4 przyciski, służące do zmiany miejsca od którego ma się rozpocząć ponowne wyświetlanie wykresu (w stanie Off line). Przyciski te mają następujące znaczenie:

Begin
Ponowne wyświetlanie rozpocznie się od początku pliku.

Previous
Ponowne wyświetlanie rozpocznie się od ``poprzedniego ekranu''. Nie jest możliwe wykonanie tej akcji, jeżeli znajdujemy się na początku pliku.

Next
Ponowne wyświetlanie rozpocznie się od ``następnego ekranu''. Nie jest możliwe wykonanie tej akcji,jeżeli znajdujemy się w miejscu w którym skończyliśmy wyświetlać aktualny wykres.

End
Powoduje skok do miejsca, gdzie skończył wyświetlanie.


2.1.4.6 Rozszerzanie wykresu

Jak wcześniej nadmieniłem program po wczytaniu danych rysuje wykres funkcji przechodzący przez punkty, których współrzędne są określane na podstawie danych zawartych w pliku wejściowym. Może się tak zdarzyć, że współrzędne kilku kolejnych punktów będą się niewiele od siebie różnić i mogą być umiejscowione zbyt blisko siebie, aby można było dokładnie obejrzeć wykres przechodzący przez te punkty. W takim przypadku należy powiększyć wykres w tym przedziale.

Aby tego dokonać należy:

  1. Zmienić status programu na Off line.

  2. Naprowadzić kursor do miejsca, skąd ma się rozpocząć rozszerzanie.

  3. Nacisnąć lewy klawisz myszy. Początek przedziału zostanie oznaczony pionową linią.

  4. Naprowadzić kursor do miejsca, gdzie ma nastąpić koniec rozszerzania.

  5. Nacisnąć lewy klawisz myszy. Koniec przedziału zostanie oznaczony pionową linią. Rysunek 2.6 pokazuje tą sytuację.
    Rysunek 2.6: Wykres funkcji przed rozszerzeniem
    =10cm \epsffile{rys5.ps}

    Rysunek 2.7: Wykres funkcji po rozszerzeniu
    =10cm \epsffile{rys6.ps}

  6. Nacisnąć środkowy klawisz myszy. Wykres zostanie rozszerzony w zadanym przedziale (rysunek 2.7).


2.1.4.7 Odczytywanie współrzędnych punktów

Interesującą opcją programu jest możliwość odczytu współrzędnych poszczególnych punktów bezpośrednio z ekranu. Można tego dokonać jeżeli program znajduje się w stanie Off line. Wykonanie operacji odczytu współrzędnych jest bardzo proste. Wystarczy naprowadzić kursor na dowolny punkt wykresu i odczytać wartość wpółrzędnych w obszarze stopek.

2.2 Opis modułu komunikacji

Program MONITOR oprócz swego podstawowego działania jakim jest wyświetlanie wyników symulacji molekularnej ma dodatkową możliwość wysyłania informacji do programu symulacji.

Ten rozdział jest poświęcony krótkiemu omówieniu mechanizmu komunikacji zastosowanego w programie MONITOR. Komunikacja została zorganizowana przy pomocy mechanizmu IPC (Inter-Process Communication), a konkretnie w oparciu o kolejki komunikatów (messages).

Kolejki komunikatów są praktycznym mechanizmem w środowiskach sieciowych. Proces zapisuje do ``skrzynki pocztowej'' komunikat przeznaczony dla innego procesu. Jeżeli proces czytający trafia na pustą skrzynkę, to zawiesza się w oczekiwaniu na komunikat (analogicznie proces wysyłający, natrafiający na pełną skrzynkę). Warto zauważyć, że kolejka nie jest typu FIFO.

Więcej informacji na temat kolejek komunikatów i innych mechanizmów komunikacji w systemie UNIX zostanie podanych w części dokumentacyjnej niniejszego opracowania.

2.2.1 Dołączenie funkcji komunikacyjnych do programu symulacyjnego

Funkcje komunikacyjne są zawarte w pliku com.c. Są tam zawarte definicje funkcji realizujące komunikację między dwoma procesami.

Aby program dokonujący symulacji mógł otrzymywać dane sterujące od programu wyświetlającego wyniki, należy skorzystać z funkcji: void init_queue( int mode ) i int leave_queue( void ) oraz ze zmiennej, która jest zadeklarowana następująco: double *New_data. Deklaracje podanych funkcji oraz zmiennej są zawarte w pliku: com.h. Plik ten należy dołączyć do programu symulacji instrukcją: #include. Natomiast plik com.c zawiera definicje wymienionych funkcji.

Aby więc korzystać z funkcji komunikacyjnych należy w programie symulacyjnym umieścić następujące instrukcje i funkcje:

...
#include "com.h"
...
/* na poczatku pliku umieszczamy */ 
New_data=&<zmienna sterowana>;
signal(SIGUSR1,rcv_data);
init_queue(Q_CLIENT);
...

/* przed wyjsciem z programu umieszczamy funkcje */
(void)leave_queue()
...

W miejsce symbolu <zmienna sterowana>, należy wpisać nazwę zmiennej, której wartość ma być zmieniana przez program wyświetlający wyniki.

Dołączenie funkcji komunikacyjnych do programu symulacyjnego w FORTRANIE jest również proste. Aby tego dokonać należy:

  1. Utworzyć plik (np. ctest.c), w którym definiujemy dwie funkcje (Ich nazwy muszą się kończyć znakiem podkreślenia). Plik ten powinien wyglądać następująco:
    #include "com.h"
    
    void    FUNKCJA1_(argument)
    double  *argument;
    {
            New_data = argument;
            signal(SIGUSR1,rcv_data);
            init_queue(Q_CLIENT);
    }
    
    void    FUNKCJA2_()
    {
            (void)leave_queue();
    }
    

  2. Skompilować powyższe funkcje kompilatorem języka C z opcją ``-c'' . Dodatkowo należy skompilować z tą samą opcją funkcje komunikacyjne zawarte w pliku com.c.

  3. Dopisać do programu w FORTRANIE (niech się on nazywa symul.f) następujące linie:
    ...
    C       BEGIN OF PROGRAM
    	CALL FUNKCJA1(<zmienna sterowana>)
    ...
    C       END OF PROGRAM
            CALL FUNKCJA2()
    

  4. Skompilować program w FORTRANIE za pomocą polecenia f77 symul.f com.o ctest.o

2.3 Wyniki przykładowej sesji symulacji

Przedstawione w tym punkcie rysunki ilustrują przebieg początku przykładowego eksperymentu komputerowego. Symulacji metodą dynamiki molekularnej poddany został układ 256 atomów jodku srebra (AgJ), znajdujący się w początkowej temperaturze 430K2.1. Dokładniejsze dane o układzie cząstek, użytych potencjałach, metodzie symulacji i analizie rezultatów można uzyskać w [2,1].

Przykładowy przebieg trwa 1000 kroków czasowych, co przy długości kroku dt = $10^{-14}$s daje 10ps. W kroku 300 i 600 temperatura układu jest przeskalowana odpowiednio do 580K i 730K (użyta opcja Send w programie MONITOR).

Przebieg temperatury przedstawiony jest na rysunku 2.8. Reakcja energii potencjalnej i całkowitej układu pokazana jest na rysunku 2.9 i 2.10.

Przykładowa symulacja prowadzona jest w pudle obliczeniowym o zmiennej objętości, fluktuującej tak by zachować stałe średnie ciśnienie wewnętrzne układu. Zmienną objętość pudła obliczeniowego przedstawiono na rysunku 2.11.

Możliwość wyboru dwóch dowolnych zmiennych do przedstawienia na osi X i Y pozwala np. na pokazanie zależności energii potencjalnej układu w funkcji temperatury (rysunek 2.12).

Rysunek: Przebieg temperatury układu symulowanego
=10cm \epsffile{rys8.ps}

Rysunek: Przebieg energii potencjalnej układu
=10cm \epsffile{rys9.ps}

Rysunek: Przebieg energii całkowitej układu
=10cm \epsffile{rys10.ps}

Rysunek: Wykres zmian objętości pudła obliczeniowego
=10cm \epsffile{rys11.ps}

Rysunek: Wykres energii potencjalnej układu w funkcji temperatury
=10cm \epsffile{rys12.ps}