Download as pdf or txt
Download as pdf or txt
You are on page 1of 117

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

Opiekun: dr hab. inż. Włodzimierz Salejda, prof. nadzw. PWr

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

Wykaz ważniejszych skrótów i oznaczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

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

II. Instalacja, użytkowanie Linuksa i pakietu programów MPB

2. Wst˛ep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3. Instalacja Linuksa i pakietu MPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


3.1. Instalacja Linuksa (Kubuntu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.1. Przygotowania do instalacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.2. Uruchomienie instalatora z płyty CD/DVD . . . . . . . . . . . . . . . . . . . . . 27
3.2. Instalacja pakietu MPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4. System operacyjny Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37


4.1. System operacyjny Windows a Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.1. Użytkownicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.2. Pliki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.3. Drzewo katalogów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2. Środowisko graficzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1. Menedżer plików . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.2. Terminal (wiersz poleceń, powłoka, konsola) . . . . . . . . . . . . . . . . . . . . 42
4.2.3. Edytor plików Kate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5. Instrukcja użytkowania pakietu MPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47


5.1. Pliki ctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6 Spis treści

5.2. Tworzenie wykresów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49


5.3. Wizualizacja pól skalarnych i wektorowych . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.1. Struktury dwuwymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.2. Struktury trójwymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6. Wybrane przykłady obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55


6.1. Struktury dwuwymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1.1. Sieć kwadratowa składajaca
˛ si˛e z pr˛etów dielektrycznych . . . . . . . . . . . . . 55
6.1.2. Maksymalizacja fotonicznej przerwy wzbronionej dla polaryzacji TM . . . . . . 57
6.1.3. Sieć trójkatna
˛ w postaci dielektrycznych pr˛etów umieszczonych w powietrzu . . . 58
6.1.4. Kompletna przerwa wzbroniona w dwuwymiarowym krysztale . . . . . . . . . . 61
6.1.5. Stany zlokalizowane w defektach struktury . . . . . . . . . . . . . . . . . . . . . 62
6.2. Wyniki oryginalne (obliczenia własne) . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.2.1. Modelowanie światłowodów fotonicznych . . . . . . . . . . . . . . . . . . . . . 64
6.2.2. Struktury o skomplikowanych kształtach . . . . . . . . . . . . . . . . . . . . . . 67

7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

III. Dodatki

A. Funkcje i procedury plików ctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81


A.1. Dane i podstawowe operacje na danych (biblioteka libctl) . . . . . . . . . . . . . . . . . 81
A.1.1. Funkcje podstawowe j˛ezyka Scheme . . . . . . . . . . . . . . . . . . . . . . . . 81
A.1.2. Parametry ustawiane w wierszu poleceń . . . . . . . . . . . . . . . . . . . . . . 82
A.1.3. Liczby zespolone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
A.1.4. Wektory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
A.1.5. Macierze 3x3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.1.6. Tworzenie obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.1.7. Funkcje różne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 85
A.2.1. Zmienne wejściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.2.2. Zmienne predefiniowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
A.2.3. Zmienne wyjściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
A.2.4. Klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
A.2.5. Narz˛edzia geometrii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
A.2.6. Funkcje konwersji współrz˛ednych . . . . . . . . . . . . . . . . . . . . . . . . . 91
A.2.7. Funkcje inicjujace
˛ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
A.2.8. wektor falowy jako funkcja cz˛estotliwości ~k(ω) . . . . . . . . . . . . . . . . . . 95
A.2.9. Funkcje pasmowe przetwarzajace
˛ pola wektorowe . . . . . . . . . . . . . . . . . 95
A.2.10. Funkcje różne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
A.2.11. Parzystość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
A.2.12. Pr˛edkości grupowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
A.3. Modyfikowanie pól skalarnych i wektorowych . . . . . . . . . . . . . . . . . . . . . . . 98
A.3.1. Normalizacja pól . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
A.3.2. Ładowanie i manipulowanie bieżacym
˛ polem . . . . . . . . . . . . . . . . . . . . 99
A.3.3. Przechowywanie i wykonywanie działań na różnych polach . . . . . . . . . . . . 101
A.3.4. przechowywane pola i obwiedniej . . . . . . . . . . . . . . . . . . . . . . . . . 102
A.3.5. Manipulowanie wektorami własnymi . . . . . . . . . . . . . . . . . . . . . . . . 103
A.4. Symetria wzgl˛edem odbicia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
A.5. Obliczenia równoległe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
A.5.1. Przetwarzanie równoległe za pomoca˛ MPI . . . . . . . . . . . . . . . . . . . . . 105
A.5.2. Alternatywne rozwiazanie:
˛ mpb-split . . . . . . . . . . . . . . . . . . . . . . . . 106

B. Metoda fal płaskich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107


B.1. Zagadnienie własne Maxwella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
B.1.1. Wybór funkcji bazowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
B.1.2. Baza funkcji płaskich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
B.2. Symetria wzgl˛edem odbicia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
B.3. Efektywny tensor przenikalności dielektrycznej . . . . . . . . . . . . . . . . . . . . . . . 111
Indeks funkcji i procedur plików ctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Wykaz ważniejszych skrótów i oznaczeń

Skróty

CFPW — kompletna fotoniczna przerwa wzbroniona;


fala EM — fala elektromagnetyczna;
FPW — fotoniczna przerwa wzbroniona;
KF — kryształ fotoniczny;
MPB — Massachussets Institute of Technology Photonic Band;
TWPD — tensor wzgl˛ednej przenikalności dielektrycznej.

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
˛

Człowiek zawdzi˛ecza swoje przetrwanie i dominacj˛e w środowisku naturalnym, dzi˛eki umie-


j˛etności tworzenia nowych i ulepszania starych technologii. Kluczem do sukcesywnego post˛epu
technicznego jest rozwój nauki, a także poznawanie coraz nowszych materiałów oraz ich wła-
ściwości. W przypadku optyki, rozwój jest możliwy dzi˛eki poznawaniu i wykorzystaniu cech
optycznych materiałów.
Wraz z odkryciem w 1905 roku, że fala EM składa si˛e z kwantów energii zwanych foto-
nami, oraz skonstruowaniem lasera w 1960, optyka ewoluowała w fotonik˛e – nauk˛e zgł˛ebiajac
˛ a˛
metody wytwarzania, kontroli i detekcji światła. Do dotychczasowych, najbardziej zauważalnych
osiagni˛
˛ eć fotoniki można zaliczyć: zrewolucjonizowanie przesyłu informacji w telekomunikacji
poprzez wykorzystanie światłowodów, diagnozowanie schorzeń i ich terapi˛e za pomoca˛ światła,
oraz stworzenie ogromu powszechnie wykorzystywanych dóbr takich jak: optyczne nośniki da-
nych, wyświetlacze ciekłokrystaliczne, aparaty cyfrowe, czytniki kodów kreskowych i.t.d.
Obecnie trwaja˛ intensywne badania nad strukturami fotonicznymi – m.in. kryształami foto-
nicznymi [9, 16, 17, 18, 26] – zdolnymi kontrolować transmisj˛e światła w sposób pożadany
˛ i za-
projektowany. Materiały takie maja˛ niesamowity potencjał. Ilość patentów dotyczaca
˛ kryształów
fotonicznych jest już dosyć imponujaca
˛ (ok. 100 w Stanach Zjednoczonych, 30 w Europie i 12
w Japonii)1 a zapewne ich liczba jeszcze si˛e powi˛ekszy. Osobiście uważam, że kryształy foto-
niczne nadaja˛ si˛e do tworzenia optycznych odpowiedników cz˛eści elektronicznych (przykład tran-
zystora [21]), z których później można by zbudować superwydajne, energooszcz˛edne komputery
optyczne.
Do najistotniejszych cech kryształów fotonicznych należy zaliczyć:

— Jest to struktura przestrzenna składajaca


˛ si˛e z okresowo zmieniajacych
˛ si˛e obszarów o różnych
wartościach współczynnika załamania,
— rozmiary liniowe elementów struktury KF sa˛ porównywalne z długościa˛ fali elektromagne-
tycznej,
— przedział widma fal, które nie propaguja˛ si˛e w krysztale określa fotoniczna przerwa wzbro-
niona. Dodatkowo jeżeli przerwa ta nie zależy od kierunku propagacji fali, nazywana jest
kompletna˛ fotoniczna˛ przerwa˛ wzbroniona,˛

1 według http://www.pbglink.com/patents.html
12 Wst˛ep

— możliwość modelowania transmisji światła poprzez wprowadzenie defektów do struktury (świa-


tłowody fotoniczne [19]).

Cel pracy

Najważniejsze cele mojej pracy to:

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.

Pakiet MPB pozwala użytkownikowi na wyznaczenie:

— zależności dyspersyjnych ω(~k), składajacych


˛ si˛e na pasmowa˛ struktur˛e fotoniczna,˛
— rozkładu w strukturze fotonicznej wektorów pola elektrycznego i magnetycznego, odpowia-
dajacych
˛ ω(~k),
— wyznaczenie g˛estości energii pola elektromagnetycznego odpowiadajacej
˛ stanowi własnemu
o cz˛estości ω(~k),
— rozkładu przestrzennego wektorów Poyntinga,
— stanów zlokalizowanych pola elektromagnetycznego.

W szczególności pakiet MPB umożliwia zbadanie zależności wyżej wymienionych charaktery-


styk od stałej dielektrycznej oraz od geometrycznych charakterystyk elementów tworzacych
˛ dana˛
struktur˛e fotoniczna.˛
Prac˛e podzieliłem na dwie cz˛eści. Pierwsza zawiera wprowadzenie teoretyczne do MPB. Zaj-
muj˛e si˛e w niej wyprowadzeniem zagadnienia własnego Maxwella oraz przedstawiam teori˛e po-
trzebna˛ do zrozumienia czym sa˛ pasmowe struktury fotoniczne.
W drugiej cz˛eści prezentuj˛e sposób instalowania i posługiwania si˛e pakietem MPB na platfor-
mie Linuksa, opisuj˛e algorytmy stosowane w pakiecie oraz przedstawiam samodzielnie wykonane
wyniki obliczeń numerycznych z wykorzystaniem MPB.
Cze˛ ść I

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

Sposób oddziaływania kryształu fotonicznego na światło (w dużym uproszczeniu) jest nast˛e-


pujacy.
˛ Fale EM w zależności od typu polaryzacji i cz˛estotliwości ω, propagujace
˛ si˛e w krysztale
niejednorodnym optycznie, oddziaływuja˛ z materiałem kryształu (atomami, molekułami, elemen-
tami struktury), ulegaja˛ licznym odbiciom, załamaniom oraz konstruktywnej i destruktywnej in-
terferencji. To jakie cz˛estotliwości fal i w jakim kierunku b˛eda˛ przepuszczane przez kryształ, za-
leży wyłacznie
˛ od jego budowy i użytych materiałów. Skad
˛ wiadomo, że jakaś fala EM o zadanej
cz˛estotliwości b˛edzie propagować si˛e w krysztale?
Na tak postawione pytanie odpowiadamy rozwiazuj
˛ ac ˛ numerycznie równania Maxwella. Prze-

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.

1.1. Zagadnienie własne Maxwella

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).

1.1.1. Równania Maxwella w niejednorodnym ośrodku dielektrycznym

W przypadku braku wolnych nośników ładunku oraz pradu


˛ elektrycznego, równania Ma-
xwella przyjmuja˛ postać

∇ × ~E(~r,t) = − ~B(~r,t), (1.1)
∂t
~ r,t) = ∂ ~D(~r,t),
∇ × H(~ (1.2)
∂t
∇ · ~D(~r,t) = ∇ · ~B(~r,t) = 0. (1.3)

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:
˛

~D(~r) = ε0 ε(~r)~E(~r), (1.4)


~B(~r) = µ0 H(~
~ r). (1.5)

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

Szukamy stacjonarnych rozwiazań


˛ równań Maxwella (1.6) dla wektorów ~E(~r,t) i H(~
~ r,t),
w których zależności pól od czasu i zmiennej przestrzennej wyst˛epuja˛ oddzielnie w formie ilo-
czynu funkcji ~A(~r) · B(t), t.j.

~E(~r,t) = ~E(~r) exp(−iωt),


(1.7)
~ r,t) = H(~
H(~ ~ r) exp(−iωt).

W celu otrzymania zagadnienia własnego Maxwella, podstawiamy (1.7) do (1.6) i otrzymu-


jemy

~ r),
∇ × ~E(~r) = −i ωµ0 H(~ (1.8)
~ r) = i ωε0 ε(~r)~E(~r).
∇ × H(~ (1.9)

Z równania (1.9) wyznaczamy ~E(~r) i podstawiamy do (1.8)

~
 
~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

Ostatecznie otrzymujemy równanie własne, nazywane równaniem podstawowym albo podsta-


wowym zagadnieniem własnym

1  2
∇× ~ n (~r) = ωn H
∇×H ~ n (~r) (1.10)
ε(~r) c
18 1. Kryształy fotoniczne

Pole ~En (~r) wylicza si˛e ze wzoru

~En (~r) = −i ~ n (~r),


∇×H (1.11)
ωn ε0 ε(~r)

gdyż to gwarantuje spełnienie warunku ∇ · ~E(~r) = 0, ponieważ dywergencja z rotacji zawsze jest
równa zeru [26].

Właściwości równania podstawowego

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:

— wartości własne równania (cz˛estotliwości ωn ) sa˛ rzeczywiste,


— stany własne Hn (r) sa˛ ortogonalne i tworza˛ zupełny układ funkcji.

Równania Maxwella oraz podstawowe zagadnienie własne (w tym równanie podstawowe)


sa˛ w pełni skalowalne co oznacza, że struktura fotoniczna o wartości własnej ωn i stałej siatki
a ma takie same wektory własne jak struktura o stałej siatki a ∗ s i cz˛estotliwości własnej ωn /s.
Praktycznie oznacza to, że możemy testować kryształ fotoniczny, którego stała siatki ma rozmiary
centymetrowe (zakres widma elektromagnetycznego odpowiadajacego
˛ mikrofalom) a otrzymane
wyniki przeskalować na inne cz˛estości widma [26].

1.1.2. Twierdzenie Floqueta – Blocha

Przedmiotem pracy sa˛ periodyczne struktury fotoniczne (kryształy fotoniczne) wykazujace


˛
translacyjna˛ niezmienniczość. Własność t˛e posiada także funkcja dielektryczna wykazujaca
˛ sy-
metri˛e translacyjna˛ sieci Bravais’go ε(~r) = ε(~r + ~R), gdzie

3 ~ai – wektory translacji podstawowej, |~ai | – stałe siatki


~R = ∑ hi ·~ai , gdzie
i=1 hi – dowolne liczby całkowite,

Ze wzgl˛edu na okresowa˛ niezmienniczość, funkcj˛e ε(~r) można poddać analizie Fouriera:


 
~ ~ ~ ~ ~ ~
ε(~r) = ∑ κ(G) exp(iG ·~r) = ε(~r + R) = ∑ κ(G) exp iG · (~r + R) =
~
G ~
G
(1.12)
~ exp(iG
= ∑ κ(G) ~ ·~r) exp(iG
~ · ~R)
~
G
1.1. Zagadnienie własne Maxwella 19

~ sa˛ współczynnikami amplitudowymi fal płaskich exp(iG


gdzie κ(G) ~ ·~r), a G
~ jest dowolnym wek-
torem translacji sieci odwrotnej

hi – dowolne liczby całkowite,


3
~ = ∑ hi ·~bi , gdzie ~bi – wektory translacji podstawowej w sieci odwrotnej,.
G
i=1
|~bi | = 2π/|~ai | – stałe sieci odwrotnej

Z równania (1.12) wynika również zależność mi˛edzy wektorami translacji: sieci Bravais’go i sieci
odwrotnej w postaci

exp(iG~ · ~R) = 1 ⇒ G ~ · ~R = 2πm, m – dowolna liczba całkowita

~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 )

~ n (~r) zagadnienia własnego w oparciu o twierdzenie Floqueta - Blocha maja˛


Funkcje własne H
postać iloczynu fali płaskiej i periodycznej funkcji wektorowej ~un,~k (~r) wykazujacej
˛ taka˛ sama˛
symetri˛e oraz periodyczność jak ε(~r)

~ ~ (~r) = ~u ~ (~r) · exp(i~k ·~r),


Hn,k n,k
(1.13)
~un,~k (~r) = ~un,~k (~r + ~R).

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

1.1.3. Równania Maxwella w periodycznym, niejednorodnym ośrodku dielektrycznym

Podstawiajac ˛ (1.13) do zagadnienia własnego Maxwella (1.10) otrzymujemy


 ~ 2
∇ × ε(~1r) ∇ ×~un,~k (~r) · exp(i~k ·~r) = ωnc(k) ~un,~k (~r) · exp(i~k ·~r)
!2

~
 1 ~  ωn (~k)
ik + ∇ × ik + ∇ ×~un,~k (~r) = ~un,~k (~r) (1.14)
ε(~r) c

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:

— funkcja musi mieć form˛e fali poprzecznej (i~k + ∇) ·~un,~k (~r) = 0,


— oraz być periodyczna ~un,~k (~r) = ~un,~k (~r + ~R)

oraz n cz˛estotliwości własnych ωn (~k), rosnacych


