Professional Documents
Culture Documents
Wyznaczanie Struktury Fotonicznej Wybranych Kryształów Fotonicznych Przy Użyciu Pakietu MPB
Wyznaczanie Struktury Fotonicznej Wybranych Kryształów Fotonicznych Przy Użyciu Pakietu MPB
Marcin Wionczyk
Kierunek studiów: Fizyka techniczna
Specjalność studiów: Fotonika
Praca magisterska
Słowa kluczowe: Fotonika, Kryształy fotoniczne, fotoniczna struktura pasmowa, fizyka ciała
stałego, elektromagnetyzm, optyka fizyczna, Linux (Kubuntu), algorytmy numeryczne
Wrocław, 2008
Najszczersze podzi˛ekowania
dla prof. Włodzimierza Salejdy
za okazana˛ pomoc i anielska˛ cierpliwość
Praca dyplomowa może przyjmować różne formy w zależności od typu studiów i kraju, w którym
są realizowane. Najczęściej spotykanymi rodzajami prac dyplomowych są:
Praca licencjacka: Jest to praca napisana na zakończenie studiów licencjackich. Zazwyczaj skupia
się na prezentacji podstawowej wiedzy w wybranym obszarze naukowym lub zawodowym.
Praca magisterska: Praca magisterska jest pisana przez studentów na zakończenie studiów
magisterskich. Często ma charakter bardziej pogłębiony niż praca licencjacka i wymaga wykonania
własnych badań lub analizy konkretnego problemu.
Praca inżynierska: Jest to praca napisana przez studentów studiów inżynierskich. Skupia się na
praktycznym zastosowaniu wiedzy inżynierskiej w rozwiązaniu konkretnego problemu
technicznego.
Zarządzanie, marketing, ekonomia i administracja to obszary, w których prace dyplomowe mogą
przynieść wiele interesujących wniosków. W zarządzaniu można badać strategie firmy,
zachowania liderów, czy wpływ kultury organizacyjnej na wyniki. W pracach z marketingu
tematyka może obejmować analizę rynku, badanie zachowań konsumentów czy ocenę
skuteczności kampanii marketingowych. Prace z ekonomii mogą badać wpływ polityki
gospodarczej na gospodarkę, analizować zmiany na rynkach finansowych, czy badać przyczyny i
skutki ubóstwa. W pracach z administracji natomiast można skupić się na strukturach
administracyjnych, procesach decyzyjnych czy wpływie polityki publicznej na społeczeństwo.
Prace z politologii to kolejny szeroki obszar, w którym student może zająć się badaniem procesów
politycznych, systemów wyborczych, czy wpływu mediów na politykę. Niezależnie od obszaru,
każda praca dyplomowa zawsze wymaga pisanie analiz. To proces, który obejmuje interpretację
zebranych danych, identyfikację wzorców, wnioskowanie i tworzenie argumentów. Z kolei prace
z rolnictwa wymagają przeprowadzanie badań. Często podobne badania zawierają prace z ekologii.
Prace z filozofii z kolei, to obszar, w którym studenci mogą badać różne filozoficzne koncepcje,
teorie i idee, zastanawiać się nad pytaniem o sens życia, wolną wolę, prawdę, moralność, a także
analizować dzieła różnych filozofów.
W sumie, prace dyplomowe są wyrazem umiejętności, wiedzy i zrozumienia studenta dla danego
obszaru nauki. Są one ważne nie tylko jako końcowy produkt edukacyjny, ale także jako dowód
na zdolność studenta do samodzielnego myślenia, badania, analizy i argumentacji. Bez względu na
to, czy dotyczą one teologii, bankowości, prawa, zarządzania, marketingu, ekonomii, administracji,
politologii czy filozofii - są one nieodłączną częścią edukacji akademickiej.
Spis treści
Wst˛ep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
I. Teoria
1. Kryształy fotoniczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1. Zagadnienie własne Maxwella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.1. Równania Maxwella w niejednorodnym ośrodku dielektrycznym . . . . . . . . . 16
1.1.2. Twierdzenie Floqueta – Blocha . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.1.3. Równania Maxwella w periodycznym, niejednorodnym ośrodku dielektrycznym . 20
2. Wst˛ep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
III. Dodatki
Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Wykaz ważniejszych skrótów i oznaczeń
Skróty
Oznaczenia
~E — wektor nat˛eżenia pola elektrycznego [V/m] ;
~D — wektor indukcji elektrycznej [C/m2 ];
~ — wektor nat˛eżenia pola magnetycznego [A/m];
H
~B — wektor indukcji magnetycznej [Wb/m2 ];
~R — wektor translacji sieci podstawowej;
~ — wektor translacji sieci odwrotnej;
G
ε0 = 8, 524 · 10−12 [F/m] — przenikalność dielektryczna próżni;
∇ = (∂/∂x, ∂/∂y, ∂/∂z) — operator wektorowy;
ε — wzgl˛edna przenikalność dielektryczna, stała dielektryczna;
ε(~r) — funkcja dielektryczna;
~r — wektor położenia;
µ0 = 4π · 10−7 [H/m] — przenikalność magnetyczna próżni;
ω — cz˛estotliwość kołowa fali elektromagnetycznej [rad/s];
λ — długość fali elektromagnetycznej;
~k — wektor falowy Blocha;
√
i= −1 — jednostka urojona;
ℜ — cz˛eść rzeczywista liczby zespolonej;
ℑ — cz˛eść urojona liczby zespolonej.
Wstep
˛
1 według http://www.pbglink.com/patents.html
12 Wst˛ep
Cel pracy
1. Nabycie umiej˛etności posługiwania si˛e pakietem MPB w zakresie jego implementacji, uru-
chamiania i stosowania,
2. Wykonanie obliczeń widm fotonicznych wybranych struktur krystalicznych za pomoca˛ MPB.
Teoria
1. Kryształy fotoniczne
Definicja
Zgodnie ze słownikiem poj˛eć naukowo technicznych [20] „kryształy fotoniczne sa˛ to makro-
skopowe, periodyczne struktury dielektryczne posiadajace,
˛ analogicznie do pasm energetycznych
i przerw wzbronionych w kryształach półprzewodnikowych, przerwy spektralne dla fal elektro-
magnetycznych zwane fotonicznymi przerwami wzbronionymi”. Ze wzgl˛edu na ilość określonych
kierunków w których wyst˛epuje periodyczność, klasyfikuje si˛e kryształy fotoniczne na jedno-,
dwu- i trójwymiarowe. Najprostszy przypadek kryształu fotonicznego, składajacego
˛ si˛e tylko
z dwóch warstw materiałów A i B jest przedstawiony na rys. 1.1.
Wprowadzenie
1D 2D 3D
a
A B
Rysunek 1.1. Schematyczna ilustracja kryształów fotonicznych jednowymiarowych (1 D), dwuwymiaro-
wych (2 D) i trójwymiarowych (3 D), a oznacza stała˛ siatki
16 1. Kryształy fotoniczne
strzenna˛ struktur˛e kryształu modeluje si˛e za pomoca˛ funkcji dielektrycznej zależnej od położenia
ε(~r). Nast˛epnie przekształca si˛e równania Maxwella do postaci zagadnienia własnego, które dalej
b˛edziemy nazywać równaniem podstawowym. W równaniu podstawowym funkcje własne sa˛
wektorami nat˛eżenia pola magnetycznego fali EM a wartościami własnymi sa˛ wszystkie dopusz-
czalne wartości ω.
Zagadnienie własne Maxwella może być analizowane numerycznie za pomoca˛ wielu algoryt-
mów i programów. Jednym z takich środowisk obliczeniowych jest pakiet programów MPB. Pa-
kiet ten wykorzystuje efektywne algorytmy i opiera si˛e na zoptymalizowanej metodzie fal płaskich
omawianej w dodatku B. Instrukcj˛e użytkowania pakietu MPB umieściłem z kolei w rozdziale 5.
W obliczeniach numerycznych wektory H ~ n (~r) jak i wartości ωn sa˛ wielkościami dyskretnymi
zależnymi od kierunku i wartości wektora falowego ~k. Wielogał˛eziowe zależności dyspersyjne
ωn (~k), mi˛edzy którymi moga˛ wyst˛epować fotoniczne przerwy wzbronione, wyznaczamy rozwia-
˛
zujac
˛ równanie podstawowe.
Celem tej sekcji jest wyprowadzenie równania podstawowego, zwanego także zagadnieniem
własnym Maxwella, określajacego
˛ dopuszczalne stany własne pól magnetycznych i elektrycznych
fali EM w krysztale fotonicznym.
Na wst˛epie wyprowadzone zostanie, za ksia˛żka˛ [9], podstawowe zagadnienie własne z do-
wolna˛ funkcja˛ dielektryczna˛ ε(~r).
Zakładamy, że materiały, z których składa si˛e kryształ, sa˛ izotropowe, przeźroczyste i nat˛e-
żenie fal elektromagnetycznych nie jest duże. Wówczas bezwymiarowa wzgl˛edna przenikalność
dielektryczna ε(~r) przyjmuje wartości dodatnie i rzeczywiste, a zależności mi˛edzy wektorami
1.1. Zagadnienie własne Maxwella 17
indukcji i odpowiadajacymi
˛ im polami (zwiazki
˛ materiałowe) sa˛ liniowe i wygladaj
˛ a˛ nast˛epujaco:
˛
Przy takich założeniach współczynnik załamania światła jest dodatni, rzeczywisty i wynosi
p
n(~r) = ε(~r), a równania Maxwella – po uwzgl˛ednieniu zwiazków
˛ materiałowych (1.4), (1.5) –
zmieniaja˛ si˛e na
~ r,t)
∂H(~
~ r,t) = 0,
∇ · H(~ ∇ × ~E(~r,t) = −µ0 ,
∂t (1.6)
~
~ r,t) = ε0 ε(~r) ∂E(~r,t) .
h i
∇ · ε(~r)~E(~r,t) = 0, ∇ × H(~
∂t
~ r),
∇ × ~E(~r) = −i ωµ0 H(~ (1.8)
~ r) = i ωε0 ε(~r)~E(~r).
∇ × H(~ (1.9)
~
~E(~r) = ∇ × H(~r) ⇒ ∇ × ~E(~r) =
1
∇×
1 ~ r) = −i ωµ0 H(~
∇ × H(~ ~ r),
i ωε0 ε(~r) i ωε0 ε(~r)
1 ~ r) = ω2 µ0 ε0 H(~
~ r),
∇× ∇ × H(~
ε(~r)
1 1
c= √ ⇒ µ0 ε0 = 2 .
µ0 ε0 c
1 2
∇× ~ n (~r) = ωn H
∇×H ~ n (~r) (1.10)
ε(~r) c
18 1. Kryształy fotoniczne
gdyż to gwarantuje spełnienie warunku ∇ · ~E(~r) = 0, ponieważ dywergencja z rotacji zawsze jest
równa zeru [26].
Równanie (1.10) jest zagadnieniem własnym dla operatora Θ̂ , ∇ × ε(~1r) ∇×, funkcji wła-
snych H ~ n (~r) i wartości własnych (ωn /c)2 . Równanie to może mieć nieskończona˛ liczb˛e rozwiazań
˛
~ n (~r), ωn (~k)} numerowanych wskaźnikiem n. Każda˛ taka˛ par˛e nazywamy stanem własnym.
{H
Operator Θ̂ jest hermitowski co oznacza, że:
Z równania (1.12) wynika również zależność mi˛edzy wektorami translacji: sieci Bravais’go i sieci
odwrotnej w postaci
~b1 = 2π~a2 ×~a3 , ~b2 = 2π~a3 ×~a1 , ~b3 = 2π~a1 ×~a2 , ~bi ·~a j = 2πδi j
~a1 · (~a2 ×~a3 ) ~a1 · (~a2 ×~a3 ) ~a1 · (~a2 ×~a3 )
Wówczas stany własne H ~ ~ (~r) i wartości własne ω ~ , przypisane do wektorów falowych Blocha
n,k n,k
~k, sa˛ niezmienne wzgl˛edem symetrii translacyjnej sieci odwrotnej ~k =~k + G~ i tym samym można
ograniczyć obliczenia wzgl˛edem ~k do nieredukowalnej strefy Brillouin’a (najmniejszego obszaru
z którego, poprzez symetrie rotacji i odbicia, da si˛e odtworzyć I stref˛e Brillouina) [10].
Rysunek 1.2. I strefa Brillouina (komórka elementarna Wignera – Seitza w sieci odwrotnej) z zaznaczona˛
nieredukowalna˛ strefa˛ Brillouin’a dla sieci trójkatnej
˛ i kwadratowej
20 1. Kryształy fotoniczne
Rozwiazuj
˛ ac ˛ powyższe zagadnienie własne dostajemy dyskretne rozwiazania
˛ w postaci n funkcji
własnych ~un,~k (~r), które dodatkowo musza˛ spełniać nast˛epujace
˛ warunki:
Na wst˛epie chciałbym wyjaśnić kilka podstawowych nazw, którymi b˛ed˛e si˛e posługiwał. Sa˛
to poj˛ecia takie jak Linux, dystrybucja Linuksa oraz pakiet programów MPB.
Linux
Dystrybucja Linuksa
Przed przystapieniem
˛ do instalacji należy:
Rysunek 3.2. Opcje instalatora po wystartowaniu z płyty. Po wciśni˛eciu klawisza F2 j˛ezyk został ustawiony
na Polski
Rysunek 3.3. Opcja Uruchom Kubuntu daje możliwość zapoznania si˛e z systemem Linux. Ikonka Install
umożliwia dalsza˛ cz˛eść instalacji
30 3. Instalacja Linuksa i pakietu MPB
wszystko to jest już ustawione standardowo, jeżeli wybraliśmy j˛ezyk polski, wi˛ec wystarczy
zatwierdzić ustalenia klawiszem „Next >" (rys. 3.4).
12. W 4. kroku (rys. 3.4(d)) decydujemy o sposobie partycjonowania dysku. Pierwsza opcja od
góry usuwa najwi˛eksza,˛ nie zajmowana˛ przez żaden system operacyjny partycj˛e i na jej miej-
scu tworzy partycje linuksowe. Kolejna opcja usuwa wszystkie partycje i ostatnia pozwala
nam na r˛eczne partycjonowanie dysku (ta˛ też zalecam). Etapy tworzenia partycji linuksowych
zamieściłem na rys. 3.6 na 32 stronie.
13. W 5. kroku (rys. 3.4(f)) wpisujemy w stosowne pola nazw˛e komputera, użytkownika, loginu
i hasło. Nazwa komputera b˛edzie wykorzystywana w połaczeniach
˛ sieciowych.
14. Ostatnim krokiem jest zatwierdzenie wprowadzonych zmian. Jest to ostatni moment, gdy
możemy jeszcze zrezygnować albo cofnać
˛ si˛e do poprzednich kroków. Gdy jednak zgadzamy
si˛e z zamieszczonymi informacjami naciskamy przycisk „Zainstaluj” (rys. 3.5) i czekamy na
zakończenie instalacji. Gdy już jest po wszystkim uruchamiamy ponownie komputer.
(c) Krok 3. Wybór układu klawiatury (d) Krok 4. Decyzja o sposobie utworzenia miejsca na
dysku. Wybór opcji „R˛ecznie” umożliwi nam podj˛ecie
decyzji jakie partycje chcemy stworzyć lub usunać
˛
(e) Przygotowywanie partycji linuksowych. Szczegóły (f) Krok 5. Wybór nazwy komputera, loginu i hasła
na rysunkach 3.6 na nast˛epnej stronie
(a) Zaznaczamy pole „free space” i naciskamy przycisk (b) Tworzymy nowa˛ logiczna˛ partycj˛e typu Ext2 o roz-
„New partition” miarze 100MB. W polu Mount point wpisujemy /boot.
Zatwierdzamy klawiszem OK
(c) Znowu zaznaczamy „free space” i tworzymy nowa˛ (d) Ostatnia tworzona partycja jest typu Ext3 i zajmuje
partycj˛e typu Swap o rozmiarze 1 GB reszt˛e wolnego miejsca. W polu Mount point wpisujemy
/
Rysunek 3.7. Program rozruchowy systemów operacyjnych (z ang. bootloader) uruchamiany podczas
startu komputera
3 http://gri.sourceforge.net/
34 3. Instalacja Linuksa i pakietu MPB
(d) Oprócz pakietów przez nas wybranych, na liście znajda˛ si˛e jeszcze tzw. pakiety zależne
(n.p. mpb nie zadziała bez libctl3). Po dokonaniu wyboru możemy przejrzeć zmiany i je
zatwierdzić. Pakiety zostana˛ pobrane z internetu i zainstalowane
4.1.1. Użytkownicy
4.1.2. Pliki
Każdy plik i folder ma przypisane prawa dost˛epu oraz właściciela. Reguluja˛ one dost˛ep do
każdego pliku i katalogu oraz określaja˛ co można z nimi robić. Prawa te dzielimy na:
— właściciela zasobu: n.p. użytkownika, który stworzył i zapisał plik. Właściciel może zmieniać
prawa dost˛epu,
— grupy: poszczególnych użytkowników przynależacych
˛ do grupy,
— pozostałych: użytkowników. [24]
Jedna˛ z podstawowych różnic jaka˛ da si˛e zauważyć jest zupełnie odmienna struktura katalo-
gów. W przypadku systemu Windows, ścieżka dost˛epu do jakiegoś pliku, wygladała
˛ by nast˛epu-
jaco:
˛
D:\Folder\podfolder\plik
/Folder/podfolder/plik
4.1. System operacyjny Windows a Linux 39
Katalog „/” jest folderem głównym, do którego podczas startu systemu „podpinane” sa˛ wszyst-
kie pliki, foldery, urzadzenia,
˛ partycje i.t.d. Ponadto Linux odróżnia w nazwach wielkości liter.
Katalogi Folder i folder (pliki Plik i plik) b˛eda˛ traktowane jako odr˛ebne katalogi (pliki).
Katalog Zawartość
/ Katalog główny
Programy współdzielone przez system, administratora i innych użyt-
/bin
kowników
Jadro
˛ systemu Linux. Tutaj także znajduja˛ si˛e pliki programu rozrucho-
/boot
wego
Zawiera pliki reprezentujace
˛ wszystkie urzadzenia
˛ w komputerze. „Sta-
/dev nowia˛ one interfejs do sterowników zawartych w jadrze
˛ systemu” [24]
— menu KDE: w menu KDE mamy dost˛ep do ustawień systemowych oraz do różnych progra-
mów, pogrupowanych według kategorii t.j. Biuro, Internet, System, Narz˛edzia i.t.d., programy
uruchamia si˛e za pomoca˛ jednego klikni˛ecia lewym przyciskiem myszy,
— menu z ważnymi miejscami systemowymi: naciskajac
˛ przycisk System (coś jak „Mój kom-
puter” w systemie Windows) uzyskujemy dost˛ep do najistotniejszych miejsc w systemie t.j.:
katalog dokumentów, katalog domowy, urzadzenia
˛ przechowywania danych, foldery i pliki
udost˛epniane w sieci oraz katalogi innych użytkowników,
4.2. Środowisko graficzne 41
— przycisk odsłaniajacy
˛ pulpit i minimalizujacy
˛ wszystkie uruchomione programy,
— menu z ikonami programów: standardowo znajduje si˛e w nim zestaw ikon najcz˛eściej uży-
wanych programów, poprzez edycj˛e menu, można dodawać badź
˛ usuwać ikony programów,
— pasek zadań: Miejsce w którym pojawiaja˛ si˛e nazwy uruchomionych programów wraz z sym-
bolizujacymi
˛ je ikonami,
— przełacznik
˛ pulpitów: w KDE istnieje możliwość pracy na kilku pulpitach; przełacznik
˛ służy
przełaczaniu
˛ si˛e mi˛edzy nimi,
— tacka systemowa: miejsce dokowania programów działajacych
˛ "w tle", klikni˛ecie prawym
przyciskiem myszy na ikon˛e danego programu uruchamia jego menu konfiguracji,
— zegar,
— kosz.
Graficzny interfejs użytkownika daje możliwość wykonania wielu zadań w prosty i oczywisty
sposób, jednakże pod wzgl˛edem możliwości i ilości dost˛epnych poleceń, terminal jest znacznie
pot˛eżniejszym narz˛edziem. Dost˛ep to wiersza poleceń jest możliwy z kilku miejsc:
— korzystajac
˛ z menedżera plików, można kliknać
˛ prawym przyciskiem myszy na ikonk˛e repre-
zentujac ˛ →
˛ a˛ plik tekstowy, który zamierzamy edytować, a nast˛epnie w „Otwórz za pomoca”
„Kate”.
Aby zadziałało podświetlanie składni dla plików wsadowych pakietu MPB, należy: z paska
menu u góry okna wybrać Ustawienia, nast˛epnie Konfiguracja: Kate. . . . Otworzy si˛e okno konfi-
guracji programu i dalej post˛epujemy według poleceń na rys. 4.7.
46 4. System operacyjny Linux
Rysunek 4.7. Konfigurowanie podświetlania składni dla plików wsadowych pakietu MPB
5. Instrukcja użytkowania pakietu MPB
— geometri˛e sieci krystalicznej — domyślna˛ siecia˛ jest sieć kubiczna (regularna). Aby nadać
sieci krystalicznej inna˛ geometri˛e, trzeba zmiennej geometry-lattice przypisać nowy obiekt
sieci. Szczegóły w dodatkach A.2.1 na 85 stronie i A.2.4 na 88 stronie.
Przykładowy fragment podajemy niżej.
— zbiór wektorów falowych Blocha, dla których zamierzamy obliczyć zależności dyspersyjne
ωn (~k). Wektory sa˛ wyrażone we współrz˛ednych i jednostkach wektorów bazowych sieci od-
wrotnej oraz przyjmuja˛ interpolowane wartości pośrednie mi˛edzy narożnikami nieredukowal-
nej strefy Brillouina. Przykładowy fragment podajemy niżej.
— funkcje inicjujace
˛ i kotrolujace
˛ symulacj˛e — najpierw zapisywane sa˛ wartości funkcji die-
lektrycznej do pliku prefiks-epsilon.h5, a nast˛epnie sa˛ rozwiazywane
˛ stany własne dla każ-
dego wektora falowego z listy k-points, funkcje uruchomieniowe moga˛ przyjmować 0 lub
wi˛ecej argumentów w postaci innych funkcji. Szczegóły w A.2.7 na 92 stronie. Przykładowy
fragment podajemy niżej.
Załóżmy, że dysponujemy napisanym przez nas plikiem o nazwie plik.ctl. Aby go przetwo-
rzyć za pomoca˛ programu mpb, w Terminalu przechodzimy do katalogu zawierajacego
˛ plik.ctl
i uruchamiamy
$ mpb plik.ctl | tee plik.out
Spowoduje to, że informacje wypisywane na ekranie przez mpb b˛eda˛ równocześnie zapisywane
do pliku plik.out. Jest to konieczne, gdyż mpb podaje wyniki obliczeń przemieszane ze szcze-
gółowymi informacjami o przebiegu symulacji i trzeba je odseparować za pomoca˛ komendy
grep. Linie tekstu z rezultatami obliczeń zawieraja˛ słowa-klucze t.j.: freqs, tefreqs, tmfreqs,
ωa |~k|a
= ⇒ ω = c|~k|
2πc 2π
— (band 1, band 2, ...), (te band 1, te band 2, ...) lub podobnie — cz˛estotliwości własne,
wyliczone dla pasma 1,2, . . . , podane w formie cz˛estotliwości znormalizowanej (ωa)/(2πc) =
a/λ, (oś y).
1. W pojawiajacym
˛ si˛e okienku wybrać „Otwórz w nowym oknie”.
2. Przejść do katalogu robieniewykresow.
3. nacisnać
˛ klawisz F4. Otworzy sie Terminal w bieżacym
˛ katalogu.
4. Wpisać poniższa˛ komend˛e.
$ sudo cp * /usr/local/bin
Skrypt ten został napisany w j˛ezyku programowania Python i do tworzenia wykresów wy-
korzystuje j˛ezyk GRI pochodzacy
˛ ze strony http://gri.sourceforge.net. J˛ezyk GRI po-
siada czytelna˛ form˛e, w zwiazku
˛ z czym pisanie oraz modyfikowanie plików z rozszerzeniem
gri nie jest skomplikowane. Zaleta˛ tego programu jest to, że można w nim narysować dosłownie
wszystko, lecz niestety ma także i wady. Najważniejsza˛ z nich jest brak przetwarzania polskich
liter. Oto fragment wygenerowanego pliku gri, w którym ewentualnie można dokonywać zmian:
5.3. Wizualizacja pól skalarnych i wektorowych 51
Przykład 2 Fragment pliku gri. Litery greckie zapisuje si˛e tak jak w środowisku matematycznym
systemu LATEX.
set x axis 0 150 50 5
set x axis labels 0 "$\Gamma$" 50 "M" 100 "K" 150 "$\Gamma$"
set x name "Wektor falowy Blocha $(|k|a)/(2\pi)$"
draw title "Polaryzacja TE"
...
spowoduje:
$ h5ls epsilon.h5
Jeżeli w pliku ctl, w funkcji uruchomieniowej została wstawiona funkcja pasmowa przetwa-
rzajaca
˛ pola wektorowe (output-efield-z, output-tot-pwr i.t.d., (Dodatek A.2.9)), wów-
rodzaj
nazwa pola indeks numer składowa pola
wektoro- .k wektora .b pasma . wektorowego . symetrii,
polaryzacji
.h5
wego falowego (opcjonalna)
fali EM
n.p. e.k11.b02.z.tm.h5, dpwr.k06.b05.h5 .
5.3. Wizualizacja pól skalarnych i wektorowych 53
Wprowadzajac
˛ w terminalu polecenia:
$ mpb-data -m 2 -r -n 32 *.h5
$ h5tovtk -o epsilon.vtk -d data-new epsilon.h5
$ mayavi2 -d epsilon.vtk -m Axes -m Outline -m IsoSurface
otrzymamy trójwymiarowy zapis funkcji dielektrycznej do pliku epsilon.vtk, który nast˛ep-
nie jest otwierany w programie mayavi2 (rys. 5.2(a)). Za pomoca˛ opcji znajdujacych
˛ si˛e po -m
(moduły) w programie zostana˛ narysowane: osie współrz˛ednych (Axes), kontur zestawu danych
(Outline) i powierzchnia graniczna mi˛edzy ośrodkami o różnej stałej dielektrycznej
(IsoSurface). W uruchomionym interfejsie mamy możliwość:
Wpisujac
˛ w Terminalu:
$ for (( i=1; i<=5; i++ )) ; do
> h5tovtk -o dpwr.k06.b0$i.vtk -d data-new dpwr.k06.b0$i.h5
> done
54 5. Instrukcja użytkowania pakietu MPB
Pierwszym krokiem jaki należy uczynić, jest napisanie w edytorze tekstu pliku wsadowego
dla programu mpb (listing 6.1).
; f u n k c j e uruchomieniowe
; d l a p o l a r y z a c j i t e ( p o l e e l e k t r y c z n e d r g a w p l a s z c z y z n i e xy )
( run-te )
; d l a p o l a r y z a c j i tm ( p o l e m a g n e t y c z n e d r g a w p l a s z c z y z n i e xy )
( run-tm )
Otrzymamy w ten sposób obraz funkcji dielektrycznej (rys. 6.2(a)) oraz wykresy zależności dys-
persyjnych dla obydwu polaryzacji (rys. 6.1(a), 6.1(b))
Rysunek 6.1.
6.1. Struktury dwuwymiarowe 57
Rysunek 6.2.
( define ( f i r s t − t m − g a p r )
( set ! geometry ( list
( make cylinder ( material AlGaAs )
( center 0 0 ) ( radius r ) ( height infinity ) )
))
( run-tm )
; zwraca p i e r w s z a f o t o n i c z n a przerwe wzbroniona , s t a r t u j a c
; od n a j n i z s z e j c z e s t o t l i w o s c i
( retrieve-gap 1 )
)
; p r z e r w a z n a j d u j e s i e miedzy dwoma p i e r w s z y m i pasmami
( set ! num-bands 2 )
( set ! mesh-size 7 )
; z a m a k s y m a l i z a c j e o d p o w i a d a f u n k c j a maximize
( define r e s u l t ( maximize f i r s t − t m − g a p 0 . 1 0 . 1 0 . 5 ) )
( print " p r o m i e n p r z y maksimum : " ( max−arg r e s u l t ) " \ n " )
58 6. Wybrane przykłady obliczeń
$ mpb sqrods-optym-r.ctl
...
Gap from band 1 (0.279089202695019) to band 2 (0.415558945595474),
39.291760364237%
total elapsed time for run: 0 seconds.
done.
promien przy maksimum: 0.194032622475023
maksymalna przerwa wzbroniona: 39.291760364237%
Wielkość maksymalnej przerwy wzbronionej wyrażona˛ w procentach należy rozumieć jako sto-
sunek różnicy cz˛estotliwości znormalizowanych ∆ω do wartości średniej z tych dwóch cz˛estotli-
wości ωsr
∆ω 0.415558945595474 − 0.279089202695019
= 0.415558945595474+0.279089202695019
= 0.3929176
ωsr 2
fix-efield-phase output-efield-z ) )
( run-te ( output-at-kpoint ( vector3 ( / −3) ( / 3 ) 0 )
fix-hfield-phase output-hfield-z ) )
Obrazy funkcji dielektrycznej oraz amplitud pola magnetycznego i elektrycznego wzdłuż osi z
wywołuja˛ polecenia
$ mpb-data -r -m 3 epsilon.h5 e*tm.h5 h*te.h5
$ h5topng -d data-new epsilon.h5
$ h5topng -C epsilon.h5:data-new -c dkbluered -Z -d z.r-new e*tm.h5 h*te.h5
Rysunek 6.3. Polaryzacja TM (pole magnetyczne drga w płaszczyźnie xy). Amplitudy pola elektrycznego
w kierynku osi z, dla wektora falowego ~k = 2π 1 1
a · (− 3 , 3 , 0), we współrz˛
ednych wektorów bazowych sieci
trójkatnej
˛
Rysunek 6.4. Polaryzacja TE (pole elektryczne drga w płaszczyźnie xy). Amplitudy pola magnetycznego
w kierunku osi z
(a) (b)
(c)
Przedstawione na rys. 6.5 widma fotoniczne sa˛ zgodne z wynikami zawartymi na stronie in-
ternetowej [3]
6.1. Struktury dwuwymiarowe 61
(a) Fotoniczna przerwa wzbroniona dla fal o (b) obraz funkcji dielektrycznej
dowolnym stanie polaryzacji, propagujacych
˛
w płaszczyźnie xy
Rysunek 6.6.
Otrzymane widmo fotoniczne z rysunku 6.6(a) pokrywa si˛e z wynikami z rozdziału 5 pracy
[26]
62 6. Wybrane przykłady obliczeń
Defekt liniowy
(a) Struktura bez defektów (b) z defektem, w postaci usuni˛etych pr˛etów dielek-
trycznych w linii prostej. Wektor falowy jest ułożony
wzdłuż linii defektu
Rysunek 6.7. Zestawienie wykresów pasm fotonicznych dla struktury z defektem i bez defektu
(a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m)
Rysunek 6.8. Funkcje własne pola elektrycznego wyznaczone dla wektora falowego ze środka Γ i K. (b)
najniższe pasmo, (m) najwyższe. Pole elektryczne zlokalizowane w defekcie stuktury (h), ma cz˛estotliwość
własna˛ wewnatrz
˛ FPW idealnej struktury
64 6. Wybrane przykłady obliczeń
Światło w światłowodach fotonicznych może propagować si˛e w rdzeniu albo na zasadzie cał-
kowitego wewn˛etrznego odbicia (rdzeń pełny) albo dzi˛eki zlokalizowaniu stanu własnego we-
wnatrz
˛ fotonicznej przerwy wzbronionej (rdzeń powietrzny).
Na podstawie pliku tri-holes.ctl (listing 6.4) stworzyłem przykładowy plik (listing 6.6),
pokazujacy
˛ jak można modelować światłowody fotoniczne.
Uruchamiajac
˛ w terminalu symulacj˛e
$ mpb swiatlowod.ctl | tee output
...
tmfreqs:, k index, k1, k2, k3, kmag/2pi, tm band 1
...
Finished solving for bands 1 to 1 after 2187 iterations.
tmfreqs:, 1, 0, 0.5, 0, 0.0524864, 0.468548
elapsed time for k point: 5 minutes, 21 seconds.
Fixing e-field (band 1) phase by 0.640057 + 0.768327i; max ampl. = 0.426747
Outputting fields to e.k01.b01.z.tm...
total elapsed time for run: 5 minutes, 22 seconds.
done.
d-energy-components:, 1, 1, 0, 0, 1
energia w rdzeniu: 0.094469904999453
otrzymamy na koniec informacj˛e, że został znaleziony stan własny o cz˛estotliwości znormalizo-
wanej 0.468548 (cz˛estotliwość wewnatrz
˛ FPW z rys. 6.6(a)) oraz, że wewnatrz
˛ rdzenia powietrz-
nego znajduje si˛e około 9, 4% całkowitej energii pola. Podglad
˛ funkcji dielektrycznej i pola elek-
trycznego w kierunku osi z (wzdłuż światłowodu) uzyskamy dzi˛eki nast˛epujacym
˛ poleceniom:
$ mpb-data -r epsilon.h5 e*.tm.h5
$ h5topng -d data-new epsilon.h5
$ h5topng -C epsilon.h5:data-new -c dkbluered -Z -d z.r-new e*.tm.h5
Rysunek 6.9.
6.2. Wyniki oryginalne (obliczenia własne) 67
"Płatek śniegu"
Opisywana tutaj struktura jest dowodem na to że, w pakiecie MPB na upartego da sie tworzyć
skomplikowane struktury o różnorodnych kształtach. Struktur˛e płatka śniegu uzyskałem wspo-
magajac
˛ si˛e programem do tworzenia rysunków technicznych, gdzie mogłem zmierzyć wszystkie
ogległości i położenia środków obiektów, co ilustruje rysunek 6.10(a).
Rysunek 6.10.
( vector3 ( / −3) ( / 3 ) 0 ) ; K
( vector3 0 0 0 ) ) ) ; Gamma
(a) (b)
Rysunek 6.11.
6.2. Wyniki oryginalne (obliczenia własne) 69
(a) pasmo 1 (b) pasmo 2 (c) pasmo 3 (d) pasmo 4 (e) pasmo 5
(f) pasmo 6 (g) pasmo 7 (h) pasmo 8 (i) pasmo 9 (j) pasmo 10
Rysunek 6.12. Amplitudy pola magnetycznego w kierunku osi z, dla wektora falowego
~k = {−0.133333, 0.433333, 0}
(a) pasmo 1 (b) pasmo 2 (c) pasmo 3 (d) pasmo 4 (e) pasmo 5
(f) pasmo 6 (g) pasmo 7 (h) pasmo 8 (i) pasmo 9 (j) pasmo 10
Rysunek 6.13. Amplitudy pola indukcji elektrycznej w kierunku osi z, dla wektora falowego K
70 6. Wybrane przykłady obliczeń
Dywan Sierpińskiego
Rysunek 6.14.
6.2. Wyniki oryginalne (obliczenia własne) 71
))
( set ! num-bands 3 0 )
( set ! resolution 3 2 )
( set ! mesh-size 7 )
( set ! k-points ( interpolate 49 ( list
( vector3 0 0 0 ) ; Gamma
( vector3 0 . 5 0 0 ) ; M
( vector3 0 . 5 0 . 5 0 ) ; X
( vector3 0 0 0 ) ) ) ) ; Gamma
( run )
( set ! num-bands 3 0 )
( set ! resolution 3 2 )
( set ! mesh-size 7 )
( set ! k-points ( interpolate 49 ( list
( vector3 0 0 0 ) ; Gamma
( vector3 0 . 5 0 0 ) ; M
( vector3 0 . 5 0 . 5 0 ) ; X
( vector3 0 0 0 ) ) ) ) ; Gamma
( run )
))
( set ! num-bands 3 0 )
( set ! resolution 3 2 )
( set ! mesh-size 7 )
( set ! k-points ( interpolate 49 ( list
76 6. Wybrane przykłady obliczeń
( vector3 0 0 0) ; Gamma
( vector3 0.5 0 0) ; X
( vector3 0.5 0.5 0) ; M
( vector3 0 0 0)))) ; Gamma
( run )
7. Podsumowanie
Praca dyplomowa dotyczy fotoniki oraz zaawansowanych metod fizyki obliczeniowej stoso-
wanych obecnie do wyznaczania podstawowych charakterystyk i właściwości fizycznych krysz-
tałów fotonicznych i światłowodów fotonicznych.
Najwi˛ecej uwagi poświ˛econo szczegółowemu przedstawieniu możliwości obliczeniowych nie-
komercyjnego pakietu MPB stworzonego w MIT i dost˛epnego wszystkim zainteresowanym [5],
który jest dość powszechnie stosowany przez wiele ośrodków badawczych i naukowych.
Do najważniejszych osiagni˛
˛ eć pracy należy zaliczyć:
Dodatki
A. Funkcje i procedury plików ctl
Ten dodatek powstał w oparciu o dost˛epne dokumenty [1, 4] i zawiera list˛e wszystkich dost˛ep-
nych funkcji oraz zmiennych, które moga˛ si˛e znaleźć w plikach z rozszerzeniem ctl. W przed-
stawionym spisie, znajduja˛ si˛e podstawowe funkcje j˛ezyka programowania Scheme1 , funkcje do-
starczane wraz z biblioteka˛ libctl oraz szereg innych wyspecjalizowanych funkcji pomocnych
przy projektowaniu kryształów fotonicznych. Każda˛ z nich można oddzielnie przetestować, jeżeli
uruchomi si˛e program mpb jako interpreter poleceń. W tym celu należy wywołać w terminalu
komend˛e mpb bez podawania żadnych parametrów.
A.1.4. Wektory
(matrix3x3 c1 c2 c3) — tworzy matryc˛e której kolumny stanowia˛ wektory c1, c2, c3,
(matrix3x3-transpose m), (matrix3x3-adjoint m), (matrix3x3-inverse m) — funkcje te, we-
dług kolejności, tworza˛ macierz transponowana,˛ sprz˛eżona˛ i odwrotna,˛
(matrix3x3-determinant m) — określa wyznacznik macierzy,
(matrix3x3+ m1 m2), (matrix3x3- m1 m2), (matrix3x3∗ m1 m2) — suma, różnica i iloczyn ma-
cierzy m1, m2,
(matrix3x3∗ m1 v) , (matrix3x3∗ v m2) — mnoży macierz przez wektor v (m1∗v i v∗m2),
(matrix3x3∗ s m2), (matrix3x3∗ m1 s) — mnoży macierz przez liczb˛e s ,
(rotation-matrix3x3 os theta) — tworzy macierz obrotu w prawo o kat
˛ theta wokół wektora
osi .
(interpolate n lista) — jeżeli lista składa si˛e z wektorów albo liczb, funkcja ta zwraca list˛e
powi˛ekszona˛ o dodatkowe n równoodległych, interpolowanych wartości (puntów) mi˛edzy ele-
mentami listy, co ilustruje przykład 5,
(print tekst , zmienna ...) — funkcja ta służy do wyświetlania na ekranie dowolnych informa-
cji. N.p. jeżeli chcemy wyświetlić współrz˛edne jakiegoś wektora zapisanego w zmiennej v,
powinniśmy skorzystać z przykładu 6.
84 A. Funkcje i procedury plików ctl
Przykład 5 Interpolacja
mpb> ( interpolate 2 ( list 0 3 6 ) )
(0 1 2 3 4 5 6)
mpb> ( interpolate 4 ( list ( vector3 1 0 0 ) ( vector3 0 1 0 ) ) )
(#(1 0 0) #(4/5 1/5 0) #(3/5 2/5 0) #(2/5 3/5 0) #(1/5 4/5 0) #(0 1 0 ) )
(begin-time tekst instrukcje ...) — mierzy czas wykonywania zadanych instrukcji. Na koniec
funkcja zwraca czas działania, a także wypisuje go w tej samej linijce z żadanym
˛ tekstem ,
(minimize funkcja tolerancja ) — szuka minimum funkcji z zadana˛ tolerancja,
˛
funkcja działanie
(fold-left / 1 (list 1 2 3)) 1/1/2/3 = 1/6
(fold-right / 1 (list 1 2 3)) 3/1/2/1 = 3/2
Tablica A.2. Przykład wykorzystania funkcji fold-left i fold-right.
Sa˛ to zmienne globalne, które umożliwiaja˛ kontrol˛e wielu parametrów potrzebnych do obli-
czeń pasm fotonicznych. Zmienne te sa˛ także widoczne po uruchomieniu w trybie interpretatora
poleceń programu mpb, funkcji (help). W nawiasach kwadratowych podane sa˛ odpowiednie dla
każdej ze zmiennych typy danych. Poniżej opisuj˛e stosowne zmienne:
geometry [ lista klas obiektow geometrycznych] — określa obiekty geometryczne wchodzace
˛
w skład struktury na której przeprowadza si˛e symulacje. Gdy położenie obiektów si˛e pokrywa,
to ostatni podany obiekt nakryje poprzedni. Lista obiektów domyślnie jest pusta,
default-material [klasa okreslajaca rodzaj materialu ] — określa materiał wypełniajacy
˛ prze-
˛ w skład obiektów geometrycznych. Domyślnie jest to powietrze (ε = 1),
strzeń, nie wchodzacy
ensure-periodicity [0 lub 1] — jeżeli prawda (1 - domyślnie) obiekty geometryczne sa˛ roz-
mieszczane zgodnie z wektorami translacji,
geometry-lattice [klasa sieci przestrzennej ] — określa wektory bazowe oraz stała˛ siatki ko-
mórki obliczeniowej (wycentrowanej w poczatku
˛ układu współrz˛ednych). Jeżeli któryś z wy-
miarów jest określony jako no-size, wtedy ilość wymiarów jest redukowana o jeden (struk-
tura staje si˛e dwu- lub jednowymiarowa; mimo to wektory falowe Blocha można nadal okre-
ślać w 3 wymiarach). Domyślnie baz˛e tworza˛ wektory ortonormalne (sieć kubiczna / kwadra-
towa),
86 A. Funkcje i procedury plików ctl
resolution [liczba albo wektor] — określa rozdzielczość siatki obliczeniowej w liczbie pik-
seli na stała˛ siatki (jednostk˛e stałej siatki stanowi długość wektora translacji podstawowej
w zadanym kierunku). Jeżeli rozdzielczość podamy jako wektor vector3, wtedy określimy
ja˛ dla różnych kierunków; w przeciwnym razie rozdzielczość jest jednakowa we wszystkich
kierunkach. Domyślnie rozdzielczość wynosi 10,
mesh-size [l.calkowita ] — w każdym punkcie siatki obliczeniowej składajacej
˛ si˛e z pikseli/wok-
seli, stała dielektryczna jest uśredniana wzgl˛edem sasiednich
˛ punktów w celu znalezienia efek-
tywnego tensora dielektrycznego (patrz dodatek B.3). Domyślna˛ wartościa˛ mesh-size jest 3,
co oznacza, że obszar uśredniania wynosi 3x3 punkty. Zwi˛ekszanie tej wartości powoduje, że
uśredniana wartość stałej dielektrycznej jest bardziej wrażliwa na g˛eściej wyst˛epujace
˛ zmiany
w strukturze bez zmiany rozdzielczości, ale za cen˛e dłuższych obliczeń przestrzennej postaci
funkcji dielektrycznej. Ustawienie (mesh-size 1) wyłacza
˛ uśrednianie, a co za tym idzie po-
garsza si˛e zbieżność rozwiazań
˛ (patrz B.3),
k-points [ lista vector3] — lista wektorów falowych Blocha branych pod uwag˛e przy wyli-
czaniu pasm fotonicznych. Podaje si˛e je we współrz˛ednych bazy sieci odwrotnej. Domyślnie
nie ma przypisanych żadnych wektorów falowych,
num-bands [l.calkowita ] — liczba pasm fotonicznych do obliczenia dla każdego wektora falo-
wego. Domyślnie 1,
target-freq [l. rzeczywista ] — cz˛estotliwość docelowa. Jeżeli wynosi zero, wtedy sa˛ liczone
wszystkie cz˛estotliwości poczawszy
˛ od zera (zwyczajne rozwiazanie
˛ zagadnienia własnego).
Jeżeli cz˛estotliwość docelowa jest wi˛eksza niż zero, poszukiwane sa˛ tylko te pasma fotoniczne,
dla których różnica mi˛edzy cz˛estotliwościa˛ docelowa˛ a cz˛estotliwościa˛ ωn (~k) jest najmniejsza.
Zbieżność wyników jest osiagana
˛ znacznie wolniej niż w przypadku startu z cz˛estotliwościa˛
od zera i dlatego potrzebne jest zmniejszenie tolerancji,
tolerance [l. rzeczywista ] — określa kiedy zbieżność rozwiazań
˛ analizy zagadnienia własnego
zostanie osiagni˛
˛ eta. Dzieje si˛e tak, gdy wartości własne mi˛edzy kolejnymi iteracjami, zmie-
niaja˛ si˛e w mniejszym zakresie niż określona tolerancja. Domyślnie tolerancja wynosi 10−7 ,
filename-prefix [ciag znakow] — przedrostek dodawany do nazwy każdego tworzonego pliku
z rozszerzeniem *.h5,
epsilon-input-file [ciag znakow] — nazwa pliku w formacie HDF5 (rozszerzenie *.h5),
w którym zawarte sa˛ dane o funkcji dielektrycznej (rozpisanej w dyskretnych punktach sieci).
Funkcja ta nast˛epnie, odpowiednio przeskalowana i interpolowana wypełnia komórk˛e elemen-
tarna,˛ a co za tym idzie cała˛ przestrzeń. Za wektory bazowe, przyjmuje si˛e wektory określone
w zmiennej geometry-lattice. Jeżeli użyjemy tej funkcji i nie podamy żadnych obiektów
geometrycznych, konieczne jest także ustawienie zmiennej mesh-size na 1,
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 87
Sa˛ to nast˛epujace
˛ zmienne, które można odczytać po zakończeniu symulacji:
freqs — zmienna zawierajaca
˛ cz˛estotliwości, posortowane rosnaco,
˛ obliczone dla ostatniego
wektora falowego. Cz˛estotliwość n-tego pasma jest zwracana poprzez komend˛e
(list-ref freqs (− b 1)),
iterations — liczba iteracji, która była potrzebna do osiagni˛
˛ ecia zbieżności rozwiazań
˛ dla
ostatniego wektora falowego,
parity — łańcuch znaków określajacy
˛ rodzaj symetrii/polaryzacji użytej podczas ostatniej sy-
mulacji (te, tm, zeven, zodd, . . . ),
current-k — ostatni brany do obliczeń wektor falowy,
gap-list — lista fotonicznych przerw wzbronionych, składajaca
˛ si˛e z list typu
(%_czestotliwosci_znormalizowanej_od_0_do_1 cz . _poczatkowa cz . _koncowa),
88 A. Funkcje i procedury plików ctl
A.2.4. Klasy
( make k l a s a ( w l a s c i w o s c 1 w a r t o s c 1 ) ( w l a s c i w o s c 2 w a r t o s c 2 ) . . . )
lattice
Klasa lattice używana jest do tworzenia obiektu sieci przestrzennej kryształu fotonicznego
(przypisanego do zmiennej geometry-lattice) oraz definiuje właściwości takie jak kierunki
wektorów bazowych i długości wektorów translacji podstawowej.
Właściwości:
(basis1 x y z ), (basis2 x y z ), (basis3 x y z) — kierunki wektorów bazowych określone we
współrz˛ednych kartezjańskich. Wektory te nast˛epnie stanowia˛ baz˛e dla wszystkich innych
wektorów w sieci. Domyślnie wektory bazowe skierowane sa˛ wzdłuż osi x, y i z,
(basis-size a b c) — liczby a, b i c określaja˛ długości wektorów translacji podstawowej odpo-
wiednio wzdłuż wektorów basis1, basis2 i basis3. Domyślnie a = b = c = 1,
(size a b c) — rozmiary komórki sieciowej określone w jednostkach długości wektorów trans-
lacji podstawowej. Domyślnie a = b = c = 1 co oznacza, że powtarzalnym elementem w sieci
jest komórka elementarna.
Jeżeli któryś z wymiarów ma wartość no-size wówczas wymiarowość kryształu jest reduko-
wana o 1 (funkcja dielektryczna w tym kierunku jest jednorodna).
material-type
Klasa ta określa z jakiego materiału maja˛ być stworzone geometryczne obiekty. Aktualnie
dost˛epne sa˛ 3 podklasy: dielectric, dielectric-anisotropic i material-function.
dielectric — jednorodny, izotropowy, materiał dielektryczny z jedna˛ właściwościa:
˛
epsilon [wartosc] — stała dielektryczna musi być dodatnia. Nie zdefiniowanie wartosci spo-
woduje wystapienie
˛ bł˛edu i zatrzymanie programu. Zamiennie można stosować współ-
czynnik załamania (index n) jako substytut (epsilon (∗ n n)) ,
dielectric-anisotropic — jednorodny, anizotropowy, liniowy dielektryk. Dla tego typu ma-
teriału określa si˛e wzgl˛edna˛ przenikalność dielektryczna˛ w postaci tensora (rzeczywistej ma-
cierzy symetrycznej) w odniesieniu do osi x, y, z układu kartezjańskiego
a u v
εkl = u b w .
v w c
Dzi˛eki temu, stała dielektryczna ε może przyjmować różne wartości dla pól spolaryzowanych
w różnych kierunkach. Powyższy tensor musi być dodatnio określony (wszystkie wartości
własne macierzy powinny być dodatnie) i jeżeli tak nie jest, program mpb zakończy działanie
z bł˛edem. Elementy tensora określa si˛e za pomoca˛ właściwości:
epsilon-diag [vector3] — elementy macierzy po przekatnej
˛ a , b, c ,
epsilon-offdiag [cvector3] — elementy macierzy u, v, w w postaci liczb rzeczywistych.
Domyślnie u = v = w = 0. Elementy te mogłyby być liczbami zespolonymi gdyby pakiet
MPB dost˛epny w dystrybucji Kubuntu został skompilowany z opcja˛ --with-hermitian-eps,
wówczas tensor εkl miałby postać macierzy hermitowskiej.
Przykład: Jeżeli wzgl˛edna stała dielektryczna dla polaryzacji TE ma wartość 3.0 (płaszczyzna
polaryzacji x y) i 5.0 dla polaryzacji TM (polaryzacja w kierunku osi z) wówczas tensor die-
lektryczny zostanie określony w nast˛epujacy
˛ sposób:
(make (dielectric-anisotropic (epsilon-diag 3 3 5))).
material-function — definiujemy funkcj˛e materiałowa˛ w postaci funkcji dielektrycznej zależ-
nej od położenia ε(~r). Ma jedna˛ właściwość:
material-func [funkcja] — funkcja z jednym argumentem – pozycja˛ we współrz˛ednych wek-
torów bazowych [vector3].
Zazwyczaj stała dielektryczna powinna być dodatnia, a w postaci tensorowej dodatnio okre-
ślona. Jednakże MPB posiada eksperymentalna˛ funkcj˛e (allow-negative-epsilon), pozwala-
jac
˛ a˛ na tworzenie dielektryków o ujemnej stałej dielektrycznej (n.p. w plazmie). Funkcj˛e t˛e na-
leży umieścić przed (run). Zbieżność rozwiazań
˛ b˛edzie osiagana
˛ wolniej, gdyż w tym przypadku
operator określony w równaniu 1.14 nie jest dodatnio określony.
90 A. Funkcje i procedury plików ctl
geometric-object
Klasy potomne
sphere — kula, właściwościa˛ kuli jest promień:
radius [liczba ] — promień kuli.
cylinder — cylinder z kołowym przekrojem poprzecznym i skończona˛ wysokościa.
˛ Określaja˛
go nast˛epujace
˛ właściwości:
radius [liczba ] — promień przekroju poprzecznego cylindra,
height [liczba ] — długość cylindra wzdłuż jego osi,
axis [vector3] — kierunek osi cylindra. Domyślnie oś ta jest skierowana równolegle do OZ.
cone — stożek (możliwy jest także ści˛ety stożek). Jest to klasa potomna, dziedziczaca
˛ po klasie
cylinder. Dodatkowa˛ właściwościa˛ jest radius2:
radius2 [liczba ] — określa promień u szczytu cylindra / stożka. Gdy wartość przypisana do
radius2 jest równa 0 wówczas otrzymujemy stożek zakończony czubkiem, a gdy wartość
ta różni si˛e od zera otrzymujemy ści˛ety stożek.
block — równoległościan (n.p.: sześcian, prostopadłościan, kraw˛edzie bryły nie musza˛ być or-
togonalne). Właściwości:
size [vector3] — długości kraw˛edzi równoległościanu. Każdemu elementowi „wektora”
odpowiada dokładnie jedna niezerowa długość. Wartość ta musi zostać określona, gdyż
w przeciwnym wypadku zostanie zgłoszony bład,
˛
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 91
A.2.5. Narzedzia
˛ geometrii
Nast˛epujace
˛ funkcje pozwalaja˛ na łatwa˛ konwersj˛e mi˛edzy współrz˛ednymi kartezjańskimi,
bazy sieci oraz współrz˛ednymi bazy sieci odwrotnej.
92 A. Funkcje i procedury plików ctl
przydatne sa˛ zmienne wyjściowe freqs (cz˛estotliwości pasm dla ostatniego zadanego wektora
falowego) jak i current-k (ostatni wektor falowy). Dost˛epne sa˛ również funkcje niższego rz˛edu.
Ich użycie nie jest wymagane w wi˛ekszości przypadków:
(init-params p ponowne−ustawienie−pol?) — inicjuje parametry symetrii (polaryzacji) pól p oraz
na podstawie zmiennej ponowne−ustawienie−pol? decyduje czy poczatkowe
˛ ustawienie pól ma
mieć wartości losowe,
(set-parity p) — ustawia parzystość pól,
(randomize-fields) — przypisuje polom wektorowym wartości losowe,
(solve-kpoint k) — oblicza stany własne dla zadanego wektora falowego k.
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 95
Funkcje inicjujace
˛ MPB oraz leżace
˛ u ich podstaw algorytmy obliczaja˛ cz˛estotliwości ω jako
~
funkcje wektora falowego k. Czasami jednak przydaje si˛e policzyć funkcj˛e odwrotna˛~k(ω). Jest
to użyteczne n.p. podczas analizy dwóch różnych pasm fotonicznych posiadajacych˛ ta˛ sama˛ cz˛e-
~
stotliwość dla różnych wektorów falowych. Funkcja k(ω) przydaje si˛e także do tworzenia diagra-
mów — ilustrujacych
˛ sumowanie si˛e wektorów falowych — przydatnych do zrozumienia rodzaju
dyfrakcji (n.p. materiały o ujemnym współczynniku załamania). Do rozwiazywania
˛ tego typu
problemów celowo została stworzona funkcja find-k.
(find-k p omega pasm−min pasm−max kier−k tol dlugk−zgad dlugk−min dlugk−max [fun−pasm...])
— znajduje wektory falowe dla pasm ponumerowanych od pasmo−min do pasmo−max i cz˛e-
stotliwości omega wzdłuż kierunku kier−k w przestrzeni odwrotnej. Funkcja find-k zwraca
list˛e zawierajac
˛ a˛ długości wektorów falowych dla każdego pasma; wektory te nast˛epnie można
uzyskać za pomoca˛ komendy (vector3-scale dlugosc (unit-vector3 kier−k)). Argumentami
funkcji sa:
˛
— p: parzystość symetrii (te same nazwy zmiennych jak w przypadku funkcji run-parity),
— omega: cz˛estotliwość dla której bada si˛e zależność ~k(ω),
— pasm−min, pasm−max: przedział pasm, dla których sa˛ znajdywane wektory falowe,
— kier−k: kierunek w przestrzeni odwrotnej, dla którego znajdywane sa˛ wektory falowe. (dłu-
gość kier−k jest ignorowana),
— tol : ułamkowa tolerancja, z która˛ szuka si˛e rozwiazań
˛ wektorów falowych; wartość 0.0001
jest zazwyczaj wystarczajaca,
˛
— dlugk−zgad: zgadywana wartość poczatkowa
˛ długości ~k wzdłuż kierunku kier−k przy cz˛e-
stotliwości omega,
— dlugk−zgad: może mieć form˛e listy (jedna zgadywana długość dla każdego z pasm od
band−min do band−max) albo pojedynczej liczby (taka sama zgadywana długość dla wszyst-
kich pasm),
— dlugk−min, dlugk−max: sprawdza zasi˛eg długości wektorów falowych; wartość powinna
być wystarczajaco
˛ duża aby pomieścić poprawne długości dla wszystkich pasm,
— fun−pasm: zero lub wi˛ecej funkcji pasmowych, takich samych jak w przypadku (run),
wykonywanych dla każdego wyliczonego ~k i dla każdego pasma.
Wszystkie opisane tutaj funkcje, przyjmuja˛ jako argument numer pasma i dla bieżacego
˛ wek-
tora falowego zapisuja˛ do plików z rozszerzeniem .h5 odpowiadajace
˛ im pola (lub wyliczaja˛ coś
innego). Funkcje te zostały tak zaprojektowane, aby można ich było używać wraz z funkcjami
inicjujacymi
˛ (run), aczkolwiek można je wywoływać oddzielnie:
96 A. Funkcje i procedury plików ctl
A.2.11. Parzystość
Majac
˛ dane stany własne dla zadanego wektora falowego, MPB może obliczyć ich parzystości
wzgl˛edem płaszczyzny z = 0 lub y = 0. Parzystość wzgl˛edem płaszczyzn z/y = 0 jest określana
w formie liczbowej jako średnia α z parzystości dla połowy możliwych położeń w komórce ele-
mentarnej (n/2 piksli/wokseli):
~ r1 ) = α1 H(−~
H(~ ~ r1 ),
H(~ ~ r2 ),
~ r2 ) = α2 H(−~ α1 + α2 + . . . + αn/2
.. α=
. n/2
~ rn ) = αn/2 H(−~
H(~ ~ rn/2 )
parzystość odwrotna˛ w stosunku do parzystości pola ~E. W rzeczywistości parzystości obydwu pól
sa˛ jednakowe,
A.2.12. Predko
˛ ści grupowe
Majac
˛ dane stany własne dla zadanego wektora falowego, MPB może obliczyć pr˛edkości gru-
powe (pochodna cz˛estotliwości wzgl˛edem wektora falowego dω(~k)/d~k) stosujac
˛ teori˛e Hellmana
– Feynmana. Służa˛ temu poniższe funkcje:
display-group-velocities — funkcja pasmowa przeznaczona do uruchamiania wraz z ko-
menda˛ (run), wypisujaca
˛ wektory pr˛edkości grupowej (we współrz˛ednych kartezjańskich,
w jednostkach pr˛edkości światła c) dla każdego wektora falowego z listy k-points,
(compute-group-velocities) — zwraca list˛e wektorów pr˛edkości grupowych (we współrz˛ed-
nych kartezjańskich, w jednostkach pr˛edkości światła) dla każdego stanu własnego wyliczo-
nego i ostatniego wektora falowego (zawartego w zmiennej current-k),
(compute-group-velocity-component kierunek) — zwraca list˛e składowych wektorów pr˛edko-
ści grupowych (jednostki c), w zadanym kierunku , dla każdego stanu własnego wyliczonego
dla ostatniego wektora falowego current-k. Kierunkiem jest wektor we współrz˛ednych bazy
sieci odwrotnej (taki sam jak wektory falowe k-points); jego długość nie ma żadnego zna-
czenia. (Funkcja 3 razy szybsza niż compute-group-velocities).
Pole elektryczne ~E(~r), indukcja elektryczna ~D(~r) = ε(~r)~E(~r) oraz pole magnetyczne H(~
~ r) =
−(i/ω)∇ × ~E(~r) sa˛ normalizowane w nast˛epujacy
˛ sposób:
Z
ε(~r)|~E(~r)|2 d 3~r = 1
Z
~ r)|2 d 3~r = 1
|H(~
A.3. Modyfikowanie pól skalarnych i wektorowych 99
Całkowanie odbywa si˛e w obszarze komórki elementarnej. Element obj˛etości komórki d 3~r ma
obj˛etość pojedynczego piksela/woksela.
gdzie f oznacza h albo d. Oprócz tego funkcja compute-field-energy zwraca list˛e 7 liczb:
(U xr xi yr yi zr zi ) . U jest całkowita,
˛ nieznormalizowana˛ energia,˛ wyrażona˛ w jednostkach
wynikajacych
˛ z normalizacji stanu własnego (n.p. całkowita energia H ~ wynosi zawsze 1.0),
xr jest ułamkiem energii rzeczywistej cz˛eści pola w kierunku osi x, xi jest ułamkiem energii
urojonej cz˛eści pola w kierunku osi y i tak dalej. ( x−fraction = xr + xi , y−fraction = yr + yi
i.t.d.).
Nast˛epujace
˛ funkcje dostarczaja˛ najróżniejszych informacji o stanie własnym, użytecznych n.p.
do rachunku zaburzeń. Funkcje dotyczace
˛ pól wektorowych wymagaja,˛ aby odpowiednie pola
były załadowane. Funkcje obliczajace
˛ energi˛e wymagaja,˛ aby uprzednio była wywołana funkcja
compute-field-energy .
100 A. Funkcje i procedury plików ctl
W celu przeprowadzenia działań na wielu różnych polach (n.p. wyliczenie wektora Poyntinga
~E ∗ × H)
~ trzeba je najpierw przypisać do zmiennych pól. Zmienne polowe wyst˛epuja˛ w trzech ro-
dzajach. moga˛ przechowywać pola skalarne o wartościach rzeczywistych (rscalar), pola skalarne
o wartościach zespolonych (cscalar) oraz zespolone pola wektorowe (cvector).
Do dyspozycji mamy predefiniowana˛ zmienna˛ cur-field w której jest przechowywane aktu-
alnie załadowane pole (n.p. za pomoca˛ funkcji get-*). Na podstawie tej zmiennej można stworzyć
inne pola.
(field-make f) — funkcja ta zwraca nowa,
˛ pusta˛ zmienna˛ polowa˛ takiego samego rodzaju i o
takim samym wymiarze jak zmienna polowa f ,
(rscalar-field-make f), (cscalar-field-make f), (cvector-field-make f) — podobne działa-
nie jak w funkcji field-make z tym wyjatkiem,
˛ że tworzone sa˛ zmienne polowe w takim
samym wymiarze jak zmienna f typu rscalar, cscalar, cvector,
(cvector-field-nonbloch! f) — domyślnie zakłada si˛e, że zespolone pola wektorowe maja˛ po-
stać periodyczna˛ (i sa˛ zwracane jako przemnożone przez exp(i~k~r)). Funkcja ta zapisuje pola
w postaci nie przemnożonej przez exp(i~k~r),
(field-set! fdocel fzrodl ) — przypisuje zmiennej polowej fdocel takie same pole jak w zmien-
nej fzrodl . Obydwie zmienne musza˛ być tego samego rodzaju i mieć taki sam rozmiar,
(field-copy f) — zwraca nowa˛ zmienna˛ polowa, ˛ która jest dokładna˛ kopia˛ zmiennej f ; Funkcja
ta odpowiada wywołaniu field-make a nast˛epnie field-set!,
(field-load f) — ładuje do zmiennej cur−field zawartość f (ustawiamy f jako bieżace
˛ pole).
w ten sposób na dowolnym polu można dokonywać wszystkich operacji z dodatku A.3.2.
Na polach przechowywanych w zmiennych polowych można dokonywać operacji na 3 spo-
soby: można tworzyć nowe pola, na podstawie dwóch innych, za pomoca˛ funkcji field-map!
(n.p. stworzyć pole składajace
˛ si˛e z wektorów Poyntinga), całkować wybrane funkcje polowe za
~ ∗ (~r) d 3~r) lub uzyskiwać wartości pola
~ r) · H
R
pomoca˛ integrate-fields (n.p. liczyć całk˛e H(~
w dowolnym punkcie za pomoca˛ *-field-get-point (n.p. aby scałkować powierzchni˛e).
(field-map! fdocel func [ f1 f2 ...]) — oblicza nowe pole fdocel za pomoca˛ funkcji (func
f1−wart f2−wart ...) dla każdego punktu (piksela) należacego
˛ do komórki elementarnej.
f1−wart f2−wart ... sa˛ wartościami odpowiadajacymi
˛ zmiennym f1 , f2 i.t.d.. Wszystkie pola
102 A. Funkcje i procedury plików ctl
musza˛ być w tym samym wymiarze oraz argumenty i zwracane typy danych funkcji func
musza˛ zgadzać si˛e ze zmiennymi f1 , f2 , ... , fdocel . Zmienna fdocel może zawierać takie
samo pole jak argumenty f1 , f2 , ... . Wszystkie pola sa˛ podawane w postaci bez czynnika
fazowego Blocha exp(i~k~r),
(integrate-fields func [f1 f2 ...]) — oblicza całk˛e z funkcji (func r [ f1 f2 ...]) na przestrzeni
obliczeniowej komórki. r oznacza pozycj˛e (we współrz˛ednych bazy sieci), f1 , f2 , ... to
zmienne przechowujace
˛ pola w takim samym rozmiarze). Całka jest liczona jako suma z war-
tości pól we wszystkich pikslach/wokselach przemnożonych przez powierzchni˛e piksla / ob-
j˛etość woksla. Wszystkie podawane pola nie posiadaja˛ czynnika fazowego Blocha exp(i~k~r),
(cvector-field-get-point f r), (cvector-field-get-point-bloch f r),
(rscalar-field-get-point f r) — majac
˛ pozycje we współrz˛ednych bazy sieci r, zwracane sa˛
interpolowane wartości pól f w tym punkcie. Funkcja cvector-field-get-point-bloch po-
dobnie jak get-bloch-field-point zwraca wartość pola w punkcie, tyle że pobiera pole ze
zmiennej f .
Na podstawie uprzednio wymienionych funkcji, t.j. get-*, output-* powstał szereg przydat-
nych, bardziej złożonych funkcji. Oto one:
(get-poynting nr−pasma) — funkcja ta ładuje jako aktualne pole (zapisuje je do zmiennej
cur-field) iloczyn wektorowy pól ~ E ∗ (~r) × H(~
~ r) (pole wektorów Poyntinga; strumień g˛esto-
ści energii EM) odpowiadajacy
˛ pasmu fotonicznemu nr−pasma. Połowa z cz˛eści rzeczywistej
tego pola, odpowiada uśrednionemu po czasie strumieniowi g˛estości energii (który może być
połaczony
˛ z cz˛eścia˛ urojona˛ w celu określenia strumienia zależnego od czasu),
(output-poynting nr−pasma), (output-poynting-x nr−pasma),
(output-poynting-y nr−pasma), (output-poynting-z nr−pasma) — zapisuje do pliku pole wek-
torów Poyntinga; zarówno dla wszystkich jak i pojedynczych kierunków wzdłuż osi układu
kartezjańskiego,
(get-tot-pwr nr−pasma) — ładuje jako aktualne pole uśredniona˛ po czasie g˛estość energii elek-
~ r)|2 +ε(~r)|~E(~r)|2 ) dla pasma nr−pasma. (Jeżeli przemnoży si˛e cz˛eść rze-
tromagnetycznej (|H(~
czywista˛ pola wektorów Poyntinga przez 1/2, to aby wszystko si˛e zgadzało, g˛estość energii
elektromagnetycznej trzeba przemnożyć przez 1/4),
(output-tot-pwr which−band) — zapisuje uśredniona˛ po czasie g˛estość energii elektromagne-
tycznej dla pasma nr−pasma.
Przykład 12 Funkcja get-poynting składa si˛e z wielu różnych funkcji polowych oraz komend
j˛ezyka Scheme
( define ( get-poynting which−band )
( get-efield which−band ) ; wstaw E do c u r − f i e l d
( let ( ( e ( field-copy c u r − f i e l d ) ) ) ; . . . i s k o p i u j do z m i e n n e j e .
( get-hfield which−band ) ; wstaw H do c u r − f i e l d
( field-map ! c u r − f i e l d ; z a p i s z ExH do c u r − f i e l d
( lambda ( e h ) ( vector3-cross ( vector3-conj e ) h ) )
e cur−field )
( cvector-field-nonbloch ! c u r − f i e l d ) ) )
żane przez siebie tylko wtedy, gdy pola sa˛ przekazywane na wyjście (funkcje output-*) lub do
użytkownika (n.p. liczenie całek).
Istnieja˛ jednak pewne wyjatki,
˛ a jednym z nich sa˛ pola utworzone za pomoca˛ field-map!.
Pola te nie powinny być przemnażane przez exp(i~k~r). Dla przykładu, w polu wektorowym Poyn-
~ r) czynnik fazowy exp(i~k~r) nie wyst˛epuje, gdyż ulega anihilacji po przemnożeniu
tinga ~E ∗ (~r)× H(~
przez swoje sprz˛eżenie. Aby przekazać MPB, że stworzone przez nas pole nie powinno mieć po-
staci funkcji Blocha należy użyć specjalnej funkcji cvector-field-nonbloch!.
W pakiecie MPB każde pole ma albo postać funkcji Blocha albo nie (n.p. jest samoistnie
periodyczne); co pokrywa znaczny obszar możliwości w fizyce.
Takie podejście ma jednak mały „haczyk”. Jeśli pola wektorowe maja˛ postać funkcji Blocha,
czynnik exp(i~k~r) zawsze wykorzystuje wektor falowy zapisany w zmiennej current-k. Kombi-
nacja dwóch pól, dla dwóch różnych wektorów falowych, wymaga aby jedno z pól było r˛ecznie
przemnożone przez obwiednia˛ i ustawione funkcja˛ cvector-field-nonbloch!.
Jeżeli pakiet MPB podczas instalacji ze źródeł został skonfigurowany z flaga˛ --with-inv-
symmetry (a tak jest w przypadku pakietu MPB dost˛epnego w Kubuntu), wówczas zostaje zain-
stalowany dodatkowy program mpbi zoptymalizowany dla układów w których wyst˛epuje inwersja
funkcji dielektrycznej wzgl˛edem odbicia ε(x, y, z) = ε∗ (−x, −y, −z) (sprz˛eżenie jest istotne dla
tensorów dielektrycznych w postaci zespolonej macierzy hermitowskiej).
Program mpbi w porównaniu do programu mpb potrafi działać dwukrotnie szybciej i używa
dwukrotnie mniej pami˛eci, ale wymaga do poprawnego działania zachowania inwersji. Gdy ten
warunek nie jest spełniony, mpbi transformuje połow˛e komórki elementarnej wzgl˛edem środka
układu i może si˛e zdarzyć, że otrzymamy zupełnie inny układ niż zakładaliśmy.
A.5. Obliczenia równoległe 105
Dost˛epne sa˛ dwie metody, przy pomocy których można wykonywać obliczenia równoległe.
Pierwsza korzysta z biblioteki MPI2 , jest najbardziej wyrafinowana i dostarcza najwi˛ekszych
korzyści. Druga z kolei, bazuje na skrypcie mpb-split, dzielacym
˛ liczb˛e stanów własnych do
policzenia, na liczb˛e wykonywanych procesów w systemie (n.p. dwa procesy b˛eda˛ wykonywane
przez dwa procesory).
Jeżeli podczas konfiguracji zostanie wybrana opcja with-mpi, pakiet MPB zostanie skompi-
lowany w taki sposób, aby korzystał zarówno z własnych zasobów systemowych jak i zasobów
innych komputerów (w przypadku klastrów komputerowych, superkomputerów). Obliczenia zaj-
muja˛ mniej czasu i mniej pami˛eci w porównaniu do przetwarzania szeregowego.
Parametry programu mpb-mpi sa˛ takie same jak w przypadku mpb i mpbi, ale pomi˛edzy nimi
wyst˛epuja˛ drobne różnice:
— systemy jednowymiarowe nie sa˛ wyliczane metoda˛ przetwarzania równoległego, gdyż ich ob-
liczanie jest wystarczajaco
˛ szybkie,
— dane zapisane w plikach HDF5 (epsilon, pola, i.t.d.), pochodzace
˛ z mpb-mpi maja˛ przestawione
osie X i Y. Aby przestawić osie podczas wizualizacji danych należy wywołać mpb-data z opcja˛
-T (plus inne opcje).
W celu osiagni˛
˛ ecia optymalnej korzyści (oszcz˛edności czasu i pami˛eci) z używania mpb-mpi,
pierwsze dwa wymiary sieci przestrzennej złożonej z wokseli (nx i ny ), powinny być podzielne
przez liczb˛e procesów. Jeżeli ta reguła zostanie naruszona, MPB nadal b˛edzie działał, ale bilans
obcia˛żenia mi˛edzy procesorami b˛edzie nierówny. w najgorszym przypadku, n.p. jeżeli nx albo ny
jest mniejsze od liczby procesów, cz˛eść procesorów (albo wszystkie) b˛edzie bezczynna. Dla syste-
mów dwuwymiarowych, optymalny przypadek jest nieco bardziej skomplikowany: nx i (ny /2 + 1)
powinny być podzielne przez liczb˛e procesów (nie ny ).
Program mpb-mpi dzieli obliczenia wszystkich pasm, wszystkich wektorów falowych
(k-points) mi˛edzy dost˛epne procesory. To oznacza, że nawet, jeśli prowadzone sa˛ obliczenia
2 Message Passing Interface. Jest to biblioteka przesyłania komunikatów dla potrzeb programowania równole-
głego
106 A. Funkcje i procedury plików ctl
tylko dla pojedynczego wektora falowego (n.p. poszukiwania stanu zlokalizowanego w defek-
cie) i / lub pojedynczego pasma, to i tak skorzystamy na przetwarzaniu równoległym. Stopień
użycia pami˛eci jest odwrotnie proporcjonalny do ilości wykorzystywanych procesorów. Dla du-
żych zadań obliczeniowych, zależność przyspieszenia od ilości wykorzystywanych procesorów
jest niemalże liniowa.
Jest jeszcze alternatywna metoda urównoleglenia; wykorzystywana gdy ma si˛e wi˛ecej, niż
˛ na wyliczaniu każdego ~k na oddzielnym procesorze. Nie zyskuje
jeden wektor falowy; polegajaca
si˛e w ten sposób na pami˛eci, ani nie można wykorzystać pól wyliczonych dla poprzedniego wek-
tora, ale za to mpb-split jest łatwe w użyciu i może być efektywnym narz˛edziem w przypadku
małych zadań obliczeniowych. Metoda ta nie wymaga MPI, gdyż wykorzystuje si˛e przetwarzanie
szeregowe programem mpb. Uruchamianie:
$ mpb-split n plik.ctl
mpb-split (albo mpbi-split) dzieli list˛e wektorów falowych k-points zawartych w pliku
plik.ctl na mniej wi˛ecej równe porcje, uruchamia n procesów mpb równolegle przetwarzaja-
˛
cych każda˛ z porcji i wypisujacych
˛ kolejno swoje rezultaty obliczeń. (Każdy proces jest zwykłym
wykonaniem mpb, z tym wyjatkiem,
˛ że wektory falowe pochodza˛ z danej porcji i sa˛ odpowied-
nio ponumerowane. Wyjście programu nie ulega nadpisywaniu i jak zwykle, w celu wydobycia
informacji, można posłużyć si˛e linuksowym narz˛edziem grep).
Oczywiście, korzystanie z mpb-split b˛edzie korzystne tylko wówczas, gdy korzystamy z sys-
temów na których różne procesy sa˛ wykonywane na różnych procesorach, t.j. komputery z proce-
sorami wielordzeniowymi lub klastry z automatyczna˛ migracja˛ procesów (n.p. MOSIX http://
www.mosix.org/. mpb-split jest właściwie prostym skryptem napisanym w shell-u (powłoce
systemowej); każdy może bez problemu wprowadzić jakieś modyfikacje uruchamiajace
˛ nowe
procesy na innych procesorach/komputerach (n.p. poprzez GNU Queue http://www.gnuqueue.
org/home.html).
B. Metoda fal płaskich
2
~∇ × 1 ~∇ × |Hi = − 1 ∂ |Hi (B.1)
ε c2 ∂t 2
~∇ · |Hi = 0 (B.2)
Szukamy wyłacznie
˛ stanów własnych w postaci fali płaskiej exp(iωt) z cz˛estotliwościa˛ ω. Po-
nadto zakładamy, że struktura kryształu fotonicznego jest doskonale periodyczna i na mocy twier-
dzenia Blocha możemy wybrać stany własne w postaci
gdzie ~k jest wektorem falowym Blocha, a |H~k i jest periodycznym polem, którego wartości sa˛
zdefiniowane w komórce elementarnej. Podstawiajac
˛ równanie (B.3) do (B.2) i (B.1) otrzymujemy
liniowe zagadnienie własne, określone na komórce elementarnej (I strefie Brillouina)
Ponieważ funkcje własne |H~k i, maja˛ postać periodycznej fali płaskiej, „zamkni˛etej” wewnatrz˛
~
I strefy Brillouina, cz˛estotliwości własne ωn (k) tworzac
˛ fotoniczna˛ struktur˛e pasmowa˛ w postaci
wielogał˛eziowych relacji dyspersyjnych przyjmuja˛ dyskretna˛ postać zależna˛ od wektora falowego
(fotoniczna struktura pasmowa lub inaczej wielogał˛eziowe relacje dyspersyjne). Pasma fotoniczne
zawieraja˛ kompletna˛ informacj˛e o wszystkich możliwych stanach własnych, lecz ze wzgl˛edu na
108 B. Metoda fal płaskich
ich nieskończona˛ liczb˛e, wybiera si˛e tylko kilka pasm o najniższych cz˛estotliwościach, mi˛edzy
którymi może wyst˛epować fotoniczna przerwa wzbroniona (zakres cz˛estotliwości, dla których
nie ma stanów własnych). Ponadto możemy wybrać funkcje własne dla danego ~k, tak aby były
ortonormalne
(n) (m)
hH~ |H~ i = δn,m . (B.6)
k k
n
H~ ∼
k= ∑ hm|bmi (B.7)
m=1
Wyrażenie (B.7) jest dokładnym rozwini˛eciem, jeśli liczba N funkcji bazowych jest nieskończona
a układ tych funkcji jest zupełny. Wówczas to otrzymujemy zwyczajne uogólnione zagadnienie
własne
ω 2
Ah = Bh (B.8)
c
1. Zbiór tych funkcji powinien tworzyć zwarta˛ reprezentacj˛e, taka˛ aby przy rozsadnej
˛ liczbie N
możliwe było otrzymanie dobrej zbieżności.
2. Jest dost˛epna wygodna i efektywna metoda wyznaczania iloczynów Ah i Bh.
3. Funkcje sa˛ do siebie ortogonalne.
W charakterze funkcji bazowych wybrano baz˛e funkcji płaskich (uzasadnienie podane jest
niżej) [6, 7, 8, 14, 11] postaci
~ m ·~x)
|bm i = exp(iG
~
|bm1 bm2 bm3 i = e−i ∑ j m j G j~x
natomiast
Nj Nj
mj = − + 1, . . . , , N = N1 N2 N3
2 2
Zatem w reprezentacji fal płaskich iloczyn Ah z równania (B.8) można obliczyć w czasie rz˛edu
O(N log N) wyznaczajac ˛ rotacj˛e w przestrzeni wektorów odwrotnych (co jest iloczynem wektoro-
wym z ~k + G
~ m ), obliczajac
˛ FFT, mnożac ˛ przez odwrotność tensora przenikalności dielektrycznej,
wyznaczajac
˛ odwrotna˛ FFT (w skrócie IFFT) i obliczajac
˛ ponownie rotacj˛e [8] otrzymujemy
Alm = − ~k + G −1 · · · FFT · · · ~k + G
~ l × · · · IFFT · · · εf ~m × (B.10)
−1 = ε−1 P + (ε̄)−1 (P − 1)
εf (B.11)
gdzie P jest macierza˛ rzutowania na n̂: Pi j = ni n j . Tutaj uśrednianie jest wykonywane po obszarze
kubicznej komórki sieci (Vogel to termin w j. ang.) otaczajacej
˛ dany punkt przestrzenny; jeśli ε
jest stała to redukuje si˛e do ε−1 .
Powyższa˛ procedur˛e można uogólnić na przypadek dielektrycznych ośrodków anizotropo-
wych (dwójłomnych), dla których tensor ε jest symetryczny i rzeczywisty. W ośrodkach magne-
tycznych tensor ten może być zespolony i hermitowski. W tym przypadku analogiczne do (B.11)
równanie jest potrzebne, które: (i) prowadzi do odwrotności efektywnego tensora przenikalności
dielektrycznej, który b˛edzie hermitowski, (ii) redukuje równanie (B.11) do postaci skalarnej ten-
sora ε, (iii) daje ε−1 dla ε = const., (iv) zapewnia fizyczna˛ poprawność i uzasadnienie różnych
typów uśredniania tensora ε−1 dla różnych typów polaryzacji, (v) podobnie jak w wyżej rozpa-
trzonym przypadku przyspiesza zbieżność. Zaproponowano wyrażenie spełniajace
˛ te kryteria w
postaci:
−1 =
1 n −1 o −1
εf ε , P + (ε̄) (P − 1) (B.12)
2
gdzie ε może być tensorem i {a, b} oznacza antykomutator, tj. ab + ba. Wtedy trzy pierwsze kry-
teria sa˛ spełnione. Fizyczne uzasadnienie zaproponowanej formuły polega na tym, że dana metoda
uśredniania powinna być stosowana, gdy albo pole lub ε−1 wymnożone z polem jest skierowane
w odpowiednim kierunku wzgl˛edem n̂, co w rezultacie prowadzi do antykomutatorów. W celu
zilustrowania wpływu na zbieżność równania (B.12) rozpatrzymy prosty przykład podobny do
112 B. Metoda fal płaskich
100
1
1 1 1 backwards
10 1
0.01
10 100
resolution (grid points / a)
rozważanego w pracy [11]: sieć kubiczna˛ powierzchniowo centrowana˛ (fcc lattice) ze stała˛ sieci a
g˛esto upakowanych sferycznych dziur w dielektrycznym ośrodku z εd = 12, w którym dziury sa˛
wypełnione anizotropowym ciekłym kryształem z εc = 2 wzdłuż kierunku [011] (x̂) oraz z ε f = 1
w kierunkach pozostałych. Wyznaczono cz˛estość 9-go pasma (tuż poniżej przerwy dla powietrz-
nych dziur) w punkcie L w funkcji kroku siatki dla 3 przypadków: (1) bez uśredniania ε; (2)
z uśrednianiem danym równaniem (B.12); (3) z uśrednianiem danym równaniem (B.12), w którym
P zastapiono
˛ przez 1 − P. Wyniki przedstawia (rys. B.1), na którym widać zauważalne przyspie-
szenie zbieżności spowodowane uśrednianiem; i odwrotnie, słaba˛ lub zła˛ zbieżność uśredniania
typu trzeciego co demonstruje znaczenie polaryzacji dla metody wygładzania. Przy uśrednianiu
typu (B.12) widoczny jest spadek wartości bł˛edów wraz z kwadratem kroku siatki, jak to jest w
standardowej metodzie FDTD.
INDEKS FUNKCJI I PROCEDUR PLIKÓW CTL 113
air, 87 display-geometric-object-info, 91
angle, 82 display-group-velocities, 98
append, 81 display-yparities, 97
display-zparities, 97
band-range-data, 88
dot-eigenvectors, 104
begin-time, 84
eigensolver-block-size, 87
cartesian->
ensure-periodicity, 85
lattice, 92
epsilon-input-file, 86
reciprocal, 92
combine-band-functions, 96 field-copy, 101
compute-energy-in-dielectric, 100 field-load, 101
compute-energy-in-objects, 100 field-make, 101
compute-energy-integral, 100 field-map, 101
compute-field-energy, 99 field-set, 101
compute-field-integral, 100 filename-prefix, 86
compute-group-velocities, 98 find-k, 95
compute-group-velocity-component, 98 find-root, 84
compute-yparities, 97 find-root-deriv, 84
compute-zparities, 97 first-brillouin-zone, 92
conj, 82 fix-dfield-phase, 96
cscalar-field-make, 101 fix-efield-phase, 96
current-k, 87 fix-field-phase, 99
cvector-field-get-point, 102 fix-hfield-phase, 96
cvector-field-get-point-bloch, 102 fold-left, 85
cvector-field-make, 101 fold-right, 85
cvector-field-nonbloch, 101, 103 freqs, 87
default-material, 85 gap-list, 87
define, 81 geometric-object-duplicates, 91
define-param, 82 geometric-objects-duplicates, 91
derivative, 84 geometric-objects-lattice-duplicates, 91
derivative2, 84 geometry, 85
deterministic?, 87 geometry-lattice, 85
display-eigensolver-stats, 94 get-bloch-field-point, 100
114 B. Metoda fal płaskich
get-dfield, 99 height, 90
get-efield, 99 radius, 90
get-efield-from-dfield, 99 dielectric, 89
get-eigenvectors, 103 epsilon, 89
get-energy-point, 100 dielectric-anisotropic, 89
get-epsilon, 99 epsilon-diag, 89
get-epsilon-inverse-tensor-point, 100 epsilon-offdiag, 89
get-epsilon-point, 100 elipsoid, 91
get-field-point, 100 lattice, 88
get-hfield, 99 basis-size, 88
get-poynting, 102 basis1,2,3, 88
get-tot-pwr, 102 size, 88
material-function, 89
imag-part, 82
obiekty geometryczne
infinity, 87
center, 90
init-params, 94
material, 90
integrate, 84
sphere, 90
integrate-fields, 102
radius, 90
interpolate, 83
make-polar, 82
iterations, 87
make-rectangular, 82
k-points, 86 matrix-3x3-inverse, 83
matrix3x3, 83
lattice-> matrix3x3*, 83
cartesian, 92 matrix3x3+, 83
reciprocal, 92 matrix3x3-, 83
list, 81 matrix3x3-adjoint, 83
load-eigenvectors, 104 matrix3x3-determinant, 83
matrix3x3-transpose, 83
magnitude, 82
maximize, 84
make, 83
mesh-size, 86
block, 90
minimize, 84
e1,e2,e3, 91
minimize-multiple, 84
size, 90
cone, 90 nothing, 87
radius2, 90 num-bands, 86
cylinder, 90
axis, 90 object-property-value, 83
INDEKS FUNKCJI I PROCEDUR PLIKÓW CTL 115
output-at-kpoint, 97 run-te, 93
output-dfield, 96 run-te-yeven, 93
output-dfield-x,y,z, 96 run-te-yodd, 93
output-dpwr, 96 run-tm, 93
output-dpwr-in-objects, 96 run-tm-yeven, 93
output-efield, 96 run-tm-yodd, 93
output-efield-x,y,z, 96 run-yeven, 93
output-epsilon, 100 run-yeven-zeven, 93
output-field, 100 run-yeven-zodd, 93
output-field-x,y,z, 100 run-yodd, 93
output-hfield, 96 run-yodd-zeven, 93
output-hfield-x,y,z, 96 run-yodd-zodd, 93
output-hpwr, 96
save-eigenvectors, 104
output-poynting, 102
set, 81
output-poynting-x,y,z, 102
set-eigenvectors, 103
output-tot-pwr, 102
set-param, 82
parity, 87 set-parity, 94
point-in-object?, 91 shift-geometric-object, 91
point-in-periodic-object?, 91 simple-preconditioner?, 87
print, 83 solve-kpoint, 94
sqmatrix-ref, 104
randomize-fields, 94 sqmatrix-size, 104
real-part, 82
reciprocal-> target-freq, 86
cartesian, 92 tolerance, 86
lattice, 92
unit-vector3, 83
resolution, 86
retrieve-gap, 97 vacuum, 87
rotate-lattice-vector3, 92 vector3, 82
rotate-reciprocal-vector3, 92 vector3*, 82
rotate-vector3, 83 vector3+, 82
rotation-matrix3x3, 83 vector3-, 82
rscalar-field-get-point, 102 vector3-cdot, 82
rscalar-field-make, 101 vector3-close, 83
run, 92 vector3-cross, 82
run-parity, 93 vector3-dot, 82
116 B. Metoda fal płaskich
vector3-norm, 82
vector3-x, 82
vector3-y, 82
vector3-z, 82
Bibliografia
[18] E. Yablonowitch. Kryształy fotoniczne, półprzewodniki światła. Świat nauki, wol. 126 (2), 2002.
[19] A. S. Bjarklev A. Bjarklev, J. Broeng. Photonic Crystal Fibers. Kluwer Academic Publishers, Boston,
1 wydanie, 2003.
[20] McGraw-Hill. “Dictionary of Scientific and Technical Terms”, 2003. http://www.answers.com/
topic/photonic-crystal.
[21] Mehmet Fatih Yanik, Shanhui Fan, Marin Soljačić i J. D. Joannopoulos. “All-optical transi-
stor action with bistable switching in a photonic crystal cross-waveguide geometry”. Opt. Lett.,
28(24):2506–2508, 2003.
URL http://ol.osa.org/abstract.cfm?URI=ol-28-24-2506
[22] Agnieszka Klauzer-Kruszyna. Propagacja światła spolaryzowanego w wybranych supersieciach ape-
riodycznych. Rozprawa doktorska, Politechnika Wrocławska, 2005.
[23] Jacek Olszewski. Analiza strat mocy w światłowodach fotonicznych wybranych typów. Rozprawa
doktorska, Politechnika Wrocławska, 2006.
[24] Piotr Czarny. Linux. Kurs. Helion, 2 wydanie, 2007. ISBN 978-83-246-0931-4.
[25] Marcel Gagné. Jak przejść na system Linux. Wydawnictwa Naukowo-Techniczne, 2008.
[26] John D. Joannopoulos, Robert D. Meade, Joshua N. Winn i Steven G. Johnson. Photonic Crystals.
Molding the Flow of Light. Princeton University Press, 2 wydanie, 2008. ISBN 978-0-691-12456-8.
http://ab-initio.mit.edu/book/.
[27] “Scheme [online]. Wikipedia : wolna encyklopedia”, 2008-04-3 08:32Z. [dostȩp: 2008-05-30
18:36Z]. Dostȩpny w Internecie: http://pl.wikipedia.org/wiki/Fullpagename?oldid=
11996168.