Samouczek FDTD: Rozprzestrzenianie się zielonego światła w przestrzeni wolnej
1. Wprowadzenie: co będziesz symulować.
W tym samouczku przedstawiono silnik Finite-Difference Time-Domain (FDTD) w programie OghmaNano, wykorzystując najprostszy możliwy model fizyczny: propagację fal elektromagnetycznych w próżni. Monochromatyczne źródło zielonego światła o długości fali 530 nm jest wprowadzane do pustej przestrzeni obliczeniowej. Nie ma tam przewodników falowych, rezonatorów ani żadnych innych materiałów poza próżnią. Celem nie jest zademonstrowanie konkretnego urządzenia, lecz ukazanie zasad działania algorytmu numerycznego.
Moduł FDTD rozwiązuje równania Maxwella w dziedzinie czasu bezpośrednio na dyskretnej siatce przestrzennej. W każdym kroku czasowym pola elektryczne i magnetyczne są aktualizowane w całej siatce. Ponieważ algorytm jest wysoce zrównoleglony, OghmaNano wykonuje go przy użyciu OpenCL i automatycznie wykorzystuje dostępną kartę graficzną (GPU). Niniejszy przewodnik służy zatem zarówno jako demonstracja zasad fizycznych, jak i jako pierwsze wprowadzenie do środowiska FDTD zoptymalizowanego pod kątem wykorzystania GPU.
Po przeczytaniu tej strony stworzysz symulację, sprawdzisz rozmiar świata i strukturę siatki przestrzennej, uruchomisz solver i zobaczysz, jak zielone światło rozchodzi się w przestrzeni w trzech wymiarach.
2. Tworzenie symulacji przestrzeni wolnej.
Otwórz okno nowej symulacji i wybierz kategorię przykładów FDTD, a następnie wybierz przykład o nazwie „Przestrzeń swobodna”. Poniżej znajdują się zrzuty ekranu obu okien wyboru.
Po załadowaniu programu wyświetla się główne okno OghmaNano, prezentujące prostą, trójwymiarową scenę. Początkowo w świecie obliczeniowym znajdują się tylko źródło i obszar detektora. Kliknij prawym przyciskiem myszy w oknie 3D i włącz opcję „Pokaż obszar świata”. Pojawi się czerwona ramka, która wyznacza granice domeny FDTD.
Rozmiary świata można sprawdzić, klikając przycisk „Substrate xz-size” na lewym pasku narzędzi. Otwiera to edytor rozmiarów świata, w którym definiuje się fizyczne wymiary obszaru symulacji w mikrometrach. W ramach tego samouczka nie trzeba nic zmieniać; obszar został już skonfigurowany tak, aby wygodnie pomieścić kilka długości fal zielonego światła.
3. Sprawdzenie ustawień optycznych i siatki.
Następnie otwórz pasek narzędzi „Opcje” znajdujący się w górnej części okna.
Kliknij „Siatka optyczna”, aby otworzyć edytor siatki.
Edytor siatki pokazuje, ile punktów siatki jest używanych w każdym kierunku przestrzennym. Parametry te określają rozdzielczość przestrzenną obliczeń FDTD. Zakres długości fal jest ustawiony między 531 nm a 532 nm, co odpowiada światłu zielonemu. W tym przykładzie parametry grubości wyświetlane w edytorze siatki są automatycznie skalowane do rozmiaru modelu i można je pominąć. Ważne jest, aby siatka przestrzenna była wystarczająco gęsta, aby zapewnić odpowiednią rozdzielczość dla długości fali elektromagnetycznej.
4. Uruchamianie solvera FDTD z wykorzystaniem akceleracji GPU.
Uruchom symulację, klikając przycisk „Uruchom symulację” lub naciskając klawisz F9. Na karcie „Terminal” będą wyświetlane informacje o solverze.
snapshots/, zawierający dane pomiarowe zebrane w czasie.W oknie terminala zwróć uwagę na zielony tekst informujący o trwającym procesie wyszukiwania urządzeń OpenCL. Na tym etapie program skanuje system w poszukiwaniu kompatybilnych procesorów graficznych (GPU). W systemach wyposażonych w obsługiwaną kartę graficzną, solver wybierze GPU i uruchomi na nim pętlę obliczeniową. W przedstawionym przykładzie obliczenia są wykonywane na procesorze (CPU), który emuluje urządzenie OpenCL, ale w nowoczesnej stacji roboczej ta sama symulacja automatycznie wykorzysta procesor graficzny do przyspieszenia obliczeń.
5. Sprawdzanie wyników i zdjęć z terenu.
Po zakończeniu procesu przejdź do zakładki „Wyniki”. Wygenerowane pliki zostaną wyświetlone na tej stronie.
Kliknij dwukrotnie folder zawierający migawki, aby otworzyć program do przeglądania migawek. Z rozwijanej listy u dołu okna wybierz opcję „gęstość mocy”. Kolorowe pole przedstawia chwilową gęstość energii elektromagnetycznej. Użyj poziomego suwaka, aby przesuwać się w czasie do przodu i do tyłu, a suwaków przestrzennych, aby analizować różne przekroje obszaru. Na niektórych komputerach, zwłaszcza podczas pracy z dużymi siatkami, program może potrzebować chwili, aby zareagować, ponieważ ładuje każdy zestaw danych.
Podczas symulacji upływu czasu można zaobserwować rozprzestrzenianie się fali w przestrzeni. W otwartej przestrzeni, bez żadnych granic ani struktur, propagacja jest jednolita i symetryczna, a ogranicza ją jedynie absorpcja na brzegach obszaru obliczeniowego.
6. Wyświetlanie mocy detektora.
Fioletowa siatka widoczna w głównym oknie reprezentuje płaszczyznę detektora umieszczoną wewnątrz obszaru symulacji. Kliknij dwukrotnie detektor 0 w zakładce „Wyniki”, aby otworzyć zapisany wykres jego mocy.
Otrzymany wykres przedstawia zmianę mocy pola elektromagnetycznego w czasie w danym punkcie. Początkowo detektor rejestruje zerowy sygnał. W momencie, gdy czoło fali dociera do tego punktu, zmierzona moc wzrasta, a następnie stabilizuje się zgodnie z charakterystyką czasową źródła. Ta prosta konfiguracja ułatwia powiązanie wizualnej propagacji fali, widocznej na zdjęciu, z ilościowym pomiarem mocy.
Ukończyłeś właśnie swoją pierwszą symulację metodą FDTD w programie OghmaNano. Chociaż w systemie nie zdefiniowano żadnych materiałów ani urządzeń, zademonstrowano w nim pełen proces obliczeniowy: definiowanie przestrzeni, tworzenie siatki, wybór urządzenia GPU, symulacja w czasie, wizualizacja pola i odczyt danych z detektora. W kolejnych samouczkach te same narzędzia zostaną wykorzystane do modelowania bardziej złożonych systemów fotonicznych i optoelektronicznych.
7. Przyspieszenie symulacji poprzez przełączenie na tryb 2D (płaszczyzna XZ).
Często nie ma potrzeby stosowania w pełni trójwymiarowych symulacji, aby zrozumieć strukturę i działanie urządzeń, zwłaszcza gdy zasady fizyczne są zasadniczo niezmienne w jednym kierunku. W takich przypadkach można znacznie przyspieszyć obliczenia, ograniczając problem do dwóch wymiarów. Na przykład, w przypadku symulacji w przestrzeni swobodnej, przejście z modelu 3D do symulacji w płaszczyźnie XZ eliminuje cały wymiar Y z siatki obliczeniowej. W rezultacie otrzymujemy mniejszą liczbę punktów siatki, mniej danych dotyczących pola i znacznie krótszy czas obliczeń – zazwyczaj na tyle krótki, że ponowne uruchomienie symulacji staje się w praktyce interaktywne.
Aby to zrobić, wróć do zakładki „Optyka”, otwórz „Siatkę optyczną” i wybierz konfigurację siatki 2D, jak pokazano na ilustracji ??. Kluczową zmianą jest wyłączenie osi Y, dzięki czemu symulacja odbywa się w płaszczyźnie XZ.
Po zredukowaniu siatki do dwóch wymiarów, uruchom ponownie symulację. Powinieneś od razu zauważyć, że proces obliczeń kończy się niemal natychmiast, w porównaniu z modelem trójwymiarowym. Otwórz ponownie katalog snapshots/ i przeglądaj kolejne etapy symulacji w przeglądarce obrazów (??). Ponieważ zbiór danych jest znacznie mniejszy, przeglądarka nie tylko szybciej się ładuje, ale także szybciej reaguje na zmiany, gdy przesuwasz suwak czasu lub modyfikujesz ustawienia przekroju przestrzennego.
Należy pamiętać o jednej ważnej rzeczy: postrzegana płynność animacji może się zmieniać. W przypadku animacji 2D symulacja przebiega bardzo szybko, a liczba generowanych klatek jest zazwyczaj mniejsza, więc podczas przeglądania animacji w czasie może się wydawać, że jest ona nieco „szarpana” – po prostu dlatego, że między kolejnymi momentami czasowymi zapisano mniej klatek. Jeśli chcesz dokładniej prześledzić rozprzestrzenianie się fali, zwiększ ilość danych zapisywanych na dysku.
Aby to zrobić, przejdź ponownie do zakładki „Optyka”, kliknij przycisk „Symulacja FDTD”, aby otworzyć okno konfiguracji FDTD, i zmień opcję „Szczegółowość danych wyjściowych” z „Zapisuj wszystko na dysku co 8 krok” na „Zapisuj wszystko na dysku (??)”. Dzięki temu za każdym krokiem symulacji będzie tworzony migawkowy obraz. Po ponownym otwarciu okna przeglądarki migawek będziesz mógł bardzo dokładnie śledzić rozchodzenie się fali w czasie, uzyskując znacznie lepszą rozdzielczość czasową podczas odtwarzania i przewijania.