˛ wraz indeksem n, b˛edacych
˛ funkcjami ciagłymi
˛
wektora falowego ~k. Funkcje ωn (~k) określaja˛ relacje dyspersyjne, a przedstawione w postaci wy-
kresu, tworza˛ fotoniczna˛ struktur˛e pasmowa.˛
Pakiet MPB analizuje i rozwiazuje
˛ numerycznie zagadnienie własne (1.14) stosujac
˛ jako funk-
cje bazowe, układ zupełnych i ortogonalnych fal płaskich. Szczegóły tego podejścia opisane sa˛
w pracy [15] oraz w dodatku B.
Cze˛ ść II

Instalacja, użytkowanie Linuksa i pakietu


programów MPB
2. Wstep
˛

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

Linux jest systemem operacyjnym, stworzonym z poczatku


˛ pod architektur˛e i386, kompatybil-
nym z system operacyjnym UNIX. Nazwa jest najprawdopodobniej zbitkiem słów Linus i Unix
(badź
˛ Minix). System ten jest rozwijany poczawszy
˛ od sierpnia 1991 roku, a pierwsze jego dys-
trybucje pojawiły si˛e w 1993 roku. Z poczatku
˛ był to system dla pasjonatów – programistów i ad-
ministratorów sieciowych, jednak z czasem stawał si˛e coraz bardziej przyjazny dla przeci˛etnego
użytkownika. Powstało wiele graficznych środowisk pracy i różnorodnych, przydatnych aplikacji.
Obecnie funkcjonalnościa˛ Linux dorównuje systemom Microsoft Windows jednak przestawienie
si˛e na Linuksa może być kłopotliwe. Problemem może okazać si˛e: inne uporzadkowanie
˛ plików
i katalogów, podział zadań w systemie na te wykonywane przez użytkownika (ma ograniczone
uprawnienia) i administratora, oraz znalezienie odpowiedników używanych dotychczas progra-
mów.
System Linux od poczatku
˛ jest rozwijany jako wolne i otwarte oprogramowanie, co oznacza,
że każdy może je dowolnie użytkować, modyfikować i rozpowszechniać pod warunkiem, że każdy
ma dost˛ep do (zmodyfikowanego) kodu źródłowego. Gwarantem tego typu wolności sa˛ licencje
typu GPL (GNU General Public License), LGPL (GNU Lesser General Public License), BSD
(Berkeley Software Distribution License) i tym podobne.

Dystrybucja Linuksa

Jest to zestaw programów użytkowych rozpowszechnianych łacznie


˛ z systemem operacyjnym.
W przypadku Linuksa jest wiele dystrybucji, które różnia˛ si˛e mi˛edzy soba:
˛

— przeznaczeniem (na serwery, dla użytkowników domowych, do naprawy komputera, . . . ),


— wielkościa˛ (od pojedynczych dyskietek po zestawy płyt DVD),
— sposobem instalacji (poprzez kompilacj˛e ze źródeł programów lub poprzez instalacj˛e goto-
wych pakietów z internetu badź
˛ płyty CD, DVD),
24 2. Wst˛ep

— rodzajem pakietów instalacyjnych 1 (DEB, RPM,. . . ),


