Edytor sekwencji: okresowe rozmieszczanie obiektów w OghmaNano.
1. Wprowadzenie
Wiele struktur urządzeń fotonicznych i elektronicznych ma z natury okresową budowę. Siatka DFB (z rozproszonym sprzężeniem zwrotnym) wymaga precyzyjnie rozmieszczonych rzędów lub szczelin. Kryształ fotoniczny jest zbudowany z regularnej sieci dielektrycznych elementów. Metapowierzchnia plazmoniczna składa się z powtarzających się elementów rezonatorowych, rozmieszczonych w odległościach mniejszych niż długość fali. Tworzenie tych struktur element po elemencie byłoby niepraktyczne, dlatego OghmaNano oferuje edytor, który na podstawie jednego elementu automatycznie generuje jego kopie w określonych pozycjach w przestrzeni 3D.
Ważną cechą tego systemu jest to, że każda kopia ma takie same parametry optyczne i elektryczne jak oryginał. Kopie nie są niezależnymi obiektami – stanowią one grupę identycznych replik, które dziedziczą wszystkie właściwości materiałowe, właściwości warstw i stałe optyczne obiektu nadrzędnego. Dzięki temu łatwo można zmodyfikować całą periodyczną strukturę, edytując jedynie oryginał.
Edytor kroków oferuje trzy tryby o rosnącym poziomie złożoności: podstawowy tryb dla prostych, jednorodnych układów, tryb „kryształ”, przeznaczony do struktur zdefiniowanych przez podstawowe wektory sieci krystalicznej, oraz tryb skryptów Lua, umożliwiający definiowanie dowolnych rozkładów punktów.
2. Otwieranie edytora kroków.
Aby otworzyć edytor kroków, rozpocznij od głównego okna symulacji OghmaNano (??). Kliknij prawym przyciskiem myszy na obiekcie, który chcesz zduplikować, i wybierz opcję „Edytuj obiekt” z menu kontekstowego. Spowoduje to otwarcie edytora obiektów, jak pokazano na ilustracji ??.
W edytorze obiektów znajdź wiersz o nazwie „Kroki”. W tym wierszu wyświetlane są aktualne parametry kroku – przesunięcie (dx, dy, dz) między kopiami oraz liczba kopii (nx, ny, nz) w każdym kierunku. Kliknij przycisk „Edytuj” (oznaczony trzema kropkami) znajdujący się na prawym końcu wiersza „Kroki”, aby otworzyć okno edytora kroku.
3. Podstawowy tryb sekwencyjny.
Domyślnie edytor kroków otwiera się w podstawowym trybie, jak pokazano na ilustracji ??. Ten tryb jest najprostszym sposobem tworzenia tablicy obiektów w jednym, dwóch lub trzech wymiarach. Wymaga on podania pojedynczego wektora kroku (dx, dy, dz) i powtarza obiekt określoną liczbę razy wzdłuż każdej osi. Pola to:
- step dx, dy, dz – przesunięcie między kolejnymi kopiami w każdym z kierunków.
- Liczba obiektów x, y, z – liczba kopii, które należy umieścić wzdłuż każdej osi.
Na przykład, aby utworzyć jednowymiarową siatkę składającą się z 10 elementów, rozmieszczonych w odległości 209 nm od siebie wzdłuż osi z, należy ustawić dz = 209 nm, nz = 10, a wartości dx i dy pozostawić na poziomie zera. Jest to konfiguracja przedstawiona w ??, która odpowiada prostej strukturze okresowej DFB.
add_point(). Kliknij „Odśwież”, aby zaktualizować widok 3D.4. Tryb sieci krystalicznej
W przypadku struktur o nieortogonalnej lub nieregularnej periodyczności kliknij przycisk „Kryształ” na pasku narzędzi edytora, aby przełączyć się w tryb krystalograficzny (??). W tym trybie periodyczny układ definiowany jest za pomocą trzech wektorów elementarnej sieci krystalicznej: a1, a2 i a3 – stosuje się tę samą metodę, która jest wykorzystywana w krystalografii do opisu sieci Bravaisa.
Położenie każdego obiektu jest obliczane według następującego wzoru:
\[ \mathbf{r}_{ijk} = \mathbf{r}_0 + i\,\mathbf{a}_1 + j\,\mathbf{a}_2 + k\,\mathbf{a}_3 \]
gdzie i, j, k to całkowite indeksy przyjmujące wartości od 0 do nx−1, ny−1 i nz−1 odpowiednio, a r₀ to punkt początkowy. Dobierając odpowiednio wartości a1, a2 i a3, można skonstruować dowolną sieć Bravaisa – prostą, z centrami na ścianach, z centrami wewnątrz, heksagonalną lub dowolną niestandardową, nieortogonalną konfigurację.
5. Tryb skryptów Lua.
W przypadku dowolnych, nieregularnych rozkładów punktów – spiral, helis, kwazikryształów lub jakiejkolwiek geometrii, której nie da się przedstawić w postaci prostej siatki – edytor kroków udostępnia interfejs skryptów Lua, do którego można uzyskać dostęp, klikając przycisk „Skrypt Lua” (??).
W tym kontekście dostępne są dwie wbudowane funkcje:
clear_points()— usuwa wszystkie wcześniej zdefiniowane punkty.add_point(x, y, z)– umieszcza kopię obiektu w określonym miejscu o współrzędnych (x, y, z), wyrażonych w metrach.
Pomiędzy tymi wywołaniami można używać dowolnego prawidłowego kodu Lua, w tym pętli, instrukcji warunkowych, funkcji trygonometrycznych oraz funkcji generujących liczby losowe za pomocą math.random(). Po edycji skryptu kliknij przycisk „Odśwież”, aby ponownie wygenerować rozkład punktów i zaktualizować widok 3D.
Poniżej przedstawiono prosty przykład – rozmieszczenie obiektów w równomiernych odstępach wzdłuż osi z, przy czym do każdego położenia dodawana jest niewielka, losowa nierówność. Jest to przydatne do modelowania niejednorodności w procesie wytwarzania struktur dyfrakcyjnych:
clear_points()
N = 14
lambda = 240e-9
roughness = 4e-9 -- set to 0, 1e-9, 2e-9, 5e-9, etc.
z = 0.0
for n = 1, N do
for i = 1, 10 do
add_point(0.0, 0.0, z + (math.random() * 2.0 - 1.0) * roughness)
z = z + lambda
end
end
6. Przykład: sieć heksagonalna
Praktycznym przykładem struktury krystalicznej jest tworzenie heksagonalnej sieci, którą można wykorzystać na przykład do budowy fotonicznej struktury krystalicznej lub heksagonalnej matrycy nanostrzyków. Konfiguracja edytora sieci jest przedstawiona w ?? oraz wynikająca z tego trójwymiarowa struktura w ??.
Kluczowe wartości to a2_x = a/2 = 1,5 µm i a2_y = a√3/2 = 2,598 µm, które razem tworzą kąt 60° między wektorami a1 i a2, definiując heksagonalną symetrię. Wektor a3, prostopadły do płaszczyzny, to po prostu odległość między kolejnymi warstwami wzdłuż osi z.
7. Przykład: model podwójnej helisy z wykorzystaniem języka skryptowego Lua.
Bardziej złożonym przykładem, ilustrującym możliwości trybu skryptowego Lua, jest podwójna helisa – dwie splecione ze sobą, spiralne struktury, które owijają się wokół wspólnej osi. Tę geometrię nie można przedstawić za pomocą sieci Bravaisa i wymaga ona użycia interfejsu skryptowego. Kod Lua znajduje się w ??, a wynikowa struktura w ??.
Pełny skrypt Lua dla tej struktury wygląda następująco:
clear_points()
N = 200
radius = 1.5e-6
pitch = 3e-6
turns = 6
for i = 1, N do
t = (i / N) * turns * 2 * math.pi
-- first helix strand
x1 = radius * math.cos(t)
y1 = radius * math.sin(t)
z1 = (i / N) * turns * pitch
add_point(x1, y1, z1)
-- second helix strand offset by pi (opposite side)
x2 = radius * math.cos(t + math.pi)
y2 = radius * math.sin(t + math.pi)
add_point(x2, y2, z1)
end
Każda linia jest rysowana poprzez stopniowe zwiększanie wartości parametru t od 0 do 2π × liczba zwojów. Współrzędne x i y wyznaczają okrąg o zadanym promieniu, natomiast współrzędna z rośnie liniowo wraz z t, zgodnie z określonym skokiem. Druga linia jest przesunięta o π radianów – co oznacza, że w każdym punkcie znajduje się po przeciwnej stronie osi helisy – co w rezultacie tworzy charakterystyczną, przeplataną strukturę podwójnej helisy.
8. Podsumowanie
Edytor sekwencji w OghmaNano oferuje trzy uzupełniające się metody rozmieszczania obiektów w regularnych odstępach w przestrzeni 3D. Podstawowy tryb sekwencji obsługuje proste, jednorodne układy z jednym wektorem przesunięcia. Tryb „Kryształ” obsługuje dowolną sieć Bravaisa za pomocą trzech wektorów elementarnych (a1, a2, a3), umożliwiając tworzenie układów heksagonalnych, kubicznych lub niestandardowych, nieortogonalnych. Tryb skryptów Lua usuwa wszystkie ograniczenia geometryczne, umożliwiając umieszczanie punktów w dowolnych współrzędnych obliczanych na podstawie dowolnego wyrażenia matematycznego – jak ilustruje to przykład podwójnej helisy przedstawiony powyżej. We wszystkich trzech trybach każda kopia obiektu dziedziczy te same właściwości optyczne i elektryczne, co oryginał, dzięki czemu można modyfikować całą regularną strukturę, edytując tylko jeden obiekt.