137 10. Dodatki A. Implementacja zależności strat energii od
Transkrypt
137 10. Dodatki A. Implementacja zależności strat energii od
10. Dodatki A. Implementacja zaleŜności strat energii od parametru zderzenia Q(b) Ze względu na róŜnorodność spotykanych w literaturze modeli teoretycznych, doświadczalny i półempirycznych i doświadczalnych w programie symulacyjnym nie uwzględniono Ŝadnego z nich w postaci oddzielnej procedury. ZaleŜność strat energetycznych od parametru zderzenia jest pobierana z zewnętrznego pliku. Plik taki zawiera wieloelementową tablicę strat energetycznych Q(bi). Wartości róŜnicy bi+1 - bi nie muszą być równe dla kolejnych wartości i. Wartości straty energii dla parametru zderzenia b wyznaczane są na podstawie interpolacji liniowej z wykorzystaniem danych z wczytanych tablic: Q(b) = Q(bi ) + Q(bi +1 ) − Q(bi ) (b − bi ) dla b ∈ (bi, bi +1 ) bi +1 − bi (A.1) W przypadku grubszych warstw, gdy nie moŜna zaniedbać zmieniającej wraz ze zmniejszaniem się energii jonu zdolności hamowania, wczytywanych jest wiele tablic Q( E i , b) , gdzie Ei ∈ ( E0 , E0 − ∆E max ) , ∆E max oznacza maksymalną stratę energii po osiągnięciu głębokości zmax. Wartość straty energii dla dowolnego parametru zderzenia b i energii jonu E zawierającej się w przedziale (Ei, Ei+1) wyznacza się za pomocą poniŜszych formuł: Najpierw wyznaczane są wartości strat energetycznych dla energii „niŜszej”: Q( Ei , b) = Q( Ei , bi ) + Q( Ei , bi +1 ) − Q( Ei , bi ) (b − bi ) bi +1 − bi (A.2) W taki sam sposób określana jest ta wielkość dla energii „wyŜszej” Q( Ei +1 , b) = Q( Ei +1 , bi ) + Q( Ei +1 , bi +1 ) − Q( Ei +1 , bi ) (b − bi ) bi +1 − bi (A.3) Na końcu wyliczana jest wartość strat energetycznych dla aktualnej energii jonu, korzystając z interpolacji liniowej względem energii. Q( Ei , b) = Q( Ei +1 , bi ) + Q( Ei +1 , bi ) − Q( Ei , bi ) ( E − Ei ) Ei +1 − Ei (A.4) Do wyznaczenia przedziałów (bi,bi+1) i (Ei,Ei+1) uŜywana jest metoda przeszukiwania binarnego. 137 W przypadku uwzględnienia procesu wymian ładunkowych naleŜy rozszerzyć wykorzystywane tablice Q( E i , b) o dodatkowy wskaźnik, co prowadzi w rezultacie do tablicy w postaci Q( S i , E i , b) , gdzie Si oznacza aktualny stan ładunkowy jonu. Dla kaŜdego kroku symulacyjnego naleŜy wtedy wybrać po odpowiedni stan ładunkowy, a następnie dokonać opisanej wcześniej liniowej interpolacji po parametrze zderzenia i energii. Opisany powyŜej sposób wykorzystania zewnętrznych danych pozwala na odseparowanie programu symulacyjnego od konkretnego modelu teoretycznego opisującego straty energetyczne. Dodatkową zaletą takiego rozwiązania jest znacznie skrócenie czasu obliczeń w porównaniu do metod wykorzystujących obliczenia na bieŜąco, które z reguły wymagają czasochłonnych numerycznych rozwiązań. 138 B. Schemat blokowy programu Start programu Cykliczny zapis parametrów Wczytanie parametrów wejściowych Wyznaczenie paramerów fizycznych dla pojedyczego zderzenia Q(b), NEP, Flux Generowanie punktu startu jon Określenie parametrów tarczy w danej warstwie Wyznaczenie najbliŜszego centrum rozproszeń Losowanie odchylenia termicznego atomu tarczy Wyznaczenie parametru zderzenia (losowanie stanu ładunkowego) Wyznaczenie kąta odchylenia Określenie nowego połozenia jonu Czy nadal ta sama warstwa? TAK NIE NIE Czy jon osiagnął zadaną maksymalną głębokość? TAK Czy policzono wszystkie tory? NIE TAK Końcowy zapis wyników. Koniec działania programu 139 Budowa programu symulacyjnego oprócz implementacji modeli fizycznych (opisanych w rozdziale 6) powinna zawierać takie elementy, które pozwolą na jego efektywną pracę i dalszy rozwój. Program symulacyjny został napisany w języku Fortran, który od wielu lat jest z powodzeniem wykorzystywany w fizyce. W programie zastosowano standardowe polecenia języka programowania, dzięki czemu zagwarantowano jego przenośność i moŜliwość kompilacji tego samego kodu źródłowego zarówno pod kontrolą systemów operacyjnych rodziny Microsoft (WIN32), jak równieŜ pod systemami Linux, FreeBSD. Wykorzystano kompilator C++ gcc i zintegrowany z nim kompilator Fortranu g77. Dodatkowym argumentem przemawiającym za takim rozwiązaniem jest moŜliwość rozszerzenia kodu programu o elementy programowania równoległego (np. MPI), które są dostępne dla tego właśnie kompilatora. Zastosowano pliki wejściowe i wyjściowe w formacie tekstowym, co umoŜliwia opracowanie danych w dowolnym programie. Na rysunku (B.1) przedstawiono schemat blokowy programu. Najbardziej czasochłonne i wymagające optymalizacji są te części kodu, które odpowiadają za (a) wyznaczenie najbliŜszego centrum rozproszenia i (b) wyznaczenie kąta odchylenia po kaŜdym zderzeniu. W wykorzystanej wersji programu wszystkie warstwy oparto o strukturę fcc. To determinuje sposób wyznaczania najbliŜszego centrum rozproszenia zgodnie z odpowiednio zaimplementowaną tablicą wyboru dla takiej struktury, co prowadzi do przyśpieszenia obliczeń. W przypadku tarcz, które krystalizują w innej strukturze naleŜy przebudować tę cześć algorytmu. W symulacji zastosowano znane ekranowane potencjały oddziaływania wykorzystano algorytm opracowany przez Zieglera i zwany „magiczną formułą”, który zastępuje całkowanie elementarnymi działaniami matematycznymi. W zaleŜności od potrzeb w bloku „wyznaczania parametrów fizycznych” zapamiętywane są wyznaczone wielkości i następnie cykliczne zapisywane na dysk. Np. średnią stratę energii strumienia jonów po przejściu od powierzchni do wybranej głębokości (widmo energetyczne) lub średni ładunek strumienia na danej głębokości, rozkład strumienia jonów dla dane głębokości (flux). Program moŜe pracować w trybie wsadowym, co umoŜliwia uruchomienie z róŜnymi zbiorami danych wejściowych. 140