— sposobem konfiguracji (r˛eczna poprzez edycj˛e plików konfiguracyjnych badź
˛ automatyczna),
— graficznym środowiskiem pracy . Najcz˛eściej jest to KDE (http://www.kde.org) albo
GNOME (http://www.gnome.org),
— narz˛edziami administracyjnymi oraz pod wieloma innymi wzgl˛edami.

Spis i opis 10 najpopularniejszych dystrybucji Linuksa można znaleźć na stronie


http://distrowatch.com/dwres.php?resource=major.
Od dłuższego czasu na 1. miejscu mieści si˛e dystrybucja Ubuntu. Jest to przyjazny system opera-
cyjny dla poczatkuj
˛ acych
˛ użytkowników, umożliwiajacy
˛ w łatwy sposób instalacj˛e pakietu MPB.
Właśnie z tych powodów opisuj˛e w tej pracy instalacj˛e i użytkowanie odmiany tejże dystrybucji
– Kubuntu.

Czym jest pakiet MPB

Pakiet MPB (Massachusetts Institute of Technology Photonic Band ) to zestaw programów do


obliczeń struktury pasmowej (relacji dyspersyjnych ωn (~k)) i stanów polaryzacji fal elektromagne-
tycznych w periodycznych strukturach dielektrycznych, stworzony przez Steven’a G. Johnson’a
w MIT pod kierownictwem grupy badawczej prof. John’a D. Joannopoulos o nazwie „Ab-Initio".
Do najważniejszych cech pakietu MPB należa:
˛

— w pełni wektorowe, trójwymiarowe obliczenia za pomoca˛ iteracyjnych technik analizy zagad-


nień własnych,
— bezpośrednie rozwiazywanie
˛ zagadnień własnych w domenie cz˛estotliwości co oznacza jed-
noczesne otrzymywanie wartości własnych (cz˛estotliwości) i funkcji własnych (stanów pola-
ryzacji),
— rozwiazania
˛ zagadnienia własnego można ukierunkować na dana˛ cz˛estotliwość, możliwe jest
obliczenie cz˛estotliwości najbliższych zadanej przez nas cz˛estotliwości, co ogranicza ilość
obliczanych pasm fotonicznych,
— elastyczny, opierajacy
˛ si˛e na j˛ezyku skryptowym Scheme interfejs użytkownika,
— wsparcie dla dowolnych komórek elementarnych i struktur anizotropowych (właczaj˛ ac
˛ w to
materiały magnetooptyczne),
— kształt pola wektorowego (elektromagnetycznego) w krysztale jest zapisywany do pliku w for-
macie HDF5 co umożliwia podglad ˛ w wielu programach do wizualizacji danych,
— przenośność mi˛edzy wieloma uniksowymi systemami,
— wsparcie dla wykonywania obliczeń zarówno na superkomputerach, jak i komputerach stacjo-
narnych,
1 zawierajacych
˛ programy oraz informacje o zależnościach mi˛edzy nimi, umożliwiajacych
˛ łatwa˛ i szybka˛ insta-
lacj˛e i deinstalacj˛e
25

— pakiet jest darmowym oprogramowaniem wydanym na licencji GPL [5]


3. Instalacja Linuksa i pakietu MPB

3.1. Instalacja Linuksa (Kubuntu)

3.1.1. Przygotowania do instalacji

Przed przystapieniem
˛ do instalacji należy:

— pobrać obraz płyty instalacyjnej ze strony http://www.kubuntu.org/getkubuntu/download,


— nagrać obraz płyty za pomoca˛ odpowiedniego programu1 ,
— zarchiwizować możliwie wszystkie istotne dane na istniejacych
˛ partycjach, nikt i nic nie zagwarantuje,
że cały proces instalacji przebiegnie pomyślnie, mimo iż zazwyczaj odbywa si˛e bezproblemowo.
— upewnić si˛e, że dysponuje si˛e wolna˛ przestrzenia˛ na dysku w celu utworzenia nowych, natywnych par-
tycji dla Linuksa, zgodnie z zalecanymi, minimalnymi wymaganiami, potrzebne jest minimum 8 GB
miejsca na dysku, jeżeli nie posiadamy takiej ilości wolnego miejsca, należy zdecydować si˛e na usuni˛e-
cie którejś partycji logicznej2 albo na użycie komercyjnych programów do manipulowania partycjami
(umożliwiajacych
˛ zmian˛e rozmiaru partycji, ich położenia na dysku i.t.d.).

3.1.2. Uruchomienie instalatora z płyty CD/DVD

W przypadku gdy po właczeniu


˛ komputera i włożeniu płyty do nap˛edu nie uruchamia si˛e
instalator należy:

1. Uruchomić ponownie komputer.


2. Wejść do konfiguracji Biosu. Kombinacja klawiszy która jest do tego potrzebna jest wyświe-
tlana podczas uruchamiania komputera w dolnej cz˛eści ekranu.
3. Wybieramy opcj˛e Advanced BIOS Features, Advanced Setup,. . . . Różne wersje Biosu moga˛
mieć ta˛ opcj˛e różnie nazwana.˛
4. Przejść do pozycji 1st Boot Device, First Boot Device,. . . , i.t.p. i klawiszami +, − ustawić
w tym polu wartość CD-ROM (rys. 3.1 na nast˛epnej stronie).
5. Dla pewności, że wystartuje nam system operacyjny po wyj˛eciu płyty z nap˛edu, kolejna˛ pozy-
cj˛e (Second Boot Device, Third Boot Device) ustawiamy na Hard Disk badź
˛ HDD.
1 hasło w google: "programy do nagrywania CD DVD"
2 Standardowo dyski twarde w komputerach PC dzieli si˛e na od 1 do 3 partycji podstawowych i jedna˛ partycje
rozszerzona˛ zawierajac
˛ a˛ partycje logiczne
28 3. Instalacja Linuksa i pakietu MPB

Rysunek 3.1. Ustawienie w Biosie kolejności inicjowanych urzadzeń,


˛ tak aby zainstalować Linuksa z płyty
CD/DVD. BIOS może wygladać ˛ inaczej na różnych komputerach

6. Po wprowadzeniu zmian należy je zatwierdzić klawiszem F10. Spowoduje to zapisanie zmian,


ponowne uruchomienie komputera i start instalatora z płyty.
7. W środkowej cz˛eści ekranu powinna być widoczna lista siedmiu funkcji, pomi˛edzy którymi
przemieszczamy si˛e strzałkami i zatwierdzamy klawiszem ENTER, a u dołu funkcje przypi-
sane do klawiszy of F1 do F6 (rys. 3.2 na nast˛epnej stronie).
8. Domyślnym j˛ezykiem jest angielski. Wybór j˛ezyka polskiego podczas instalacji umożliwia
klawisz F2,
9. Instalator umożliwia dodatkowo przetestowanie pami˛eci RAM oraz płyty CD/DVD pod katem
˛
spójności danych:
— testowanie płyty odbywa si˛e po wybraniu strzałkami i zatwierdzeniu opcji Sprawdź CD
pod katem
˛ bł˛edów odczytu w środkowej cz˛eści ekranu. Dokładnie taka nazwa pojawi si˛e,
jeżeli wybierzemy j˛ezyk polski (punkt 8),
— pami˛eć RAM zostanie przetestowana jeżeli, uprzednio po wybraniu j˛ezyka polskiego, wy-
bierzemy polecenie Test pami˛eci; testowanie przerywa si˛e klawiszem Esc.
10. Właściwa instalacja rozpocznie si˛e, gdy wybierzemy opcje Uruchom Kubuntu (rys. 3.2) i po
uruchomieniu środowiska graficznego klikniemy w lewym, górnym rogu ekranu ikonk˛e Install
(rys. 3.3).
11. Kreator instalacji zada nam kilka pytań m.in. o j˛ezyk, stref˛e czasowa˛ i układ klawiatury,
3.1. Instalacja Linuksa (Kubuntu) 29

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.

Rysunek 3.5. Finalny, 6. krok kreatora instalacji


3.1. Instalacja Linuksa (Kubuntu) 31

(a) Krok 1. Wybór j˛ezyka (b) Krok 2. Wybór strefy czasowej

(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

Rysunek 3.4. Poszczególne kroki kreatora instalacji


32 3. Instalacja Linuksa i pakietu MPB

(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
/

(e) Po utworzeniu partycji Ext2, swap i Ext3 wciskamy


przycisk „Next >”

Rysunek 3.6. Etapy tworzenia partycji linuksowych


3.2. Instalacja pakietu MPB 33

Rysunek 3.7. Program rozruchowy systemów operacyjnych (z ang. bootloader) uruchamiany podczas
startu komputera

3.2. Instalacja pakietu MPB

Po ponownym uruchomieniu komputera, zakończeniu działania BIOS’u na ekranie zastaniemy


program rozruchowy (z ang. bootloader) (rys. 3.7) umożliwiajacy
˛ wybór systemu operacyjnego
(Linux albo Windows). Po załadowaniu si˛e systemu Linux pojawia si˛e ekran z prośba˛ o podanie
loginu i hasła. Po ich wpisaniu i zatwierdzeniu uruchamia si˛e graficzne środowisko pracy KDE
(rys. 3.8(a)).
Nast˛epnie klikamy Menu KDE, przechodzimy na zakładk˛e System i wybieramy Zarzadc˛
˛ e
pakietów Adept (rys. 3.8(b)). Zostaniemy poproszeni o hasło (takie samo jak przy logowaniu).
Szczegóły odnośnie instalowania pakietów zamieściłem na rysunku 3.8(c). Oprócz pakietu mpb
sugeruj˛e jeszcze zainstalować nast˛epujace
˛ programy:

— mpb-doc – dokumentacja w j˛ezyku angielskim, wraz z przykładami


— h5utils – sa˛ to narz˛edzia pozwalajace
˛ na obróbk˛e danych zapisanych w plikach w formacie
HDF5 (Hierarchical Data Format, rozszerzenie h5), m.in. zapis do postaci obrazu png (wizu-
alizacja amplitud pól wektorowych w 2D) i plików z rozszerzeniem vtk (obiekty 3D),
— mayavi2 – wizualizacja obiektów 3D zapisanych w plikach vtk,
— gri – j˛ezyk programowania idealny do tworzenia skomplikowanych wykresów 2D, posiada
wiele możliwości nieosiagalnych
˛ w programach z interfejsem graficznym3 , raz „zaprogramo-
wany” wykres może być wykorzystywany wielokrotnie do pokazywania danych tego samego
typu, tworzy wykresy w formie obrazów z rozszerzeniem ps (PostScript),
— imagemagick – pakiet zawierajacy
˛ program convert pozwalajacy
˛ na konwersj˛e mi˛edzy róż-
nymi formatami obrazów, za jego pomoca˛ wykresy stworzone przez Gri można zapisać do
dowolnego innego formatu (png, jpg, eps, pdf, i.t.d.)

3 http://gri.sourceforge.net/
34 3. Instalacja Linuksa i pakietu MPB

(a) Interfejs KDE

(b) Uruchomienie zarzadcy


˛ pakietów
3.2. Instalacja pakietu MPB 35

(c) Wprowadzanie nazw pakietów do zainstalowania. Operacje powtarzamy dla pakietów


mpb, mpb-doc, h5utils, mayavi2, gri, imagemagick

(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

Rysunek 3.8. Program zarzadzaj


˛ acy
˛ oprogramowaniem. Instalacja pakietów
4. System operacyjny Linux

4.1. System operacyjny Windows a Linux

4.1.1. Użytkownicy

W systemie Linux wszyscy użytkownicy musza˛ si˛e logować podajac


˛ swoja˛ nazw˛e i hasło.

Dzi˛eki takiemu podejściu możliwe jest odseparowanie danych poszczególnych użytkowników


w ich własnych katalogach domowych (w folderze /home) oraz nadawanie różnych uprawnień
poszczególnym użytkownikom. Konta „zwyczajnych” użytkowników maja˛ ograniczone upraw-
nienia. Pełne prawa posiada tylko i wyłacznie
˛ administrator systemu (konto root). Administrator
może zrobić z systemem dosłownie wszystko, nawet „niechcacy”
˛ go uszkodzić. Dlatego do co-
dziennej pracy zaleca si˛e korzystanie z konta zwykłego użytkownika i przechodzenie na konto
administratora tylko wtedy, gdy jest to konieczne. W systemie Kubuntu odbywa si˛e to automa-
tycznie, tzn. zawsze, gdy chcemy zainstalować jakieś oprogramowanie lub zmienić ustawienia
systemowe, musimy podać hasło administratora systemu (takie samo jak przy logowaniu) (rys.
4.1).
38 4. System operacyjny Linux

Rysunek 4.1. Prośba o podanie hasła administratora po uruchomieniu zarzadcy


˛ pakietów Adept

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:

— Prawo do odczytu: umożliwia przegladanie


˛ pliku, bez możliwości zapisu. Prawo to obowia-
˛
zuje tylko w katalogu w którym plik si˛e znajduje. Po zmodyfikowaniu plik można zapisać
w innym miejscu,
— zapisu: umożliwia zapisanie pliku w miejscu w którym był edytowany,
— wykonania: umożliwia uruchomienie programów. W przypadku katalogów, prawo to umoż-
liwia wejście do katalogu.

Prawa dost˛epu sa˛ stosowane wzgl˛edem:

— 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]

4.1.3. Drzewo katalogów

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

W przypadku Linuksa, plik mógłby znajdować si˛e w

/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]

/etc Najważniejsze pliki konfiguracyjne


/home Katalogi domowe użytkowników
Biblioteki programistyczne wykorzystywane przez programy z katalo-
/lib
gów /bin i /sbin
/lost+found Pliki odzyskane po ewentualnej awarii systemu plików
Dowiazania
˛ do wszystkich przenośnych mediów t.j. pendrive, CD,
/media
DVD
/mnt Dowiazania
˛ do wszystkich partycji
Oprogramowanie dodatkowe (n.p. oprogramowanie nie wchodzace ˛
/opt
w skład dystrybucji, oprogramowanie komercyjne)
Wirtualny system plików (nie istniejacy
˛ na dysku) zawierajacy
˛ infor-
/proc
macje o zasobach systemowych i uruchomionych procesach
Katalog administratora systemu (użytkownik root). Użytkownicy nie
/root
znajacy
˛ hasła administratora nie maja˛ tutaj dost˛epu
Programy użytkowane przez system i administratora (n.p. reboot – re-
/sbin
start komputera)
/tmp Pliki tymczasowe, usuwane podczas restartu komputera
Programy (/usr/bin, /usr/sbin), biblioteki oraz dokumentacja wy-
/usr
korzystywane przez użytkowników
Pliki ulegajace
˛ cz˛estym zmianom: logi systemowe, bazy danych,
/var
poczta, strony internetowe i.t.d.
Tablica 4.1. Drzewo katalogów w systemie Linux
40 4. System operacyjny Linux

4.2. Środowisko graficzne

KDE (standardowa nazwa w j˛ezyku angielskim środowiska to K Desktop Environment) jest


przyjaznym dla użytkownika, podobnym w odczuciu do systemu MS Windows, graficznym śro-
dowiskiem pracy.

Rysunek 4.2. Opis widocznych elementów KDE

Na pulpicie możemy umieszczać wszystkie dowolne pliki i dokumenty, a ponadto (poprzez


ikony) mamy dost˛ep do wszystkich przenośnych urzadzeń
˛ zewn˛etrznych.
W dolnej cz˛eści ekranu widoczny jest prostokatny
˛ pasek, zwany panelem. Na panelu umiesz-
czone sa˛ w kolejności od lewej do prawej:

— 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.

4.2.1. Menedżer plików

Menedżer plików uruchamia si˛e zawsze, gdy wybierzemy któraś


˛ z pozycji z menu System
albo otworzymy katalog na pulpicie. Służy on do wykonywania operacji na plikach i katalogach
t.j.: tworzenie, kopiowanie, zmian˛e nazwy, zmian˛e właściwości (prawa dost˛epu, udost˛epnianie
w sieci) oraz do uruchamiania programów obsługujacych
˛ dany format plików. Działa podobnie
jak menedżer plików w systemie Windows.

Rysunek 4.3. Menedżer plików


42 4. System operacyjny Linux

4.2.2. Terminal (wiersz poleceń, powłoka, konsola)

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:

— w menu KDE wybieramy zakładk˛e System i uruchamiamy Konsola – Program terminala,


— w menedżerze plików, z górnego paska menu wybieramy Narz˛edzia a nast˛epnie Otwórz Ter-
minal,
— w edytorze plików Kate, jako jedna z zakładek w dolnej cz˛eści interfejsu programu.

Standardowo wiersz poleceń oferuje około 300 komend działajacych


˛ w trybie tekstowym
(liczba ta zależy od ilości zainstalowanych pakietów). Lista najbardziej przydatnych, najcz˛eściej
używanych poleceń została zamieszczona w tabeli 4.2.

Rysunek 4.4. Wiersz poleceń nazywany też powłoka,˛ terminalem, konsola˛


4.2. Środowisko graficzne 43

wypisuje na wyjście zawartość każdego podanego pliku, n.p. cat plik1


cat
plik2 wypisze najpierw zawartość pliku plik1 a potem plik2
przejście do nowego katalogu, n.p. cd /home spowoduje przejście do kata-
cd logu /home, cd .. – przejście do katalogu nadrz˛ednego, cd ˜ – przejście do
katalogu domowego użytkownika
clear czyszczenie ekranu terminala
kopiuje pliki, n.p. cp plik_a plik_b skopiuje plik_a do pliku plik_b
cp w bieżacym
˛ katalogu, cp /̃Desktop/plik /media/floppy skopiuje plik
z pulpitu na dyskietk˛e
exit kończenie sesji Terminala
grep wzorzec plik przeszukuje plik szukajac ˛ linii tekstu zawierajacej
˛
grep
coś z podanego wzorca
kończenie (zabijanie) wybranych, uruchomionych przez nas programów /
killall procesów, n.p. killall mc zakończy działanie wszystkich uruchomionych
programów Midnight Commander.
wypisywanie zawartości pliku na ekranie, daje możliwość przewijania zawar-
less
tości ekranu w gór˛e i w dół
wypisywanie zawartości katalogu. ls /̃katalog wypisuj˛e list˛e plików i ka-
ls
talogów w folderze /̃katalog
pwd wypisywanie nazwy bieżacego
˛ katalogu
przenoszenie albo zmiana nazwy pliku, przenoszenie odbywa si˛e mi˛edzy róż-
nymi katalogami n.p. mv ./folderA/stary.plik ./folderB przeniesie
mv
stary.plik do folderu folderB, zmiana nazwy nast˛epuje gdy podamy dwie
różne nazwy plików n.p. mv plik_a plik_b
mkdir tworzy katalogi
wyświetla instrukcj˛e (z ang. manual) posługiwania si˛e zadanym poleceniem,
man
n.p. man ls wyświetli instrukcj˛e dla polecenia ls
skrót mc oznacza nazw˛e programu Midnight Commander, jest to program
mc wzorowany na Norton Commanderze, przystosowany do systemów unikso-
podobnych. (rys. 4.5)
ps ps -A wyświetla list˛e wszystkich uruchomionych procesów
rmdir usuwanie pustego katalogu
rm usuwanie plików
po wprowadzeniu hasła wykonuje dowolne polecenie na prawach administra-
sudo
tora (n.p. sudo cp plik /usr/local/bin)
czyta ze standardowego wejścia i przesyła kopi˛e na standardowe wyjście oraz
tee
do pliku
top wyświetla list˛e najaktywniejszych procesów
touch touch plik tworzy pusty plik
Tablica 4.2. Lista wybranych poleceń które można wpisać w terminalu
44 4. System operacyjny Linux

W przypadku problemów z jakaś


˛ komenda˛ albo jeżeli chcemy przypomnieć sobie z jakimi
opcjami można uruchomić dany program, możemy po prostu wpisać w terminalu polecenie z
opcja˛ --help n.p.: tee --help.

Rysunek 4.5. Interfejs programu Midnight Commander, wzorowany na Norton Commanderze

4.2.3. Edytor plików Kate

Kate to prosty w obsłudze edytor plików tekstowych, idealnie nadajacy


˛ si˛e do tworzenia pli-
ków wsadowych dla pakietu MPB. Program, za pomoca˛ wielu wtyczek, potrafi podświetlać skład-
ni˛e niemalże dowolnego j˛ezyka programowania, robić automatycznie wci˛ecia, oraz pokazywać
poczatek
˛ i koniec danej funkcji. Na rys. 4.6 widzimy, że każda funkcja wraz z argumentami
mieści si˛e w odpowiednio pokolorowanych nawiasach. Jest to przydatne, gdyż nawiasy musza˛
si˛e znajdować we właściwych miejscach oraz ilość otwieranych „(” i zamykanych nawiasów „)”
musi być taka sama.
Program kate można uruchomić z kilku pozycji w systemie:

— menu KDE → Narz˛edzia → Kate,


— używajac
˛ kombinacji klawiszy „Alt + F2” i wpisujac
˛ kate,
4.2. Środowisko graficzne 45

— 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”.

Rysunek 4.6. Interfejs programu 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

Przedstawiona˛ tutaj instrukcj˛e napisałem w oparciu o angielska˛ wersj˛e pochodzac


˛ a˛ z [3] oraz
[4].

5.1. Pliki ctl

Pakiet MPB jest zbiorem programów, funkcjonujacych


˛ wyłacznie
˛ w Terminalu, wykonywu-
jacych
˛ symulacje na podstawie informacji zawartych w plikach tekstowych z rozszerzeniem ctl.
Wyszczególnia si˛e w nich geometri˛e kryształu fotonicznego, ilość stanów własnych do policze-
nia oraz dane jakie chcemy uzyskać. Pliki ctl maja˛ postać skryptu, co oznacza, że moga˛ za-
równo składać si˛e z prostych sekwencji komend definiujacych
˛ n.p. geometri˛e komórki elemen-
tarnej, jak i mieć postać w pełni rozwini˛etych programów wykorzystujacych
˛ elementy j˛ezyka
Scheme. Jeżeli został zainstalowany pakiet mpb-doc, przykładowe pliki znajda˛ si˛e w katalogu
/usr/share/doc/mpb-doc/examples.
Przedstawiony tutaj opis zawartości plików jest dosyć powierzchowny. Szczegóły odnośnie
wszystkich funkcji jakich można użyć, znajduja˛ si˛e w dodatku A. Aby obliczyć struktur˛e foto-
niczna˛ wybranych przez nas kryształów fotonicznych, w pliku ctl musimy określić:

— 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.

( set ! geometry-lattice ( make lattice ( size a b c ) ( basis-size a b c )


( basis1 x1 y1 z 1 )
( basis2 x2 y2 z 2 )
( basis3 x3 y3 z 3 )
))

— nazwy odpowiednich materiałów. — szczegóły w dodatku A.2.2 na 87 stronie, A.2.4. Przy-


kładowy fragment podajemy niżej.
48 5. Instrukcja użytkowania pakietu MPB

( define d i e l 1 ( make dielectric ( epsilon e p s ) ) )


( define d i e l 2 ( make dielectric ( index i n d ) ) )
( define a n i s o ( make dielectric-anisotropic ( epsilon-diag a b c ) ) )
( set ! default-material d i e l 1 ) ; ustanowienie materialu zajmujacego
; p r z e s t r z e n ( domyslnie powietrze )

— położenie obiektów geometrycznych w komórce elementarnej we współrz˛ednych i jednost-


kach wektorów bazowych. Przykładowy fragment podajemy niżej.

( set ! geometry ( list


( make cylinder ( center x y z ) ( radius r ) ( height h ) ( material air )
[ ( axis z ) ] )
( make cone ( center x y z ) ( radius r 1 ) ( radius2 r 2 ) ( height h )
( material mat ) [ ( axis z ) ] )
( make block ( center x y z ) [ ( e1 x1 y1 z 1 ) ] [ ( e2 x2 y2 z 2 ) ]
[ ( e3 x3 y3 z 3 ) ] ( size ax by c z ) ( material mat ) )
( make sphere ( center x y z ) ( radius r ) ( material mat ) )
( make elipsoid ( center x y z ) [ ( e1 x1 y1 z 1 ) ] [ ( e2 x2 y2 z 2 ) ]
[ ( e3 x3 y3 z 3 ) ] ( size ax by c z ) ( material mat ) )
))

— 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.

; narozniki nieredukowalnej s t r e f y Brillouina w strukturze regularej


( define Gamma ( vector3 0 0 0 ) ) ; s r o d e k
( define X ( vector3 0 . 5 0 0 ) ) ; srodek sciany
( define M ( vector3 0 . 5 0 . 5 0 ) ) ; s r o d e k k r a w e d z i
( define R ( vector3 0 . 5 0 . 5 0 . 5 ) ) ; r o g
( set ! k-points ( interpolate 49 ( list Gamma X M Gamma ) ) )

— pozostałe zmienne wejściowe. — A.2.1 na 85 stronie. Przykładowy fragment podajemy niżej.

( set ! num-bands n ) ; i l o s c pasm do p o l i c z e n i a


( set ! resolution n ) ; r o z d z i e l c z o s c s i a t k i o b l i c z e n i o w e j
( set ! mesh-size n ) ; u s r e d n i a n i e s t a l e j d i e l . na o b s z a r z e
; n x n punktow
( set ! tolerance n ) ; t o l e r a n c j a z b i e z n o s c i r o z w i a z a n
( set ! filename-prefix " p r e f i k s − " ) ; p r z e d r o s t e k dodawany w
; nazwach g e n e r o w a n y c h p l i k o w . D o m y s l n i e " "
5.2. Tworzenie wykresów 49

— 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.

( run ( output-at-kpoint M output-tot-pwr ) )


( run-te ( output-at-kpoint M fix-hfield-phase output-hfield-z ) )
( run-tm . . . )

5.2. Tworzenie wykresów

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,

Przykład 1 Fragment tekstu wypisywanego przez program mpb po uruchomieniu:


...
solve_kpoint (0,0,0):
tefreqs:, k index, k1, k2, k3, kmag/2pi, te band 1, te band 2, te band 3, te band 4
Solving for bands 2 to 4...
Finished solving for bands 2 to 4 after 15 iterations.
tefreqs:, 1, 0, 0, 0, 0, 0, 0.567309, 0.785322, 0.785339
elapsed time for k point: 1 seconds.
solve_kpoint (0.1,0,0):
...

tevelocity i.t.d., tak wi˛ec wywołanie w terminalu n.p.:


$ grep -w freqs: plik.out > freqs.dat
$ grep tefreqs: plik.out > tefreqs.dat
$ grep tmfreqs: plik.out > tmfreqs.dat
spowodowałoby zapisanie do pliku z rozszerzeniem .dat wszystkich linijek zawierajacych
˛ wy-
brane słowa. W przypadku słów kluczowych kończacych
˛ si˛e na freqs, mamy do czynienia z da-
nymi, potrzebnymi do stworzenia wykresu fotonicznej struktury pasmowej ωn (~k), wyliczonymi
dla stanu polaryzacji wskazanego przez przedrostek (te, tm, zeven, i.t.d., zależnie od funkcji
50 5. Instrukcja użytkowania pakietu MPB

uruchomieniowej (A.2.7 na 92 stronie)). Gdybyśmy otworzyli któryś z plików *freqs.dat w ar-


kuszu kalkulacyjnym lub programie do tworzenia wykresów naukowych, w nagłówkach kolumn
(pierwszym wierszu) zobaczylibyśmy:

— k index — numery porzadkowe


˛ wektorów falowych ~k (osi x wykresu),
— k1, k2, k3 — składowe wektorów falowych ~k = [k1, k2, k3] we współrz˛ednych bazy sieci
odwrotnej,
— kmag/2pi — długość wektora falowego, podzielona przez 2π, wartość ta podana na osi y
oznacza cz˛estotliwość przy której pr˛edkość fazowa jest równa pr˛edkości światła

ω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).

Alternatywnie można szybciej i łatwiej otrzymać wykresy fotonicznej struktury pasmowej


wykorzystujac
˛ stworzony przeze mnie skrypt o nazwie robwykres. Skrypt ten zamieściłem na
płycie CD dołaczonej
˛ do pracy magisterskiej w katalogu robieniewykresow. Należy go skopio-
wać wraz z innymi plikami w folderze do katalogu /usr/local/bin. W tym celu, po włożeniu
płyty do nap˛edu powinno si˛e:

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"
...

Przykład 3 Skrypt robwykres w działaniu


$ robwykres
uzycie: robwykres plik_z_zapisem_symulacji nazwa_pliku_wykresu punkty_krytyczne
$ robwykres tri-rods.out tri-rods "$\Gamma$" "M" "K" "$\Gamma$"
gri tri-rodsTM.gri
Czy narysowac krzywa omega = c*|k|? (0 to nie, 1 oznacza tak) (default = ‘0’):
convert -density 600 tri-rodsTM.ps tri-rodsTM.png
convert tri-rodsTM.ps tri-rodsTM.eps
gri tri-rodsTE.gri
Czy narysowac krzywa omega = c*|k|? (0 to nie, 1 oznacza tak) (default = ‘0’):
convert -density 600 tri-rodsTE.ps tri-rodsTE.png
convert tri-rodsTE.ps tri-rodsTE.eps

5.3. Wizualizacja pól skalarnych i wektorowych

Program mpb, na podstawie informacji zawartych w funkcji uruchomieniowej, zapisuje war-


tości pól skalarnych i wektorowych do plików z rozszerzeniem h5. Aby można było je obejrzeć
trzeba zastosować odmienne metody dla struktur dwu- i trójwymiarowych:

5.3.1. Struktury dwuwymiarowe

Wizualizacja funkcji dielektrycznej

Bezpośrednim sposobem na obejrzenie funkcji dielektrycznej (widok „z góry”, wzdłuż osi z)


jest przetworzenie pliku epsilon.h5 do postaci obrazu png za pomoca˛ komendy:
$ h5topng epsilon.h5
W przypadku sieci trójkatnej
˛ (badź
˛ heksagonalnej) otrzymamy przekrzy-
wiony obraz komórki elementarnej taki jak na rysunku 5.1. Jest to poprawny
rezultat, ponieważ program h5topng oczekuje na wejściu struktury we współ-
rz˛ednych ortogonalnych (stad
˛ też przekrzywienie). Prawidłowy obraz można
Rysunek 5.1.
otrzymać po zastosowaniu, wchodzacego
˛ w skład pakietu MPB programu epsilon.png
mpb-data. Wywołanie w Terminalu komendy
$ mpb-data -r -m 3 -n 32 epsilon.h5
52 5. Instrukcja użytkowania pakietu MPB

spowoduje:

— ortogonalizacj˛e wektrów bazowych komórki elementarnej z zachowaniem jej obj˛etości (opcja


-r),
— powielenie liczby komórek elementarnych (-m) o 3 okresy w każdym kierunku,
— zmian˛e rozdzielczości (-n) na 32 piksele na stała˛ siatki a,
— zapisanie wewnatrz
˛ pliku epsilon.h5 nowego zestawu danych o nazwie data-new, przeglad
˛
zawartości pliku epsilon.h5 jest możliwy dzi˛eki komendzie h5ls.

$ h5ls epsilon.h5

data Dataset {32, 32}


data-new Dataset {96, 83}
description Dataset {SCALAR}
epsilon.xx Dataset {32, 32}
epsilon.xx-new Dataset {96, 83}
...
Prawidłowy obraz sieci trójkatnej
˛ (heksagonalnej) otrzymamy, ponownie dzi˛eki komendzie
h5topng, wykorzystujac
˛ nowy zestaw danych
$ h5topng epsilon.h5:data-new
W przypadku sieci prostokatnej,
˛ obraz funkcji dielektrycznej uzyskamy dzi˛eki:
$ mpb-data -m 3 -n 32 epsilon.h5
$ h5topng epsilon.h5:data-new

Wizualizacja pól skalarnych i wektorowych

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-

( run-tm ( output-at-kpoint ( vector3 ( / −3) ( / 3 ) 0 )


fix-efield-phase output-efield-z ) )

czas zostana˛ utworzone pliki zawierajace


˛ informacje o polach wektorowych. Schemat nazw tych
plików jest nast˛epujacy:
˛

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

Obrazy pól (polaryzacja TM) uzyskamy dzi˛eki poleceniom


$ mpb-data -r -m 3 -n 32 *.h5
$ h5topng -C epsilon.h5:data-new -c dkbluered -Z -d z.r-new *tm.h5
Z widocznych tutaj opcji programu h5topng:
-C oznacza rysowanie konturów struktur zawartych w epsilon.h5:data-new,
-c dkbluered – przedstawienie danych w skali od koloru ciemnoniebieskiego poprzez biały
a skończywszy na barwie ciemnoczerwonej,
-Z – przypisanie zera w centrum skali (kolor biały),
-d – użycie zestawu danych z.r-new (cz˛eść rzeczywista pola wzdłuż osi z) zawartego w plikach
*tm.h5.

5.3.2. Struktury trójwymiarowe

Sposób wizualizacji przedstawiam na podstawie pliku diamond.ctl zawartego w katalogu


/usr/share/doc/mpb-doc/examples.

Wizualizacja funkcji dielektrycznej

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ść:

— dowolnego obracania obrazem,


— usuwania obiektów (prawy przycisk myszy na obiekcie i wybranie Delete),
— dodawania nowych obiektów (menu File i Visualize) oraz kontrolowania ich parametrów.

Gdy już osiagniemy


˛ zamierzony efekt, możemy zapisać obraz do dowolnego pliku graficznego
poprzez menu File → Save Scene As.

Wizualizacja pól skalarnych i wektorowych

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

utworzymy, na podstawie plików h5, pliki dpwr.k06.b01.vtk, dpwr.k06.b02.vtk, ...,


dpwr.k06.b05.vtk zawierajace
˛ trójwymiarowy zapis g˛estości energii pól indukcji elektrycznej.
Wpisujac
˛ nast˛epnie
$ mayavi2 -d epsilon.vtk -m Axes -m Outline -m IsoSurface -d dpwr.k06.b01.vtk -m
Volume
otworzymy program Mayavi2, w którym dane o g˛estości energii sa˛ nałożone na funkcj˛e dielek-
tryczna˛ (rys. 5.2(b)).

(a) Obraz funkcji dielektrycznej

(b) Obraz g˛estości energii pola indukcji elektrycznej

Rysunek 5.2. Interfejs programu Mayavi2.


6. Wybrane przykłady obliczeń

W rozdziale 6.1 przedstawiono przykłady obliczeń numerycznych pochodzacych


˛ z katalogu
/usr/share/doc/mpb-doc/examples i z [3, 4], natomiast rozdział 6.2 zawiera rezultaty samo-
dzielnie wykonanych obliczeń numerycznych.

6.1. Struktury dwuwymiarowe

6.1.1. Sieć kwadratowa składajaca


˛ sie˛ z pretów
˛ dielektrycznych

Pierwszym krokiem jaki należy uczynić, jest napisanie w edytorze tekstu pliku wsadowego
dla programu mpb (listing 6.1).

Listing 6.1. square-rods.ctl


; geometria s i e c i k r y s t a l i c z n e j
( set ! geometry-lattice ( make lattice ( size 1 1 no-size ) ) )
; definiowanie materialu
( define AlGaAs ( make dielectric ( epsilon 1 2 . 9 ) ) )
; p o l o z e n i e obiektow wewnatrz komorki e l e m e n t a r n e j
; we w s p o l r z e d n y c h wektorow bazowych
( set ! geometry ( list
( make cylinder ( material AlGaAs )
( center 0 0 ) ( radius 0 . 2 ) ( height infinity ) )
))
; narozniki nieredukowalnej s t r e f y Brillouina
( define Gamma ( vector3 0 0 0 ) )
( define X ( vector3 0 . 5 0 0 ) )
( define M ( vector3 0 . 5 0 . 5 0 ) )
; o k r e s l e n i e z b i o r u wektorow f a l o w y c h
( set ! k-points ( interpolate 49 ( list Gamma X M Gamma ) ) )
; u s t a l e n i e p o z o s t a l y c h zmiennych
( set ! num-bands 8 )
( set ! resolution 3 2 )
56 6. Wybrane przykłady obliczeń

; 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 )

Nast˛epnie otwieramy terminal, przechodzimy za pomoca˛ komendy cd do katalogu z zapisa-


nym plikiem i wpisujemy
$ mpb square-rods.ctl | tee square-rods.out
$ mpb-data -m 3 epsilon.h5
$ h5topng -d data-new epsilon.h5
$ robwykres square-rods.out square-rods "$\Gamma$" "X" "M" "$\Gamma$"

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))

