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