(a) square-rodsTE.png (b) square-rodsTM.png. Fotoniczna przerwa


wzbroniona dla cz˛estotliwości znormalizowanych od
0.273 do 0.412

Rysunek 6.1.
6.1. Struktury dwuwymiarowe 57

(a) funkcja dielektryczna w


skali szarości. Bieli odpowada
ε = 1, a czerni ε = 12.9

Rysunek 6.2.

6.1.2. Maksymalizacja fotonicznej przerwy wzbronionej dla polaryzacji TM

Parametrem optymalizacji FPW jest promień pr˛etów dielektrycznych

Listing 6.2. sqrods-optym-r.ctl


( set ! geometry-lattice ( make lattice ( size 1 1 no-size ) ) )

( define AlGaAs ( make dielectric ( epsilon 1 2 . 9 ) ) )

( define Gamma ( vector3 0 0 0 ) )


( define X ( vector3 0 . 5 0 0 ) )
( define M ( vector3 0 . 5 0 . 5 0 ) )
( set ! k-points ( interpolate 49 ( list Gamma X M Gamma ) ) )

( 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ń

( print " maksymalna p r z e r w a w z b r o n i o n a : " ( max−val r e s u l t ) " \ n " )

$ 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

6.1.3. Sieć trójkatna


˛ w postaci dielektrycznych pretów
˛ umieszczonych w powietrzu

Struktur˛e definiuje listing 6.3

Listing 6.3. tri-rods.ctl


( set ! geometry-lattice ( make lattice ( size 1 1 no-size )
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 )
( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 ) ) )
( set ! d i e l ( make dielectric ( epsilon 1 2 ) ) )
( set ! geometry ( list
( make cylinder ( center 0 0 0 ) ( radius 0 . 2 )
( height infinity ) ( material d i e l ) )
))
; narozniki nieredukowalnej s t r e f y Brillouina
; we w s p o l r z e d n y c h wektorow bazowych i j e d n o s t k a c h
; 2∗ p i / a
( define Gamma ( vector3 0 0 0 ) )
( define M ( vector3 0 0 . 5 0 ) )
( define K ( vector3 ( / −3) ( / 3 ) 0 ) )
( set ! k-points ( interpolate 49 ( list Gamma M K Gamma ) ) )
( set ! num-bands 8 )
( set ! resolution 3 2 )
; dla wektora falowego K zostana zapisane amplitudy
; pol wzdluz o s i z
( run-tm ( output-at-kpoint ( vector3 ( / −3) ( / 3 ) 0 )
6.1. Struktury dwuwymiarowe 59

fix-efield-phase output-efield-z ) )
( run-te ( output-at-kpoint ( vector3 ( / −3) ( / 3 ) 0 )
fix-hfield-phase output-hfield-z ) )

Tworzenie wykresów 6.5(a) i 6.5(b) umożliwiaja˛ polecenia


$ mpb tri-rods.ctl | tee tri-rods.out
$ robwykres square-rods.out square-rods "$\Gamma$" "M" "K" "$\Gamma$"

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

(a) 1 pasmo (b) 2 pasmo (c) 3 pasmo (d) 4 pasmo

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
˛

(a) 1 pasmo (b) 2 pasmo (c) 3 pasmo (d) 4 pasmo

Rysunek 6.4. Polaryzacja TE (pole elektryczne drga w płaszczyźnie xy). Amplitudy pola magnetycznego
w kierunku osi z

Na podstawie powyższych rysunków możemy zauważyć, że energia pola magnetycznego


i elektrycznego ma duże wartości w obszarach o najwi˛ekszej stałej dielektrycznej (wraz ze wzro-
stem cz˛estotliwości pola te musza˛ pozostać ortogonalne wzgl˛edem pól o niższej cz˛estotliwości).
60 6. Wybrane przykłady obliczeń

Prowadzi to oczywiście do coraz bardziej skomplikowanych przestrzennych kształtów pól [26,


rozdział 2].

(a) (b)

(c)

Rysunek 6.5. Wykresy pasm fotonicznych dla polaryzacji TE i TM

Przedstawione na rys. 6.5 widma fotoniczne sa˛ zgodne z wynikami zawartymi na stronie in-
ternetowej [3]
6.1. Struktury dwuwymiarowe 61

6.1.4. Kompletna przerwa wzbroniona w dwuwymiarowym krysztale

Geometri˛e struktury przyj˛eto za rozdziałem 5 pracy [26].

Listing 6.4. tri-holes.ctl


( set ! geometry-lattice ( make lattice ( size 1 1 no-size )
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 )
( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 ) )
)
( set ! default-material ( make dielectric ( epsilon 1 4 ) ) )
( set ! geometry ( list
( make cylinder ( center 0 0 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material air ) )
))
( define Gamma ( vector3 0 0 0 ) )
( define M ( vector3 0 0 . 5 0 ) )
( define K ( vector3 ( / −3) ( / 3 ) 0 ) )
( set ! k-points ( interpolate 49 ( list Gamma M K Gamma ) ) )
( set ! num-bands 8 )
( set ! resolution 3 2 )
( run )

$ mpb tri-holes.ctl | tee tri-holes.out


$ mpb-data -r -n 32 -m 3 epsilon.h5
$ h5topng -d data-new epsilon.h5
$ robwykres tri-holes.out tri-holes "$\Gamma$" "M" "K" "$\Gamma$"

(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ń

6.1.5. Stany zlokalizowane w defektach struktury

Defekt liniowy

Listing 6.5. line-defect.ctl


; d e f e k t w postaci , usunietych pretow d i e l e k t r y c z n y c h w l i n i i p r o s t e j
; w k i e r u n k u " x " . ( " x " i " y " o d n o s z a s i e do k i e r u n k o w wektorow bazowych ) .
( define-param superkom−y 7 ) ; n i e p a r z y s t a l i c z b a o k r e s o w w s u p e r k o m o r c e
( set ! filename-prefix " d e f e k t " ) ; aby n i e n a d p i s y w a c p l i k o w , g e n e r o w a n e
; p l i k i h5 b e d a m i a l y p r z e d r o s t e k d e f e k t
( set ! geometry-lattice ( make lattice
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 )
( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 )
( size 1 superkom−y no-size ) ) )
( define-param e p s 1 2 ) ; s t a l a d i e l e k t r y c z n a p r e t o w
( define-param r 0 . 2 ) ; p r o m i e n p r e t o w
( set ! geometry ( list ( make cylinder
( center 0 0 0 ) ( radius r ) ( height infinity )
( material ( make dielectric ( epsilon e p s ) ) ) ) ) )
( set ! geometry
( append
; powiel p r e t d i e l e k t r y c z n y w c a l e j superkomorce
( geometric-objects-lattice-duplicates geometry )
; dodaj p r e t skladajacy s i e z powietrza
( list
( make cylinder ( center 0 ) ( radius r ) ( height infinity )
( material air ) ) ) ) )
( define Gamma ( vector3 0 0 0 ) )
( define K’ ( lattice- >reciprocal ( vector3 0 . 5 0 0 ) ) ) ; k r a w e d z s t r e f y B r i l l o u i n a .
( set ! k-points ( interpolate 49 ( list Gamma K ’ ) ) )
; im w i e k s z a s u p e r k o m o r k a , tym w i e c e j pasm t r z e b a o b l i c z y c aby d o s t a c s i e
; do s t a n o w z l o k a l i z o w a n y c h w d e f e k t a c h ( " superkom−y " r a z y w i e c e j )
( define-param dod−pasma 5 ) ; i l o s c d o d a t k o w y c h pasm do p o l i c z e n i a ponad p r z e r w a
( set ! num-bands ( + superkom−y dod−pasma ) )
( set-param ! resolution 3 2 )
; O b l i c z s t a n y p o l a r y z a c j i TM, z a p i s u j a c s t a n y p o l a e l e k t r y c z n e g o
; w k i e r u n k u o s i z , d l a wektora falowego " ze srodka " l i s t y k−points
; l i s t − r e f − wybiera pojedynczy element z l i s t y
; quotient − czesc calkowita z dzielenia
; length − dlugosc l i s t y
( run-tm
( output-at-kpoint ( list-ref k-points ( quotient ( length k-points ) 2 ) )
fix-efield-phase output-efield-z ) )
6.1. Struktury dwuwymiarowe 63

$ mpb defekt.ctl | tee output


$ mpb-data -r -m 2 *.h5
$ h5topng -d data-new defektepsilon.h5
$ h5topng -Z -c dkbluered -C defektepsilon.h5:data-new -d z.r-new defekte*.tm.h5
$ robwykres output defekt "$\Gamma$" "K"

(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ń

6.2. Wyniki oryginalne (obliczenia własne)

6.2.1. Modelowanie światłowodów fotonicznych

Ś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.

Listing 6.6. swiatlowod.ctl


; tworzymy s u p e r k o m o r k e e l e m e n t a r n a , s k l a d a j a c a s i e z 11 x11 z w y k l y c h
; komorek e l e m e n t a r n y c h
( define s u p e r c e l l 1 1 )
( set ! geometry-lattice ( make lattice ( size s u p e r c e l l s u p e r c e l l no-size )
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 ) ( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 ) ) )
( define d i e l ( make dielectric ( epsilon 1 2 ) ) )
( set ! default-material d i e l )
( set ! geometry ( list ( make cylinder
( center 0 0 0 ) ( radius 0 . 4 8 ) ( height infinity ) ( material air ) ) ) )
; n o r m a l n i e powyzej z d e f i n i o w a n y c y l i n d e r wypelniony powietrzem
; z n a l a z l by s i e na s r o d k u k o m o r k i e l e m e n t a r n e j .
; T r z e b a go p o w i e l i c na c a l a s u p e r k o m o r k e
( set ! geometry ( geometric-objects-lattice-duplicates geometry ) )
; nadpisujemy s t r u k t u r e , z a t y k a j a c c y l i n d r y powietrzne
; cylindrami dielektrycznymi
( set ! geometry ( append geometry ( list
( make cylinder ( center 0 0 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center 1 0 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center −1 0 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center 0 1 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center 0 −1 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center −1 1 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
( make cylinder ( center 1 −1 0 ) ( radius 0 . 4 8 )
( height infinity ) ( material d i e l ) )
; na k o n i e c na s r o d k u s t a w i a m duzy c y l i n d e r p o w i e t r z n y
6.2. Wyniki oryginalne (obliczenia własne) 65

( make cylinder ( center 0 0 0 ) ( radius 1 )


( height infinity ) ( material air ) )
)))
; t r z e b a o b n i z y c r o z d z i e l c z o s c , aby z m n i e j s z y c r o z m i a r y s i a t k i
; o b l i c z e n i o w e j i tym samym c z a s t r w a n i a s y m u l a c j i
( set ! resolution 1 6 )
; krawedz s t r e f y B r i l l o u i n a
( set ! k-points ( list ( vector3 0 0 . 5 0 ) ) )
( set ! num-bands 1 ) ; szukamy t y l k o 1 s t a n u z l o k a l i z o w a n e g o w e w n a t r z FPW
; p o s z u k u j e m y c z e s t o t l i w o s c i w l a s n y c h , s t a r t u j a c od s r o d k a FPW
( set ! target-freq ( / ( + 0 . 4 1 9 4 3 3 0 . 5 1 0 4 6 4 4 ) 2 ) )
; trzeba zmniejszyc t o l e r a n c j e , dla polepszenia zbieznosci rozwiazan
( set ! tolerance 1e−5 )
( run-tm ( output-at-kpoint ( vector3 0 0 . 5 0 )
fix-efield-phase output-efield-z ) )
( get-dfield 1 ) ( compute-field-energy )
( print " e n e r g i a w r d z e n i u : "
( compute-energy-in-objects ( make cylinder ( center 0 0 0 ) ( radius 1 )
( height infinity ) ( material air ) ) ) " \ n " )
66 6. Wybrane przykłady obliczeń

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

(a) funkcja dielektryczna (b) zlokalizowany stan własny

Rysunek 6.9.
6.2. Wyniki oryginalne (obliczenia własne) 67

6.2.2. Struktury o skomplikowanych kształtach

"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).

(a) Projekt (b) uzyskany kształt funkcji die-


lektrycznej

Rysunek 6.10.

Listing 6.7. frostie.ctl


( set ! default-material ( make dielectric ( epsilon 1 3 ) ) )
; siec trojkatna
( set ! geometry-lattice ( make lattice ( size 1 1 no-size )
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 )
( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 ) ) )
( set ! geometry ( list
( make cylinder ( center 0 0 0 ) ( radius ( / 6 ) ) ( height infinity )
( material air ) )
( make block ( center 0 . 5 0 0 ) ( size 0 . 3 2 7 0 . 3 2 7 infinity )
( e1 0 . 3 7 0 6 − 0 . 2 4 8 2 ) ( e2 0 . 1 2 2 3 0 . 2 5 3 6 ) ( material air ) ) ; a )
( make block ( center 0 0 . 5 0 ) ( size 0 . 3 2 7 0 . 3 2 7 infinity )
( e2 −0.2482 0 . 3 7 0 6 ) ( e1 0 . 2 5 3 6 0 . 1 2 2 3 ) ( material air ) ) ; b )
( make block ( center 0 . 5 0 . 5 0 ) ( size 0 . 3 2 7 0 . 3 2 7 infinity )
( e1 −0.1223 0 . 3 7 0 6 ) ( e2 0 . 3 7 0 6 − 0 . 1 2 2 3 ) ( material air ) ) ; c )
))
( set ! k-points ( list ( vector3 0 0 0 ) ; Gamma
( vector3 0 0 . 5 0 ) ; M
68 6. Wybrane przykłady obliczeń

( vector3 ( / −3) ( / 3 ) 0 ) ; K
( vector3 0 0 0 ) ) ) ; Gamma

( set ! k-points ( interpolate 49 k-points ) )


( set-param ! resolution 3 2 )
( set-param ! num-bands 1 0 )
; chcialem o b e j r z e c j a k i s niestandardowy wektor falowy
; z i n d e k s e m ( 1 4 / 3 0 ∗ n ) , g d z i e n t o l i c z b a wektorow f a l o w y c h
; na o s i x
( run-te ( output-at-kpoint
( list-ref k-points ( ∗ 14 ( quotient ( length k-points ) 3 0 ) ) )
fix-hfield-phase output-hfield-z ) )
;
( run-tm ( output-at-kpoint ( vector3 ( / −3) ( / 3 ) 0 )
fix-efield-phase output-dfield-z ) )

(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

Wraz ze wzrostem ilości i różnorodności elementów w strukturze kryształu fotonicznego, do-


chodzi do zag˛eszczenia pasm fotonicznych, co ilustruja˛ poniższe wykresy.

(a) (b) (c)

(d) (e) (f)

Rysunek 6.14.
6.2. Wyniki oryginalne (obliczenia własne) 71

Listing 6.8. sierp1.ctl


( set ! filename-prefix " s i e r p 0 − " )
( define n1 ( make dielectric ( epsilon 1 2 . 9 ) ) )
( set ! geometry-lattice ( make lattice ( size 1 1 no-size ) ) ) ; 2 d c e l l

( set ! geometry ( list


( make block ( center 0 0 ) ( size ( / 3 ) ( / 3 ) infinity ) ( material n1 ) )

))
( 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 )

Listing 6.9. sierp2.ctl


( set ! filename-prefix " s i e r p 1 − " )
( define n2 ( make dielectric ( epsilon 1 2 . 9 ) ) )
( set ! geometry-lattice ( make lattice ( size 1 1 no-size ) ) )
( set ! geometry ( list
( make block ( center 0 0 ) ( size ( / 3 ) ( / 3 ) infinity )
( material n2 ) )
( make block ( center ( / −3) ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center 0 ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / −3) 0 ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) 0 ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / −3) ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center 0 ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
))
72 6. Wybrane przykłady obliczeń

( 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 )

Listing 6.10. sierp3.ctl


( set ! filename-prefix " s i e r p 3 − " )
( define n2 ( make dielectric ( epsilon 1 2 . 9 ) ) )

( set ! geometry-lattice ( make lattice ( size 1 1 no-size ) ) ) ; 2 d c e l l

( set ! geometry ( list


; 0 stopien
( make block ( center 0 0 ) ( size ( / 3 ) ( / 3 ) infinity ) ( material n2 ) )
; 1 stopien
( make block ( center ( / −3) ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center 0 ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) ( / −3)) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / −3) 0 ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) 0 ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / −3) ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center 0 ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
( make block ( center ( / 3 ) ( / 3 ) ) ( size ( / 9 ) ( / 9 ) infinity )
( material n2 ) )
; 2 stopien
( make block ( center ( / −4 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −3 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
6.2. Wyniki oryginalne (obliczenia własne) 73

( make block ( center ( / −1 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center 0 ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 1 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / 4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )

( make block ( center ( / −4 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center ( / −2 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −1 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 1 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / 3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )

( make block ( center ( / −4 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center ( / −3 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −1 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center 0 ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 1 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / 2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
74 6. Wybrane przykłady obliczeń

( make block ( center ( / −4 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center ( / −3 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / 1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −4 9 ) 0 ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) 0 ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) 0 ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) 0 ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )

( make block ( center ( / −4 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center ( / −3 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / −1 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −4 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −3 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −1 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center 0 ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
6.2. Wyniki oryginalne (obliczenia własne) 75

( make block ( center ( / 1 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )


( material n2 ) )
( make block ( center ( / 2 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / −2 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −4 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −1 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 1 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / −3 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −4 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −3 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −2 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / −1 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center 0 ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 1 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 2 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 3 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )
( make block ( center ( / 4 9 ) ( / −4 9 ) ) ( size ( / 1 8 ) ( / 1 8 ) infinity )
( material n2 ) )

))
( 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ć:

1. Zdobycie praktycznej i użytecznej wiedzy z zakresu oddziaływania fal elektromagnetycznych


z uporzadkowanymi
˛ przestrzennie strukturami dielektrycznymi, a w szczególności w dziedzi-
nie podstaw teorii pasmowej struktur fotonicznych takich jak kryształy i światłowody foto-
niczne, czemu została poświ˛econa cz˛eść I. W tym sensie niniejsza˛ prac˛e należy zaklasyfiko-
wać do fotoniki – nowej, silnie rozwijanej w ostatnich dziesi˛ecioleciach działalności naukowej
w obr˛ebie materii skondensowanej.
2. Zdobycie umiej˛etności w zakresie implementacji i efektywnego posługiwania si˛e dystrybu-
cja Kubuntu z rodziny systemów operacyjnych Linux (rozdziały 2-4) i pakietem MPB (roz-
działy 2 i 5), który wykorzystuje zaawansowane, wysoce efektywne metody i procedury nu-
merycznej algebry liniowej. Jeśli chodzi o system operacyjny Kubuntu oraz pakiet MPB, to na
podkreślenie zasługuje szczegółowe przedstawienie w rozdziale 3 procedur ich instalowania,
a w rozdziale 4 pożytecznych i przydatnych użytkownikom informacji o systemie Kubuntu ze
szczególnym uwzgl˛ednieniem graficznego środowiska pracy (KDE) oraz edytora plików Kate.
3. Opracowanie instrukcji użytkownika pakietu MPB – rozdział piaty
˛ oraz dodatki – zawierajacej
˛
wiele cennych wskazówek i rad dla użytkowników tego zaawansowanego narz˛edzia oblicze-
niowego. Na uwag˛e zasługuja˛ w szczególności obszerne opisy plików typu ctl, w których
zawarte sa˛ informacje o:
— geometrii sieci krystalicznej;
— wartości przenikalności dielektrycznych elementów struktury;
— położenia w komórce materiałów dielektrycznych;
— zbiorze wektorów falowych, dla których rozwiazywane
˛ jest zagadnienie własne (1.14);
— inne zmienne wejściowe (np. liczba obliczanych pasm, rozdzielczość siatki obliczenio-
wej);
78 7. Podsumowanie

— kolejności uruchamiania stosownych procedur numerycznych.


4. Samodzielne wyznaczenie – za pomoca pakietu MPB – fotonicznych struktur pasmowych (t.j.
zależności dyspersyjnych) dla wybranych kryształów fotonicznych i światłowodów fotonicz-
nych (rozdział szósty).

Podkreślmy, że w rozdziale 5.2 scharakteryzowano procedur˛e generowania wykresów przed-


stawiajacych
˛ zależności dyspersyjne. Rozdział 5.3 jest poświ˛econy wizualizacji zależności prze-
strzennych przenikalności dielektrycznej oraz pól magnetycznego i elektrycznego wyznaczonego
numerycznie stanu własnego w przypadkach dwu- i trójwymiarowych układów.
Dodajmy, że rezultaty przedstawione w rozdziale 6.1 – pełnia˛ rol˛e testu – ponieważ odtwarzaja˛
wyniki znane w literaturze przedmiotu i sa˛ z nimi zgodne. Tym samym możemy twierdzić, że pa-
kiet MPB został poprawnie zainstalowany, funkcjonował i funkcjonuje zgodnie z oczekiwaniami.
Dla zaprojektowanego samodzielnie światłowodu fotonicznego (rozdział 6.2.1) oraz bardziej
skomplikowanych dwuwymiarowych struktur fotonicznych typu płatek śniegu i dywan Sierpiń-
skiego (rozdział 6.2.2), wyznaczono pasmowa˛ struktur˛e fotoniczna.˛ Na uwag˛e zasługuje istnienie
w strukturze płatku śniegu przerwy fotonicznej dla polaryzacji TE oraz jej brak w strukturze dy-
wanu Sierpińskiego, co – jak sadzimy
˛ – jest spowodowane mała˛ różnica˛ stałych dielektrycznych
elementów struktury. Warto zauważyć, że wraz ze wzrostem stopnia komplikacji struktury, mie-
rzonej liczba˛ elementów struktury o różnych stałych dielektrycznych (komórka elementarna z rys.
6.14(a) zawiera jeden kwadrat materiału o dużej wartości stałej dielektrycznej, komórka elemen-
tarna z rys. 6.14(b) ma tych elementów – o różnych wymiarach geometrycznych – 9, a komórka
elementarna z rys. 6.14(c) ma ich 73) pasma fotoniczne ulegaja˛ zag˛eszczeniu (porównaj rys. 6.14
d, e, f) choć ich liczba nie ulega zmianie.
Ze wzgl˛edu na duża˛ obj˛etość pracy dyplomowej w jej tekście zamieszczono tylko dwa samo-
dzielnie przeanalizowane i rozwiazane
˛ numerycznie, za pomoca˛ pakietu MPB, problemy.
Kończac
˛ pozwalam sobie wyrazić nadziej˛e, że wyniki pracy dyplomowej b˛eda˛ w najbliższej
przyszłości wykorzystywane przez studentów, pracowników naukowych PWr oraz innych uczelni
lub ośrodków naukowych zajmujacych
˛ si˛e fotonika˛ i zainteresowanych właściwościami pasm fo-
tonicznych kryształów lub światłowodów fotonicznych.
Prace dyplomowe są końcowym etapem edukacji na studiach wyższych. Są one znaczącym
przejawem umiejętności badawczych, analizy i krytycznego myślenia studenta. W zależności od
dyscypliny naukowej, prace dyplomowe przybierają różne formy i poruszają różnorodne tematy,
od praktycznych do teoretycznych, od konkretnych do abstrakcyjnych. Wybór tematu, zebranie i
analiza danych, tworzenie wniosków - wszystko to jest nieodzowną częścią procesu tworzenia
pracy dyplomowej.
Pierwszym przykładem, który warto rozważyć, są prace z teologii. W takich pracach student może
badać wpływ wiary na społeczeństwo, relacje między religią a nauką, lub analizować interpretacje
i znaczenia konkretnych tekstów religijnych.
Kolejnym obszarem zainteresowania mogą być prace o prawach człowieka. Tutaj studenci mogą
zająć się badaniem historii praw człowieka, analizować różne przypadki naruszeń tych praw, lub
zbadać jak prawa człowieka są przestrzegane w różnych częściach świata.
Prace z negocjacji to z kolei prace, które koncentrują się na strategiach negocjacyjnych, procesach
decyzyjnych, czy wpływie kultury na negocjacje. W praktyce mogą one obejmować studia
przypadków, symulacje, czy analizę transkryptów rzeczywistych negocjacji. Warto też zauważyć,
że polskie prace dyplomowe nie ustępują jakością tym tworzonym za granicą. Niezależnie od tego,
czy dotyczą one kampanii społecznych, zagadnień związanych z prawem czy bankowością, są one
z reguły dobrze napisane i gruntownie zbadane. Prace o kampaniach społecznych mogą obejmować
analizę skuteczności konkretnej kampanii, badać wpływ mediów społecznościowych na kampanie
społeczne, czy porównać różne strategie używane w kampaniach społecznych.
Śląsk to wyjątkowy region, o bogatej historii i kulturze, więc prace o Śląsku mogą dotyczyć
różnych aspektów, od historii gospodarczej regionu, przez analizę dialektów śląskich, do badań
społeczno-kulturowych. W dziedzinie bankowości, prace dyplomowe mogą obejmować analizę
ryzyka kredytowego, badanie innowacji w usługach bankowych, lub analizowanie skutków
kryzysów finansowych na sektor bankowy. Prace z prawa to z kolei obszar, który może obejmować
szerokie spektrum tematów, od badań konkretnych przypadków, przez analizę ustaw, po badanie
wpływu prawa na społeczeństwo.
Praca dyplomowa jest oceniana przez opiekuna pracy oraz komisję egzaminacyjną na podstawie
jej treści, jakości wykonania, oryginalności, umiejętności analizy i wnioskowania oraz sposobu
prezentacji. Praca dyplomowa ma duże znaczenie dla studentów, ponieważ może mieć wpływ na
ocenę końcową oraz być podstawą do dalszej kariery zawodowej lub podjęcia dalszych studiów.
Cze˛ ść III

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.

Przykład 4 Wywołanie mpb w trybie interpretatora poleceń


$ mpb
mpb> (sqr (+ 3 5))
64
mpb> (quit)
$

A.1. Dane i podstawowe operacje na danych (biblioteka libctl)

Poniżej wymieniamy nazwy funkcji wraz z opisem ich działania.

A.1.1. Funkcje podstawowe jezyka


˛ Scheme

(set! zmienna wartosc) — nadaje zmiennej nowa˛ wartość,


(define zmienna wartosc) — tworzy nowa˛ zmienna˛ nadajac
˛ jej wartość poczatkow
˛ a,˛
(list [ element1 element2 ]) — zwraca list˛e zawierajac
˛ a˛ 0 lub wi˛ecej elementów,
(append [ lista1 lista2 ]) — łaczy
˛ listy elementów w jedna˛ wi˛eksza˛ list˛e,
( funkcja [ argument1 argument2 ... ]) — wywołuje dowolna˛ funkcj˛e. Funkcjami sa˛ również ope-
ratory arytmetyczne (tzw. polska notacja, notacja Łukasiewicza),
(define (funkcja [ argument1 argument2 ]) zawartosc funkcji ) — definiuje nowa˛ funkcj˛e z ze-
rowa˛ lub wi˛eksza˛ liczba˛ argumentów.
1 Scheme został stworzony w instytucie MIT i jest odmiana˛ j˛ ezyka programowania Lisp nastawiona˛ na minima-
lizm. Szczegóły odnośnie tego j˛ezyka programowania sa˛ dost˛epne na [2, 27]
82 A. Funkcje i procedury plików ctl

MPB (Scheme) operacja arytmetyczna



(/ (sqrt 3) 2) 3/2
(∗ 1 2 3) 1∗2∗3
(/ (∗ (+ 2 3) 5) 8) ((2 + 3) ∗ 5)/8
Tablica A.1. Przykłady wywołania funkcji arytmetycznych

A.1.2. Parametry ustawiane w wierszu poleceń

(define-param zmienna wartosc_domyslna) — określa zmienna,


˛ której wartość można przypisać
w wierszu poleceń i nadaj jej wartość domyślna.˛ Aby nadać zmiennej nowa˛ wartość, w wierszu
poleceń można wywołać komend˛e w.g. schematu:
mpb zmienna=wartość plik.ctl
(set-param! zmienna nowa−domyslna−wartosc) — modyfikuje zmienna˛ nadajac
˛ jej nowa˛ war-
tość. Jeżeli podamy wartość zmiennej w wierszu poleceń, funkcja ta si˛e nie wywoła.

A.1.3. Liczby zespolone

J˛ezyk programowania Scheme w pełni wspiera działania arytmetyczne na liczbach zespolo-


nych, wektorach i macierzach. Liczby zespolone definiuje si˛e w prosty sposób jako a + bi. Jeżeli
a i b sa˛ zmiennymi, liczby zespolone wyznacza si˛e za pomoca˛ nast˛epujacych
˛ komend:
(make-rectangular a b) — (a + bi),
a@b lub (make-polar a b) — (a · exp[ib]),
(real-part z) — cz˛eść rzeczywista,
(imag-part z) — cz˛eść urojona,
(magnitude z) — wartość bezwzgl˛edna,
(angle z) — kat
˛ fazowy,
(conj z) — sprz˛eżona liczba zespolona.

A.1.4. Wektory

(vector3 x y z) — tworzy wektor o składowych x, y i z,


(vector3-x v), (vector3-y v), (vector3-z v) — wydobywa z wektora v odpowiednio składowa˛
x, y, z,
(vector3+ v1 v2), (vector3- v1 v2) — dodaje, odejmuje wektory v1 i v2,
(vector3-cross v1 v2), (vector3-dot v1 v2) — iloczyn wektorowy, skalarny v1 i v2,
(vector3∗ v1 v2) — iloczyn skalarny wektorów lub pomnożenie wektora przez liczb˛e,
(vector3-cdot v1 v2) — iloczyn skalarny wektorów v1∗ (wektor sprz˛eżony) i v2,
(vector3-norm v) — zwraca długość wektora v,
A.1. Dane i podstawowe operacje na danych (biblioteka libctl) 83

(unit-vector3 v), (unit-vector3 x [y z]) — współrz˛edne wektora jednostkowego, w tym sa-


mym kierunku co zadany wektor v lub współrz˛edne wektora x, y, z,
(vector3-close? v1 v2 tolerancja) — zwraca ciag
˛ znaków #t (true) [lub #f (false)] jeżeli współ-
rz˛edne wektorów v1 i v2 sa˛ [nie sa]
˛ porównywalne z zadana˛ tolerancja,˛
(rotate-vector3 os theta v) — wynikiem jest wektor v obrócony w prawo o kat
˛ theta (w radia-
nach) dookoła osi (wektor),
(deg->rad stopnie), (rad->deg radiany) — pozwalaja˛ przeliczyć w prosty sposób stopnie na ra-
diany i odwrotnie.

A.1.5. Macierze 3x3

(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 .

A.1.6. Tworzenie obiektów

(make klasa [ wlasciwosci ... ]) — tworzy obiekt posiadajacy


˛ właściwości zdefiniowane w da-
nej klasie. Właściwości definiuje si˛e w formie (właściwość wartość),
Przykład:
(make sphere (material (make dielectric (epsilon 2.8))) (center 0 0 1) (radius 0.3))
(object-property-value obiekt wlasciwosc) — zwraca wartość przypisana˛ do właściwości da-
nego obiektu.

A.1.7. Funkcje różne

(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 ) )

Przykład 6 Wypisywanie wartości zmiennych


( print " s z u k a n y w e k t o r : " v " \ n " )

(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,
˛

Przykład 7 Szukanie minimum


mpb> ( define ( xkwadrat−5 x ) (− ( s q r x ) 5 ) )
mpb> ( minimize xkwadrat−5 0 . 0 0 1 )
( − 1 . 3 1 7 3 2 2 1 4 7 1 1 7 8 e−8 . − 5 . 0 )

(minimize funkcja tolerancja punkt−startowy) — szuka minimum funkcji w pobliżu zadanego


punktu startowego ,
(minimize funkcja tolerancja a b) — szuka minimum funkcji w zadanym przedziale od a do b,
(minimize-multiple funkcja tolerancja punkt1 ... punktN) — szuka minimów funkcji w pobliżu
zadanych punktów,
maximize, maximize-multiple — podobne działanie jak w przypadku funkcji minimize, tyle
że poszukiwane jest maksimum,
(find-root funkcja tolerancja a b) — szuka miejsca zerowego w zadanym przedziale od a do b,
find-root-deriv funkcja tolerancja a b [punkt−startowy]) — szuka miejsca zerowego metoda˛
Newtona. Punkt-startowy jest parametrem opcjonalnym,
(derivative funkcja x [dx tolerancja ]) , (deriv funkcja x [dx tolerancja ]) — wartość pochod-
nej funkcji w punkcie x. Krok dx i tolerancj˛e podaje si˛e opcjonalnie,
(derivative2 funkcja x [dx tolerancja ]) , (deriv2 funkcja x [dx tolerancja ]) — wartość pochod-
nej drugiego rz˛edu w punkcie x. Krok dx i tolerancj˛e podaje si˛e opcjonalnie,
(integrate funkcja a b blad−wzgledny [blad−bezwzgledny max−liczba−iteracji]) — całka z funkcji
określonej na przedziale (a, b), liczona metoda˛ adaptatywnej kwadratury (kubatury) Gaussa.
Funkcja wykonuje obliczenia do czasu gdy zostaje osiagni˛
˛ eta tolerancja bł˛edu zadanego przez
˛ wzgl˛edny (opcjonalnie bezwzgl˛edny) lub po osiagni˛
bład ˛ eciu maksymalnej liczby iteracji,
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 85

(fold-left op wartosc−poczatkowa lista) — wykonuje operacje na elementach listy zaczynajac


˛
od lewej do prawej. Jeżeli mamy list˛e składajac
˛ a˛ si˛e z elementów (a b c d) to funkcja zadziała
operatorem op na list˛e w nast˛epujacy
˛ sposób:
(op (op (op (op wartosc−poczatkowa a) b) c) d) ,
(fold-right op wartosc−poczatkowa lista) — wykonuje operacje na elementach listy zaczynajac
˛
od prawej do lewej. Jeżeli mamy list˛e składajac
˛ a˛ si˛e z elementów (a b c d) to funkcja zadziała
operatorem op na list˛e w nast˛epujacy
˛ sposób:
(op a (op b (op c (op d wartosc−poczatkowa)))).

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.

A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól


wektorowych i.t.p.

A.2.1. Zmienne wejściowe

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

eigensolver-block-size [l. calkowita n] — rozwiazywanie


˛ zagadnienia własnego odbywa si˛e
blokowo co oznacza, że dla zadanego wektora falowego jednocześnie obliczane jest n wartości
własnych (cz˛estotliwości). Jeżeli n = 0 lub n > num-bands wówczas rozwiazuje
˛ si˛e wszystkie
pasma jednocześnie. Jeżeli n < 0 wówczas ilość pasm do policzenia b˛edzie podzielona na
cz˛eści (bloki) w przybliżeniu równe określonemu n. Im mniejsza liczba n tym mniej wykorzy-
stuje si˛e pami˛eci RAM, lecz potrzebna jest wi˛eksza ilość czasu na przeprowadzenie symulacji
(wi˛eksza liczba kroków). Domyślna˛ wartościa˛ n jest −11,
simple-preconditioner? [wart. booleowska] — wartościa˛ boole’owska˛ może być ( 0, false , #f )
jako fałsz lub ( 1, true , #t ) jako prawda. Zmienna ta pozwala podejmować decyzje o zasto-
sowaniu uproszczonego algorytmu. Przypisanie jej wartości prawdy spowoduje zwi˛ekszenie
liczby iteracji przy jednoczesnym zmniejszeniu czasu potrzebnego na każda˛ z iteracji. Do-
myślnie zmienna ta jest określona jako fałsz,
deterministic? [wart. booleowska] — na poczatku
˛ symulacji pola wektorowe maja˛ przypisane
losowe wartości. Skutkuje to drobnymi różnicami w liczbie iteracji oraz ilości potrzebnego
czasu do wykonania obliczeń. Ustawienie tej zmiennej jako prawdy czyni „rzeczy"jasno okre-
ślone.

A.2.2. Zmienne predefiniowane

˛ materiały o stałej dielektrycznej ε = 1,


air, vacuum — zmienne określajace
nothing — zmienna określajaca
˛ materi˛e o stałej dielektrycznej takiej samej jak w zmiennej
default-material. Używana do robienia dziur w innych obiektach,
infinity — liczba równa 1020 . Używana do określania „nieskończonych” wymiarów obiektów.

A.2.3. Zmienne wyjściowe

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

band-range-data — zmienna w postaci listy (( minimum wektor_k) (maximum wektor_k)) zawiera-


jacej
˛ minimalne i maksymalne cz˛estotliwości dla danego pasma oraz odpowiadajace
˛ im wek-
tory falowe.

A.2.4. Klasy

Klasy (w domyśle klasy obiektów) sa˛ złożonymi typami danych, definiujacymi


˛ obiekty oraz
ich właściwości. Na podstawie klas można tworzyć inne, zmodyfikowane klasy (klasy podrz˛edne,
potomne) dziedziczace
˛ wszystkie właściwości z klasy nadrz˛ednej. Nazwa podklasy może być wy-
korzystywana w programie wsz˛edzie tam, gdzie używa si˛e nazwy klasy nadrz˛ednej. Definiowanie
obiektów na podstawie klas odbywa si˛e według poniższego schematu.

( 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 ) . . . )

Poniżej sa˛ przedstawione wszystkie klasy obiektów wraz z ich właściwościami.

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).

Przykład 8 Zdefiniowanie sieci trójkatnej


˛ za pomoca˛ klasy lattice
( set ! geometry-lattice ( make lattice ( size 1 1 no-size )
( basis1 ( / ( sqrt 3 ) 2 ) 0 . 5 )
( basis2 ( / ( sqrt 3 ) 2 ) − 0 . 5 ) ) )
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 89

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

Przykład 9 Użycie funkcji material-function


( define ( e p s − f u n c p )
( make dielectric
( index ( + index−min ( ∗ 0 . 5 (− index−max index−min )
( + 1 ( cos ( ∗ 2 p i ( vector3-x p ) ) ) ) ) ) ) ) )
( set ! default-material ( make material-function ( material-func e p s − f u n c ) ) )

geometric-object

Ta klasa i wszystkie klasy potomne, sa˛ używane do określania obiektów geometrycznych


wchodzacych
˛ w skład struktury dielektrycznej poddawanej symulacji. Jej właściwościami sa:
˛
material [klasa okreslajaca typ materialu ] — określa materiał z którego ma si˛e składać obiekt,
center [vector3] — określa położenie środka danego obiektu.
Zazwyczaj nie tworzy si˛e obiektów na podstawie tej klasy. Stosuje si˛e raczej klasy potomne
(sphere, cylinder, block, ellipsoid) dziedziczace
˛ właściwości z klasy nadrz˛ednej (material i
center). Wszystkie wektory, t.j. środek obiektu, jego osie i.t.d. sa˛ podane we współrz˛ednych wek-
torów znormalizowanych do długości podanych w basis-size. Formy typu (właściwość (vector3
x y z)) , (właściwość x y z) można stosować zamiennie.

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

e1, e2, e3 [vector3] — kierunki osi biegnacych


˛ wzdłuż kraw˛edzi. Nie moga˛ to być wektory
współliniowe. Domyślnymi ustawieniami sa˛ kierunki wzdłuż wektorów bazowych.
elipsoid — elipsoida. Jest to podklasa dziedziczaca
˛ z klasy block, definiujaca
˛ elipsoid˛e wpisana˛
wewnatrz
˛ równoległościanu.

Przykład 10 Używanie klas potomnych geometric-object


1. Elipsoida, której najdłuższa oś skierowana jest wzdłuż wektora (1, 1, 1). (Pozostałe 2 osie sa˛
ortogonalne)
( make ellipsoid ( center 0 0 0 ) ( material ( make dielectric ( epsilon 1 2 ) ) )
( size 0 . 8 0 . 2 0 . 2 ) ( e1 1 1 1 ) ( e2 0 1 −1) ( e3 −2 1 1 ) )

A.2.5. Narzedzia
˛ geometrii

Sa˛ to funkcje pomocne przy manipulowaniu obiektami geometrycznymi:


(shift-geometric-object obiekt wektor−translacji) — przemieszcza obiekt o wektor−translacji
(typu vector3),
(geometric-object-duplicates wektor−translacji n m obiekt) — powiela m-krotnie obiekt w kie-
runku zadanym przez wektor−translacji , pomijajac
˛ przy tym pierwsze n kopii,
(geometric-objects-duplicates wektor−translacji n m lista−obiektow) — to samo co poprzed-
nio, tyle że translacji podlegaja˛ obiekty umieszczone w liscie−obiektow ,
(geometric-objects-lattice-duplicates lista−obiektow [ux uy uz]) — powiela wszystkie
obiekty b˛edace
˛ elementami listy−obiektow , dokonujac
˛ wszystkich możliwych translacji „ko-
mórki elementarnej” wewnatrz
˛ komórki sieciowej. Jest to użyteczne przy obliczeniach na
superkomórkach. Wymiary „komórki elementarnej” wynosza˛ ux × uy × uz okresów wzdłuż
każdego z wektorów bazowych. Domyślnie ux = uy = uz = 1,
(point-in-object? punkt obiekt) — zwraca informacj˛e czy wskazany przez wektor punkt znaj-
duje si˛e wewnatrz
˛ obiektu geometrycznego obiekt ,
point-in-periodic-object? punkt obiekt — działa podobnie jak point-in-object?, z ta˛ róż-
nica˛ że dodatkowo sprawdza czy punkt powielony przez wektory translacji znajduje si˛e w in-
nych obiektach,
display-geometric-object-info ilosc−spacji obiekt — wypisuje informacje o podanym obiek-
cie, oddzielone od siebie zadana˛ iloscia−spacji .

A.2.6. Funkcje konwersji współrzednych


˛

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

(lattice->cartesian x), (cartesian->lattice x) — przelicza x mi˛edzy współrz˛ednymi bazy


sieci Bravais’go (baza wektorów sieci znormalizowana do długości wektorów translacji pod-
stawowej basis-size) a współrz˛ednymi w układzie kartezjańskim,
(reciprocal->cartesian x), (cartesian->reciprocal x) — jak w powyższym przypadku, tyle
że konwersja zachodzi z / do współrz˛ednych bazy sieci odwrotnej. Współrz˛edne wektorów
w bazie kartezjańskiej sa˛ wyrażone w jednostkach 2π,
(reciprocal->lattice x), (lattice->reciprocal x) — przekształcenie mi˛edzy współrz˛ednymi
bazy sieci odwrotnej a współrz˛ednymi bazy sieci Bravais’go, z pomini˛eciem podczas konwer-
sji mnożnika 2π (współrz˛edne wektorów w bazie sieci Bravais’go’go sa˛ wyrażone w jednost-
kach 2π).
Dla wygody zdefiniowane sa˛ także funkcje rotacji we współrz˛ednych bazy sieci Bravais’go
i sieci odwrotnej (w sekcji A.1.4 opisana jest funkcja obrotu wektorów w układzie kartezjańskim
rotate-vector3).
(rotate-lattice-vector3 os theta v), (rotate-reciprocal-vector3 os theta v) — otrzymujemy
wektor v obrócony o kat
˛ w radianach theta wokół osi (kierunek osi wskazuje si˛e wektorem)
w bazie sieci Bravais’go (rotate-lattice-vector3) lub w bazie sieci odwrotnej
(rotate-reciprocal-vector3).
Współrz˛edne wektora falowego Blocha zazwyczaj umieszcza si˛e w I strefie Brillouina, ale
czasami uzasadnione jest umieszczenie wektora poza I strefa.˛ Dokładność MPB niestety maleje
tym bardziej im dalej znajda˛ si˛e współrz˛edne poza I strefa˛ Brillouina (z powodu wyboru ogra-
niczonego układu współrz˛ednych bazy). Aby temu zaradzić trzeba znaleźć współrz˛edne wektora
w sasiedniej
˛ I strefie. Temu właśnie służy funkcja first-brillouin-zone.
(first-brillouin-zone k) — podajac
˛ współrz˛edne wektora falowego Blocha k (w bazie wek-
torów sieci odwrotnej), otrzymujemy odpowiadajace˛ im współrz˛edne w I strefie Brillouina.
Funkcja ta może być zastosowane do listy wektorów falowych k-points za pomoca˛ funkcji
z j˛ezyka Scheme (map first-brillouin-zone k-points).

A.2.7. Funkcje inicjujace


˛

Sa˛ to funkcje uruchamiajace


˛ i kontrolujace
˛ symulacje. Najcz˛eściej wykorzystywana˛ funkcja˛
jest run wraz z jej odmianami:
(run funkcja−pasmowa ...) — funkcja run wczytuje parametry wejściowe, na ich podstawie ini-
cjuje symulacje i oblicza stany własne dla każdego wektora falowego z listy k-points. Warto-
ści funkcji dielektrycznej ε(~r), zanim zostana˛ policzone jakiekolwiek stany własne, sa˛ zapisy-
wane do pliku „epsilon.h5”. Funkcja run przyjmuje jako argumenty 0 lub wi˛ecej
funkcji−pasmowych. Funkcja−pasmowa posiada jako argument numer pasma, tak wi˛ec
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 93

(funkcja−pasmowa nr−pasma) przeprowadza operacj˛e na stanie własnym odpowiadajacym


˛ pa-
smu ωn (~k), (gdzie n to nr−pasma (n.p. zapisuje informacje o amplitudzie pola)).
(run-zeven funkcja−pasmowa ...), (run-zodd funkcja−pasmowa ...) — sa˛ to takie same funkcje jak
funkcja run z tym wyjatkiem,
˛ że wyniki ich obliczeń tycza˛ si˛e symetrii parzystej (run-zeven,
n.p. f(x, y, z) = f(x, y, −z)) badź
˛ nieparzystej (run-zodd, f(x, y, z) = −f(x, y, −z)) wzgl˛edem
płaszczyzny f(z) = 0 (f oznacza żadany
˛ ~ n (~r), ~En (~r), . . .)). Funkcje te powinny
stan własny (H
być używane wyłacznie:
˛
— dla struktur posiadajacych
˛ symetri˛e lustrzana˛ wzgl˛edem płaszczyzny z = 0,
— gdy wektory bazowe sa˛ ortogonalne, z czego trzeci z nich ma kierunek wzdłuż osi z:
(basis3 0 0 1),
— gdy wektory falowe Blocha maja˛ współrz˛edne w płaszczyźnie xy.
Gdy te warunki sa˛ spełnione, stany własne maja˛ zawsze symetri˛e parzysta˛ albo nieparzysta.˛
W dwóch wymiarach symetria parzysta / nieparzysta stanów własnych odpowiada odpowied-
nio polaryzacji TE / TM. Klasyfikacja symetrii tego typu jest użyteczna dla struktur, t.j. ścieżki
światłowodowe, światłowody, płytki z kryształu fotonicznego,
(run-te funkcja−pasmowa ...), (run-tm funkcja−pasmowa ...) — otrzymujemy stany własne ogra-
niczone do polaryzacji TE (run-te, pole elektryczne ~E drga w płaszczyźnie xy a pole magne-
~ drga wzdłuż osi z) i polaryzacji TM (run-tm, H
tyczne H ~ drga w płaszczyźnie xy a ~E drga
~ / ~E polaryzacji TE / TM maja˛ tylko składowa˛ z-towa˛
wzdłuż osi z). Odpowiednio pola H
(ułatwia to wizualizacj˛e),
(run-yeven funkcja−pasmowa...), (run-yodd funkcja−pasmowa...) — sa˛ to funkcje analogiczne do
run-zeven i run-zodd, tyle że mamy do czynienia z symetria˛ w płaszczyźnie y = 0. Funkcji
tych powinno si˛e używać tylko w przypadkach gdy:
— struktura jest symetryczna wzgl˛edem płaszczyzny y = 0,
— wektory bazowe sa˛ ortogonalne, z czego drugi wektor ma kierunek wzdłuż osi y: (basis2
0 1 0),
— wektor ~k ma współrz˛edne w płaszczyźnie xz.
(run-yeven-zeven, run-yeven-zodd, run-yodd-zeven, run-yodd-zodd, run-te-yeven,
run-te-yodd, run-tm-yeven, run-tm-yodd — funkcje te łacz
˛ a˛ wszystkie możliwe przypadki
polaryzacji i symetrii. Uniwersalna˛ funkcja˛ pozwalajac
˛ a˛ wybrać dowolna˛ polaryzacj˛e i syme-
tri˛e jest run-parity,
(run-parity p ponowne−ustawienie−pol funkcja−pasmowa...) — funkcja ta przyjmuje dwa dodat-
kowe parametry: parzystość p i zmienna˛ boole’owska˛ ponowne-ustawienie-pol (true,
false). p precyzuje rodzaj parzystości i powinno składać si˛e z szeregu predefiniowanych
zmiennych:
— NO-PARITY: odpowiednik funkcji run,
94 A. Funkcje i procedury plików ctl

— EVEN-Z (lub TE): odpowiednik run-zeven lub run-te,


— ODD-Z (lub TM): odpowiednik run-zodd lub run-tm,
— EVEN-Y: tak jak EVEN-Z lecz dla płaszczyzny y = 0,
— ODD-Y: tak jak ODD-Z lecz dla płaszczyzny y = 0.
Aby określić wi˛ecej niż jeden rodzaj symetrii, powyższe zmienne można łaczyć,
˛ n.p.
(+ EVEN-Z ODD-Y) (struktura musi być symetryczna wzgl˛edem płaszczyzn z = 0 i y = 0, otrzy-
mujemy tylko takie stany własne, dla których wektor falowy ~k drga wzdłuż osi x, pole magne-
tyczne drga wzdłuż osi z, a pole elektryczne wzdłuż osi y). Jeżeli zmienna ponowne-ustawienie-
pol jest ustawiona na false, zostaja,˛ jeśli to możliwe, wykorzystane jako poczatkowe
˛ usta-
wienie, pola obliczone z poprzedzajacej
˛ symulacji. w przeciwnym przypadku (ponowne-usta-
wienie-pol jest prawda˛ true), w poczatkowej
˛ fazie symulacji pola wektorowe (stany własne)
przyjmuja˛ wartości losowe. Wszystkie funkcje inicjujace,
˛ za wyjatkiem
˛ omawianej, usta-
wiaja˛ domyślnie ponowne-ustawieniepol jako prawd˛e true. Opcjonalnie ponowne-ustawienie-
pol może być ciagiem
˛ znaków zawierajacym
˛ ścieżk˛e do pliku HDF5 z zapisanymi funkcja˛
save-eigenvectors polami poczatkowymi.
˛
(display-eigensolver-stats) — funkcja wyświetlajaca
˛ statystyki dotyczace
˛ osiagania
˛ zbież-
ności rozwiazań.
˛
Kilka funkcji pasmowych, przetwarzajacych
˛ pola własne, zostało przedstawione w dodatku
A.2.9. Można także zdefiniować własne funkcje pasmowe. Przy definiowaniu własnych funkcji

Przykład 11 Formuła funkcji pasmowej


( define ( moja−funkcja−pasmowa which−band )
. . . z r o b c o s z pasmem o n u m e r z e which−band . . .
which−band j e s t numerem k o l e j n o s c i w y s t a p i e n i a pasma
p o c z a w s z y 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
)

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

A.2.8. wektor falowy jako funkcja czestotliwo


˛ ści ~k(ω)

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.

A.2.9. Funkcje pasmowe przetwarzajace


˛ pola wektorowe

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

(output-hfield nr−pasma) — zapisuje wszystkie składowe wektorów należacych


˛ do pola ma-
gnetycznego H~ we współrz˛ednych kartezjańskich,
(output-hfield-x nr−pasma), (output-hfield-y nr−pasma), (output-hfield-z nr−pasma) —
~
funkcje te zapisuja˛ do pliku składowe x, y, z pola H,
( output−dfield nr−pasma) — zapisuje wszystkie składowe wektorów należacych
˛ do pola induk-
cji elektrycznej ~D we współrz˛ednych kartezjańskich,
(output-dfield-x nr−pasma) (output-dfield-y nr−pasma), (output-dfield-z nr−pasma) —
funkcje te zapisuja˛ do pliku składowe x, y, z pola ~D,
(output-efield nr−pasma) — zapisuje wszystkie składowe wektorów należacych
˛ do pola elek-
trycznego ~E we współrz˛ednych kartezjańskich,
(output-efield-x nr−pasma), (output-efield-y nr−pasma), (output-efield-z nr−pasma) —
funkcje te zapisuja˛ do pliku składowe x, y, z pola ~E,
(output-hpwr nr−pasma) — zapisuje uśredniona˛ po czasie g˛estość energii pola magnetycznego
~ 2,
|H|
(output-dpwr nr−pasma) — zapisuje uśredniona˛ po czasie g˛estość energii pola elektrycznego
ε|~E|2 ,
(fix-hfield-phase nr−pasma), (fix-dfield-phase nr−pasma), (fix-efield-phase nr−pasma)
— funkcje te uporzadkowuj
˛ a˛ faz˛e danego stanu własnego (faza ma zazwyczaj wartość losowa)˛
w taki sposób, aby cz˛eść rzeczywista pola (H, ~ ~D, ~E) była możliwie najwi˛eksza. Aby ustalić
faz˛e danego pola zapisywanego do pliku komendami output-..., należy funkcj˛e inicjujac
˛ a˛
(run) wywołać w nast˛epujacy
˛ sposób:
(run-tm fix-dfield-phase output-dfield-z).
W kolejnych rozdziałach przedstawione b˛eda˛ funkcje output-poynting, output-tot-pwr
zapisujace
˛ wektory Poyntinga i całkowita˛ g˛estość energii elektromagnetycznej.
Czasami istnieje potrzeba wybrania tylko takich stanów własnych, dla których żadane
˛ obiekty
posiadaja˛ wyższa˛ g˛estość energii niż ich otoczenie (stany zlokalizowane). Służy do tego komenda:
(output-dpwr-in-objects funkcja−pasmowa minimum−energii obiekty ...) — funkcja ta „filtruje”
otrzymane stany własne za pomoca˛ funkcji−pasmowych , zapisujac ˛ tylko te, które posiadaja˛
energi˛e w obiektach wi˛eksza˛ od minimum−energii. Na wyjściu wypisywany jest także ułamek
energii znajdujacej
˛ si˛e w obiektach w stosunku do otoczenia w formie:
dpwr: nr-pasma, częstotliwość, ułamek-energii-w-obiektach
Funkcja output-dpwr-in-objects przyjmuje jako parametr tylko jedna˛ funkcj˛e pasmowa,˛ lecz
możliwe jest także połaczenie
˛ kilku funkcji pasmowych w jedna˛ za pomoca˛ funkcji:
(combine-band-functions funkcje−pasmowe) — tworzy nowa˛ funkcj˛e pasmowa,
˛ wywołujac
˛ a˛
w sekwencji funkcje−pasmowe,
A.2. Definiowanie struktury fotonicznej, wyliczanie pasm fotonicznych, pól wektorowych i.t.p. 97

(output-at-kpoint punkt−k funkcje−pasmowe) — jest to funkcja wywołujaca


˛ w sekwencji
funkcje−pasmowe dla zadanego wektora falowego (punkt−k) w przestrzeni odwrotnej.

A.2.10. Funkcje różne

(retrieve-gap nizsze−pasmo) — zwraca wielkość fotonicznej przerwy wzbronionej pomi˛edzy


pasmem nizsze-pasmo a pasmem nizsze−pasmo + 1, jako stosunek różnicy cz˛estotliwości znor-
malizowanych ∆ω do wartości średniej z tych dwóch cz˛estotliwości ωsr .

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 )

Dla stanów własnych posiadajacych


˛ całkowita˛ parzystość, α wynosi +1 (symetria parzysta) lub
−1 (symetria nieparzysta). Dla innych stanów parzystość przyjmie wartości z przedziału (−1, 1).
Poniższe funkcje sa˛ użyteczne, gdy mamy „prawie” symetryczna˛ struktur˛e (dzieje si˛e tak,
n.p. jeżeli struktura posiada jakieś podłoże) i chcemy stwierdzić czy dane stany własne posiadaja˛
cz˛eściowa˛ parzystość symetrii (α > 0 lub α < 0):
display-zparities, display-yparities — sa˛ to funkcje pasmowe przeznaczone do urucha-
˛ parzystości dla płaszczyzn odpowiednio z = 0
miania wraz komendami (run), wypisujace
i y = 0 oraz dla każdego wektora falowego z listy k-points,
(compute-zparities) — zwraca list˛e zawierajac ˛ a˛ parzystości symetrii α wzgl˛edem płaszczy-
zny z = 0 dla każdego stanu własnego i ostatniego wektora falowego (zawartego w zmiennej
current-k),
(compute-yparities) — zwraca list˛e zawierajac
˛ a˛ parzystości symetrii α wzgl˛edem płaszczy-
zny y = 0 dla każdego stanu własnego i ostatniego wektora falowego (zawartego w zmiennej
current-k).
Pole magnetyczne jest w rzeczywistości pseudowektorem i tym samym działajac
˛ nań operatorem
~ przez −1. Z tego powodu, pole magnetyczne zdaje si˛e mieć
symetrii lustrzanej, przemnażamy H
98 A. Funkcje i procedury plików ctl

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).

A.3. Modyfikowanie pól skalarnych i wektorowych

Dzi˛eki pakietowi MPB mamy szeroki wachlarz możliwości manipulowania, przetwarzania


i zapisywania pól wektorowych. Odbywa si˛e to w dwóch etapach. Wpierw ładujemy pola do
pami˛eci za pomoca˛ funkcji get-*, a nast˛epnie je przetwarzamy.
Najprostsze możliwe operacje wykonuje si˛e na aktualnie załadowanym polu wektorowym
(opis w dodatku A.3.2). Wykonywanie bardziej złożonych operacji (na dwóch i wi˛ekszej liczbie
pól wektorowych) jest opisane w dodatku A.3.3.

A.3.1. Normalizacja pól

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.

A.3.2. Ładowanie i manipulowanie bieżacym


˛ polem

W celu załadowania pola do pami˛eci stosuje si˛e po wywołaniu funkcji inicjujacej


˛ (run) funk-
cje get-*. (W przypadku funkcji get-epsilon powinno si˛e to uczynić po wywołaniu funkcji
init-params).
(get-hfield nr−pasma) — ładuje do pami˛eci pole magnetyczne dla pasma nr−pasma,
(get-dfield nr−pasma) — ładuje pole indukcji elektrycznej dla pasma nr−pasma,
(get-efield nr−pasma) — ładuje pole elektryczne dla pasma nr−pasma, (Właściwie jest to wy-
wołanie funkcji get-efield-from-dfield zaraz po get-dfield),
(get-epsilon nr−pasma) — ładuje funkcj˛e dielektryczna,
˛
Na raz załadowanych polach (skalarnych lub wektorowych) można wykonywać dowolne operacje:
(get-efield-from-dfield) — funkcja ta uzyskuje pole elektryczne poprzez przemnożenie pola
indukcji magnetycznej ~D przez odwrotny tensor dielektryczny ε−1 (~r). Działa tylko wtedy, gdy
do pami˛eci zostało załadowane pole ~D,
(fix-field-phase). porzadkuje
˛ faz˛e aktualnie załadowanego stanu własnego (faza ma zazwy-
czaj wartość losowa)
˛ w taki sposób, aby cz˛eść rzeczywista pola była możliwie najwi˛eksza
(aby można było wizualizować tylko cz˛eść rzeczywista),
˛
(compute-field-energy) — majac ˛ pole H~ lub ~D, oblicza odpowiadajac
˛ a˛ im funkcj˛e g˛estości
energii (znormalizowanej odpowiednio do całkowitej energii w polu H ~ lub ~D). Na wyjściu
wypisywane sa˛ także informacje o ułamku energii pola w każdym z kartezjańskich kierunków
w nast˛epujacej
˛ formie:

f-energy-components:, k-index, band-index, x-fraction, y-fraction, z-fraction

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

(compute-energy-in-dielectric min−eps max−eps) — zwraca ułamek energii całkowitej pola


w obszarach dielektryka zawierajacych
˛ stała˛ dielektryczna˛ ε z zakresu od min−eps do max−eps,
(compute-energy-in-objects obiekty...) — zwraca ułamek energii znajdujacy ˛ si˛e wewnatrz
˛ zera
lub wi˛ekszej liczby obiektów,
(compute-energy-integral f) — f jest funkcja˛ ( f u eps r) zwracajac
˛ a˛ liczb˛e, posiadajac
˛ a˛ trzy
parametry: u – g˛estość energii w punkcie wskazywanym przez wektor r (we współrz˛ednych
sieci), eps – stała dielektryczna w tym samym punkcie; compute-energy-integral f liczy
całk˛e z funkcji f po całej obj˛etości komórki elementarnej. (Całka jest liczona jako suma g˛e-
stości energii w każdym pikselu/wokselu pomnożona przez obj˛etość siatki składajacej
˛ si˛e z
tychże piksli/wokseli). Funkcja ta przydaje si˛e w rachunku zaburzeń,
(compute-field-integral f) — funkcja podobna do compute-energy-integral z tym wyjat-
˛
kiem, że f jest funkcja˛ ( f F eps r) zwracajac
˛ a˛ liczb˛e (może być zespolona), gdzie F jest ze-
spolonym wektorem pola w danym punkcie r,
(get-epsilon-point r) — zwraca interpolowana˛ wartość funkcji dielektrycznej w punkcie r .
Ponieważ MPB w swoich obliczeniach używa efektywnego tensora dielektrycznego, funkcja
ta zwraca uśredniona˛ wartość stałej dielektrycznej po sasiednich
˛ punktach (dodatek B.3),
(get-epsilon-inverse-tensor-point r) — zwraca odwrotny tensor dielektryczny (macierz 3x3)
w punkcie wskazywanym przez wektor położenia r (we współrz˛ednych wektorów bazowych
sieci). Jeżeli do budowy komórki elementarnej wykorzystano materiały magnetooptyczne,
zwracana macierz może mieć postać macierzy Hermitowskiej,
(get-energy-point r) — zwraca interpolowana˛ g˛estość energii w punkcie wskazywanym przez
wektor położenia r,
(get-field-point r) — zwraca interpolowany (zespolony) wektor pola w punkcie wskazywa-
nym przez wektor położenia r,
(get-bloch-field-point r) — zwraca interpolowany (zespolony) wektor pola Blocha (cz˛eść
pola bez obwiedniej exp(i~k~r)) w punkcie wskazywanym przez wektor położenia r,
(output-field [ nx [ ny [ nz ] ] ]) , (output-field-x [ nx [ ny [ nz ] ] ]) ,
(output-field-y [ nx [ ny [ nz ] ] ]) , (output-field-z [ nx [ ny [ nz ] ] ]) — zwraca aktual-
nie załadowane do pami˛eci pole. Opcjonalne parametry nx, ny, nz oznaczaja˛ liczb˛e okresów
wzdłuż 3 kierunków bazowych sieci. Jeżeli sa˛ pomini˛ete to przyjmuja˛ wartość 1. Dla pól wek-
torowych output-field zwraca wszystkie kartezjańskie składowe wektorów pola, podczas
gdy inne warianty tej funkcji zwracaja˛ składowe wektorów tylko w jednym kierunku (x, y lub
z ),
(output-epsilon [ nx [ ny [ nz ] ] ]) — funkcja ta wywołuje dwie funkcje: get-epsilon,
output-field i nast˛epnie zapisuje TWPD do pliku epsilon.h5. Dane sa˛ pogrupowane na
nast˛epujacych
˛ zbiory (z ang. dataset):
A.3. Modyfikowanie pól skalarnych i wektorowych 101

— data: 3/Tr(εkl ) lub (1/ε),


— epsilon.{xx,xy,xz,yy,yz,zz}: elementy tensora wzgl˛ednej przenikalności dielektrycz-
nej we współrz˛ednych kartezjańskich,
— epsilon_inverse.{xx,xy,xz,yy,yz,zz}: elementy odwrotnego TWPD we współrz˛ed-
nych kartezjańskich.

A.3.3. Przechowywanie i wykonywanie działań na różnych polach

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.

A.3.4. przechowywane pola i obwiedniej

Pola wektorowe h o współrz˛


i ednych zespolonych takie jak ~E i H ~ maja˛ postać periodycznej funk-
~ r) = ~u ~ (~r) · exp(i~k~r). W celu przyspieszenia obliczeń, składowe pól ~E i
cji Blocha: ~E(~r), H(~ n,k
~ – obwiednia exp(i~k~r) i cz˛eść periodyczna ~u ~ (~r) – sa˛ przechowywane oddzielnie i przemna-
H n,k
A.3. Modyfikowanie pól skalarnych i wektorowych 103

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!.

(cvector-field-nonbloch! f) — definiuje pole wektorowe w przestrzeni liczb zespolonych f


jako samoistnie periodyczne, w zwiazku
˛ z czym nie powinno być przemnażane przez exp(i~k~r).

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!.

A.3.5. Manipulowanie wektorami własnymi

Wraz z pakietem MPB dostajemy także kilka niskopoziomowych funkcji operujacych


˛ na wek-
torach własnych:
(get-eigenvectors pierwsze−pasmo n) — zwraca obiekt wektora własnego, który jest kopia˛
n-tego wektora własnego zaczynajacego
˛ si˛e od pierwszego−pasma. N.p. żeby dostać kopi˛e
wszystkich wektorów własnych, należy użyć (get-eigenvectors 1 num-bands),
(set-eigenvectors ev pierwsze−pasmo) — ustawia aktualne wektory własne w pierwszym-pa-
śmie na te w obiekcie wektora własnego ev (jako zwrócony przez get-eigenvectors). (Nie
działa, jeśli rozmiary siatki si˛e nie zgadzaja),
˛
104 A. Funkcje i procedury plików ctl

(load-eigenvectors nazwa−pliku), (save-eigenvectors nazwa−pliku). wczytuje/zapisuje aktu-


alne wektory własne (amplitudy fal płaskich) z/do pliku nazwa−pliku.h5. Zamiast bezpośred-
niego używania load-eigenvectors, można podać jako nazw˛e pliku true lub false. Załado-
wane wektory własne musza˛ być tej samej wielkości (ten sam rozmiar siatki i liczba pasm) jak
w aktualnych ustawieniach.
Aktualnie jest tylko jedna interesujaca
˛ rzecz jaka˛ można wykonać na wektorach własnych; jest
to wyliczenie macierzy której elementami sa˛ iloczyny skalarne zapisanych wektorów własnych
i aktualnych wektorów własnych. Może si˛e to przydać, n.p. do wykrywania krzyżujacych
˛ si˛e pasm
fotonicznych albo do ustawiania fazy dla różnych wektorów falowych. Iloczyn skalarny zwracany
jest jako obiekt – macierz „sqmatrix”, której elementy moga˛ być wczytane za pomoca˛ formuł
sqmatrix-size i sqmatrix-ref.
(dot-eigenvectors ev pierwsze−pasmo) — zwraca obiekt „sqmatrix” zawierajacy
˛ iloczyn ska-
larny zapisanych wektorów własnych ev z aktualnymi wektorami własnymi, zaczynajac
˛ od
pierwszego-pasma. Element ai j macierzy zawiera iloczyn skalarny (i + 1) (sprz˛eżonego) wek-
tora z listy ev oraz (pierwsze−pasmo + j) wektora własnego. Wektory własne, po obliczeniu,
sa˛ ortonormalne, tak wi˛ec iloczyn skalarny dwóch takich samych wektorów da w rezultacie
macierz jednostkowa,˛
(sqmatrix-size sm) — zwraca wymiar n × n macierzy sm,
(sqmatrix-ref sm i j) — zwraca ai j element macierzy sm o wymiarach n × n,
gdzie (i, j) ∈ (0, 1, . . . , n − 1),

A.4. Symetria wzgledem


˛ odbicia

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

A.5. Obliczenia równoległe

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).

A.5.1. Przetwarzanie równoległe za pomoca˛ MPI

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.

Przykład 13 wywołanie programu z pakietu MPB wykorzystujacego


˛ MPI, działajacego
˛ na 4 pro-
cesorach/komputerach
uzytkownik@localhost ~ $ mpirun -np 4 mpb-mpi plik.ctl

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.

A.5.2. Alternatywne rozwiazanie:


˛ mpb-split

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

Niniejszy rozdział opracowałem całkowicie w oparciu o pozycj˛e [15].

B.1. Zagadnienie własne Maxwella

Podstawowe zagadnienie własne Maxwella przedstawione w notacji Diraca wyglada


˛ nast˛epu-
jaco:
˛

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

|Hi = exp(i ·~k ·~r − iωt)|H~k i (B.3)

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)

Â~k |H~k i = (ω/c2 )|H~k i, (B.4)

gdzie Â~k jest nieujemnie określonym operatorem hermitowskim


  1 
Â~k = ~∇ + i~k × ~∇ + i~k × (B.5)
ε

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

B.1.1. Wybór funkcji bazowych

W metodzie domeny cz˛estotliwościowej równanie (B.4) jest sprowadzane do skończonego za-


gadnienia własnego za pomoca˛ rozwini˛ecia danego stanu wzgl˛edem skończonego zbioru funkcji
bazowych (możliwe jest również rozwini˛ecie wzgl˛edem nieskończonego zbioru funkcji wektoro-
wych) {|bm i}.

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

gdzie h jest wektorem kolumnowym zadanym przez współczynniki hm rozwini˛ecia w zastosowa-


nej bazie, a A i B sa˛ macierzami rozmiaru N × N z wyrazami Alm = hbl |Ak |bm i i Blm = hbl |bm i.
W zasadzie możemy obliczyć elementy macierzy A oraz B i nast˛epnie zastosować standardowe
metody do numerycznego rozwiazania
˛ równania (B.8), które użyto m.in. w pracach [6, 7, 11,
13, 14]. Takie podejście wymaga rozmiaru pami˛eci O(N 2 ) do zapami˛etania wyrazów macierzy
i O(N 3 ) pami˛eci w przypadku diagonalizacji zagadnienia (B.8). Tym samym jest praktycznie
bezużyteczne dla dużych wartości N.
Z fizycznego punktu widzenia interesuje nas tylko cz˛eść widma fotonicznego danego przez
p pasm, gdzie p jest dużo mniejsze od N. Pozwala nam to zastosować metody iteracyjne, w któ-
rych ilość pami˛eci potrzebnej do zapami˛etania elementów macierzy jest rz˛edu O(pN) i O(p2 N)
dla wspomnianego problemu diagonalizacji. Istotna˛ cecha˛ metod iteracyjnych jest to, że wyma-
gaja˛ one tylko szybkich (rz˛edu O(N)) metod do wyznaczenia wartości iloczynów Ah i Bh bez
konieczności zapisywania i trzymania w pami˛eci tychże iloczynów.
Wybór funkcji bazowych {|bm i} determinuja˛ 3 czynniki:
B.1. Zagadnienie własne Maxwella 109

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.

B.1.2. Baza funkcji płaskich

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

~ m sieci odwrotnej; obci˛ecie liczby tych wektorów, t.j. wartości N, po-


dla określonego wektora G
~ m . Mówiac
lega na określeniu maksymalnej wartości G ˛ dokładniej takie obci˛ecie wartości |G~m
prowadzi i jest ograniczone do wektorów sieci odwrotnej położonych w obj˛etości kuli, ale roz-
szerzymy ten obszar do obj˛etości równoległościanu w taki sposób, że transformacja od bazy fal
płaskich do reprezentacji przestrzennej jest możliwa za pomoca˛ dyskretnej transformaty Fouriera
[Discrete Fourier Transform (DFT)]. W ten sposób zbiór fal płaskich jest w prostym zwiazku
˛
z siecia˛ przestrzenna˛ struktury fotonicznej, która jest wygodniejsza i bardziej intuicyjna. W szcze-
gólności załóżmy, że trzy wektory sieciowe translacji prymitywnych (jednostkowe wektory trans-
~ 1, G
lacji) wynosza˛ {~R1 , ~R2 , ~R3 } a wektory translacji podstawowych w sieci odwrotnej {G ~ 2, G
~ 3 },
~ j = 2πδi j . Wtedy funkcje bazowe sa˛ postaci
˛ ~Ri · G
które definiuja˛ zwiazki

~
|bm1 bm2 bm3 i = e−i ∑ j m j G j~x

natomiast
  
Nj Nj
mj = − + 1, . . . , , N = N1 N2 N3
2 2

i rozwini˛ecie (B.7) przyjmuje postać


!
∑ ~h{m j }ei ∑ j,k m j G j · nk Rk /Nk = ∑ ~h{m j }e2πi ∑ j m j n j /N j ,
~ ~
~~
H ∑ nk~Rk /Nk = (B.9)
k
k {m j } {m j }

gdzie nk = 0, . . . , Nk − 1 opisuje i dotyczy sieci zawierajacej


˛ N1 × N2 × N3 punktów wzdłuż kierun-
ków sieciowych. Jest to dokładnie trójwymiarowa DFT, która może być obliczona numerycznie
za pomoca˛ szybkiej transformaty Fouriera [Fast Fourier Transform (FFT)] [12] w czasie rz˛edu
O(N log N).
110 B. Metoda fal płaskich

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)

Obliczenie odwrotności efektywnego tensora dielektrycznego jest przedstawione w rozdziale 2.3


pracy [15].
Macierz B jest macierza˛ jednostkowa˛ ze wzgl˛edu na ortonormalność funkcji bazowych. Ponie-
waż funkcje bazowe sa˛ skalarami, to amplitudy ~hm w równaniu (B.7) sa˛ wektorami. Ponadto pola
wyznaczone za pomoca˛ równania (B.8) powinny spełniać warunki poprzeczności, co jest ogromna˛
zaleta˛ stosowania fal płaskich: równanie (B.2) staje si˛e jedynie lokalnym ograniczeniem na ampli-
tudy ~hm · (~k + G
~ m ) = 0. Dla każdego wektora sieci odwrotnej G~ m wybieramy par˛e {ûm , v̂m } orto-
normalnych wektorów własnych, które sa˛ prostopadłe do wektora ~k + G~ m i zapisujemy amplitud˛e
(1) (2)
w postaci ~hm = hm ûm + hm v̂m . W ten sposób baza spełnia warunek poprzeczności a rozwiazania
˛
równania (B.8) rz˛edu 2N spełniaja˛ także ten warunek.

B.2. Symetria wzgledem


˛ odbicia

W przypadku ogólnym współczynniki bazowe h sa˛ liczbami zespolonymi ale dodatkowe


uproszczenia sa˛ możliwe, jeśli funkcja dielektryczna wykazuje właściwości symetrii wzgl˛edem
odbicia, tj. ε(−~r) = ε(~r) Transformata Fouriera rzeczywistej oraz parzystej funkcji jest rzeczy-
wista i parzysta, z czego wynika, że w reprezentacji fal płaskich macierz Ak w równaniu (B.10)
jest macierza˛ rzeczywista˛ i symetryczna.˛ Oznacza to, że amplitudy hm fal płaskich można wy-
brać czysto rzeczywistymi, co zmniejsza o połow˛e wymogi co do pami˛eci oraz ponad dwukrotnie
skraca czas potrzebny do wyznaczenia FFT i operacji zmiennoprzecinkowych na macierzach rze-
czywistych. Redukuje to znacznie liczb˛e iteracji w procesie diagonalizacji odpowiedniej macie-
rzy w procesie rozwiazywania
˛ zagadnienia własnego. Natomiast przestrzenne pola elektromagne-
tyczne nie moga˛ być wybrane jako czysto rzeczywiste choć moga˛ spełniać relacje (o ile istnieje
~ ~ (~x)]∗ . Wi˛ekszość przypadków wykazuje inwersj˛e wzgl˛edem
~ ~ (−~x) = [H
inwersja przestrzenna) H k k
odbicia i MPB wykorzystuje t˛e właściwość symetrii w celu optymalizacji kodu i obliczeń nu-
merycznych. Ale w ogólności pakiet można stosować także do układów nie wykazujacych
˛ tej
symetrii.
B.3. Efektywny tensor przenikalności dielektrycznej 111

B.3. Efektywny tensor przenikalności dielektrycznej

~ ~ i w bazie fal płaskich mnożenie przez ε−1 jest wy-


W trakcie wyznaczania iloczynu Â~k |H k
konywane w przestrzeni położeń po obliczeniu transformaty Fouriera co wymaga znajomości
odwrotności przenikalności w tym punkcie. Niestety może prowadzić to do słabej zbieżności war-
tości własnych jako funkcji N ze wzgl˛edu na problemy zwiazane
˛ z reprezentacja˛ nieciagłości
˛ za
pomoca˛ szeregów Fouriera. Jednakże można pokazać, że stosujac
˛ wygładzony efektywny tensor
przenikalności dielektrycznej ośrodka w pobliżu (w obszarze) mi˛edzypłaszczyznowym udaje si˛e
ten problem obejść, tj. osiagn
˛ ać
˛ dokładne wyniki dla średnich wartości N [8]. W szczególności
w pobliżu dielektrycznych mi˛edzypłaszczyzn możemy uśredniać właściwości dielektryczne na
dwa różne sposoby zgodnie z podejściem efektywnego ośrodka w zależności od typu polaryzacji
˛ fali wzgl˛edem normalnej do powierzchni n̂. Dla pola elektrycznego ~Ekn̂ uśredniamy
padajacej
ε−1 , dla ~E prostopadłego do n̂, a w obliczeniach używamy odwrotności uśrednionego tensora ε.
Takie podejście prowadzi do efektywnego tensora przenikalności dielektrycznej εf−1 postaci

−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

percent error in eigenvalue


E
1 1 1
ε averaging
E
J 1
E 1 1
E 1 1
J J
E E E
J
E
no ε averaging
1 E E
J J E
J E E
J J
ε averaging
J J
0.1
J J

0.01
10 100
resolution (grid points / a)

Rysunek B.1. Źródło [15]

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

Indeks funkcji i procedur plików ctl

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

[1] Libctl User Reference. http://ab-initio.mit.edu/wiki/index.php/Libctl_User_


Reference.
[2] MIT Scheme Reference. http://groups.csail.mit.edu/mac/projects/scheme/
documentation/scheme_toc.html.
[3] MPB Data Analysis Tutorial. http://ab-initio.mit.edu/wiki/index.php/MPB_Data_
Analysis_Tutorial.
[4] MPB User Reference. http://ab-initio.mit.edu/wiki/index.php/MPB_User_Reference.
[5] “strona internetowa pakietu MPB”. http://ab-initio.mit.edu/mpb/.
[6] K.M. Ho, C.T. Chan i C.M. Soukoulis. “Existence of a photonic gap in periodic dielectric structures”.
Phys. Rev. Lett., 65:3152–3155, 1990.
[7] H. S. Sözüer i J. W. Haus. “Photonic bands: convergence problems with the plane-wave method”.
Phys. Rev. B, 45:13962–13972, 1992.
[8] R. D. Meade, A. M. Rappe, K. D. Brommer, J. D. Joannopoulos i O. L. Alerhand. “Acurate theoretical
analysis of photonic band-gap materials”. Phys. Rev. B, 48:8434–8437, 1993.
[9] John D. Joannopoulos, Robert D. Meade i Joshua N. Winn. Photonic Crystals. Molding the Flow of
Light. Princeton University Press, Singapore, 1 wydanie, 1995.
[10] Charles Kittel. Wstȩp do fizyki ciała stałego. PWN, 1996. ISBN 8301127066.
[11] K. Bush i S. John. “Liquid-crystal photonic-band-gap materials: the tunable electromagnetic va-
cuum”. Phys. Rev. Lett., 83:2229–2241, 1998.
[12] S. G. Johnson i M. Firgo. “FFTW: an adaptive software architecture for the FFT”. W “1998 IEEE
Intl. Conf. on Acoustics, Speech, and Signal Processing”, str. 1381–1384. Institute of Electrical and
Electronic Enginers, 1998.
[13] W. C. Sailor, F. M. Mueller i P. R. Villeneuve. “Augmented-plane-wave method for photonic band-gap
materials”. Phys. Rev. B, 57:8819–8822, 1998.
[14] T. Suzuki i P. K. L. Yu. “Method of projection operators for photonic band structures with perfectly
conducting elements”. Phys. Rev. B, 57:2229–2241, 1998.
[15] Steven G. Johnson i J. D. Joannopoulos. “Block-iterative frequency-domain methods for Maxwell’s
equations in a planewave basis”. Opt. Express, 8(3):173–190, 2001.
URL http://www.opticsexpress.org/abstract.cfm?URI=OPEX-8-3-173
[16] Kazuaki Sakoda. Optical Properties of Photonic Crystals. Springer, 2001. ISBN 3-540-41199-2.
[17] S.G. Johnson i John D. Joannopoulos. Photonic Crystals. The road from Theory to Practice. Kluwer
Academic Publishers, Boston, 1 wydanie, 2002.
118 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.

You might also like