Metody Obliczeniowe Mikrooptyki i Fotoniki

Podobne dokumenty
Metody Obliczeniowe Mikrooptyki i Fotoniki

Metody Obliczeniowe Mikrooptyki i Fotoniki. Podstawy metody różnic skończonych Podstawy metody FDTD

Metody Obliczeniowe Mikrooptyki i Fotoniki. Program mpb i wyznaczanie struktury pasmowej kryształów fotonicznych

Metody Obliczeniowe Mikrooptyki i Fotoniki. Metoda propagacji wiązki BPM Modelowanie propagacji

Wykład 12: prowadzenie światła

Analiza wpływu średnicy zbrojenia, rozstawu pomiędzy prętami oraz parametrów elektrycznych betonu na wartości natężenia pola elektrycznego

OPTYMALIZACJA SPRZĘGACZY SIATKOWYCH W UKŁADACH OPTYKI ZINTEGROWANEJ

Tablice, funkcje - wprowadzenie

Wprowadzenie do Python

Instrukcja do wykonania symulacji numerycznych CFD w programie PolyFlow 14.0 przepływu płynów nienewtonowskich o właściwościach lepkosprężystych

Skład i wilgotność betonu komórkowego jako czynniki wpływające na skuteczność systemów komunikacji bezprzewodowej w budynkach

Fotonika. Plan: Wykład 11: Kryształy fotoniczne

Metody Obliczeniowe Mikrooptyki i Fotoniki

Mody sprzęŝone plazmon-fonon w silnych polach magnetycznych

Efektywne symulacje mikromagnetyczne układów magnonicznych przy wykorzystaniu GPGPU.

Wpływ struktury cegieł klinkierowych oraz ich konduktywności na wartości pola elektrycznego

Podstawy elektromagnetyzmu. Wykład 2. Równania Maxwella

Fotonika. Plan: Wykład 14: podsumowanie, uzupełnienie

Prawdopodobieństwo i statystyka

Mody sprzężone plazmon-fonon w silnych polach magnetycznych

1 Płaska fala elektromagnetyczna

Lp Temat Opis Opiekun

Podstawy Fizyki IV Optyka z elementami fizyki współczesnej. wykład 6, Radosław Chrapkiewicz, Filip Ozimek

Mody sprzęŝone plazmon-fonon w silnych polach magnetycznych

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

KATEDRA TELEKOMUNIKACJI I FOTONIKI

SYMULACJA TŁOCZENIA ZAKRYWEK KORONKOWYCH SIMULATION OF CROWN CLOSURES FORMING

Wykład Ćwiczenia Laboratorium Projekt Seminarium 45

Wstęp do programowania

Pakiety matematyczne. Matematyka Stosowana. dr inż. Krzysztof Burnecki

Lp Temat Opis Opiekun

Statystyka i eksploracja danych

Metodyki projektowania i modelowania systemów Cyganek & Kasperek & Rajda 2013 Katedra Elektroniki AGH

Wykład 13: Elementy plazmoniki: fale powierzchniowe na granicy metali i dielektryków, nadrozdzielczość

Język Python (2) Język Python (2) 1/36

Fotonika. Plan: Wykład 15: Elementy plazmoniki: struktury cienkowarstwowe, elementy teorii ośrodków efektywnych

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Od żłobka do przedszkola - mini szkolenie z użytkowania pakietu OpenFOAM. Karol Wędołowski

ZASTOSOWANIE PAKIETU FLUX2D DO ANALIZY POLA ELEKTROMAGNETYCZNEGO I TEMPERATURY W NAGRZEWNICY INDUKCYJNEJ DO WSADÓW PŁASKICH

Elementy języka Scheme

Efekt naskórkowy (skin effect)

Elementy języka Scheme

Lab 9 Podstawy Programowania

Fotonika. Plan: Wykład 3: Polaryzacja światła

Podstawy Fizyki III Optyka z elementami fizyki współczesnej. wykład 18, Mateusz Winkowski, Łukasz Zinkiewicz

Podstawy Fizyki IV Optyka z elementami fizyki współczesnej. wykład 18, Radosław Chrapkiewicz, Filip Ozimek

Podstawy elektrodynamiki / David J. Griffiths. - wyd. 2, dodr. 3. Warszawa, 2011 Spis treści. Przedmowa 11

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Fala EM w izotropowym ośrodku absorbującym

Fale elektromagnetyczne

Projektowanie systemów EM. Metoda elementów skończonych

Problem Odwrotny rozchodzenia się fali Love'a w falowodach sprężystych obciążonych cieczą lepką

Prędkość fazowa i grupowa fali elektromagnetycznej w falowodzie

Tablice, funkcje, wskaźniki - wprowadzenie

Podpis prowadzącego SPRAWOZDANIE

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Metody eksploracji danych Laboratorium 1. Weka + Python + regresja

Kurs rozszerzony języka Python

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Języki i metody programowania Java. Wykład 2 (część 2)

RÓWNANIA MAXWELLA. Czy pole magnetyczne może stać się źródłem pola elektrycznego? Czy pole elektryczne może stać się źródłem pola magnetycznego?

Księgarnia PWN: David J. Griffiths - Podstawy elektrodynamiki

Wykład 6: Reprezentacja informacji w układzie optycznym; układy liniowe w optyce; podstawy teorii dyfrakcji

Motywacja Podstawy. Historia Teoria 2D PhC Podsumowanie. Szymon Lis Photonics Group C-2 p.305. Motywacja.

Badanie uporządkowania magnetycznego w ultracienkich warstwach kobaltu w pobliżu reorientacji spinowej.

Wstęp do programowania

RÓŻNORODNOŚĆ SKŁADU BETONU I JEGO WPŁYW NA NATĘŻENIE POLA ELEKTRYCZNEGO

Wykłady 10: Kryształy fotoniczne, fale Blocha, fotoniczna przerwa wzbroniona, zwierciadła Bragga i odbicie omnidirectional

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Logika rozmyta typu 2

Programowanie obiektowe

Podstawy biblioteki Matplotlib

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

Informatyka i komputerowe wspomaganie prac inżynierskich

Równania Maxwella i równanie falowe

Język C++ wykład VIII

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

How to share data from SQL database table to the OPC Server? Jak udostępnić dane z tabeli bazy SQL do serwera OPC? samouczek ANT.

Wykresy i interfejsy użytkownika

Promieniowanie dipolowe

MentorGraphics ModelSim

WYKORZYSTANIE SYSTEMU Mathematica DO ROZWIĄZYWANIA ZAGADNIEŃ PRZEWODZENIA CIEPŁA

Bazy Danych i Usługi Sieciowe

Zad. 3: Układ równań liniowych

Wstęp do programowania

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Ćwiczenie 5: Analiza pól elektromagnetycznych w programie FEMM cz. 1

ROZWIAZANIE PROBLEMU USTALONEGO PRZEPLYWU CIEPLA W SYSTEMIE ADINA 900 Nodes Version 8.2

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Język programowania PASCAL

Ćwiczenie 3. Python 3: Python 3: Funkcje, moduły i operacje na plikach

Tworzenie języków specyfikacji dla zagadnień numerycznych

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW


Równania Maxwella. roth t

Podstawy programowania w języku C++

Fale elektromagnetyczne. Gradient pola. Gradient pola... Gradient pola... Notatki. Notatki. Notatki. Notatki. dr inż. Ireneusz Owczarek 2013/14

NS-2. Krzysztof Rusek. 26 kwietnia 2010

1. Uruchamianie programu Modeller

Transkrypt:

Metody Obliczeniowe Mikrooptyki i Fotoniki Podstawy programu Meep (interfejs pythonowy i scheme) Metoda FDTD c.d. - nieciągłości przenikalności elektrycznej, dyspersja M. N. Sadiku, Numerical Techniques in Electromagnetics 2nd Ed., CRC Press 2001 A. Taflove, S. Hagnes Computational Electrodynamics The Finite-Difference Time Domain Method, Artech House, 2005

Metody Obliczeniowe Mikrooptyki i Fotoniki Program MEEP (>ver. 1.4) (interfejs w pythonie; elementy języka Scheme) https://meep.readthedocs.io/en/latest/ Complete scriptability via Python, Scheme, or C++ APIs.

Program MEEP Meep (or MEEP) is a free finite-difference time-domain (FDTD) simulation software package developed at MIT to model electromagnetic systems, along with our MPB eigenmode package. Its features include: Free software under the GNU GPL. Simulation in 1d, 2d, 3d, and cylindrical coordinates. Distributed memory parallelism on any system supporting the MPI standard. Portable to any Unix-like system Arbitrary anisotropic electric permittivity ε and magnetic permeability μ, along with dispersive ε(ω) and μ(ω) (including loss/gain) and nonlinear (Kerr & Pockels) dielectric and magnetic materials, and electric/magnetic conductivities σ. PML absorbing boundaries and/or perfect conductor and/or Bloch-periodic boundary conditions. Exploitation of symmetries to reduce the computation size even/odd mirror symmetries and 90 /180 rotations. Complete scriptability either via a Scheme scripting front-end (as in libctl and MPB), or callable as a C++ library; a Python interface is also available. Field output in the HDF5 standard scientific data format, supported by many visualization tools. Arbitrary material and source distributions including a guided-mode launcher. Frequency-domain solver for finding the response to a continuous-wave source. Field analyses including flux spectra, near to far field transformations, modal depcomposition, frequency extraction, local density of states, modal volume, Maxwell stress tensor, arbitrary functions; completely programmable. Meep officially stands for MIT Electromagnetic Equation Propagation http://ab-initio.mit.edu/wiki/index.php/meep

Logowanie na klaster: Uruchomienie spydera (interfejs pythonowy): ssh -X -p10024 momif1@ssh-gate.igf.fuw.edu.pl spyder Kopiowanie plików: scp -r -P10024 momif1@ssh-gate.igf.fuw.edu.pl:katalog./katalog scp -r -P10024./katalog momif1@ssh-gate.igf.fuw.edu.pl./katalog Wywołanie bezpośrednie (interfejs scheme): plik wejściowy (Scheme) -bash-3.00$ Wyniki meep foo.ctl >& foo.out Przy dłuższych symulacjach warto użyć poleceń screen i nice / renice W wersji interaktywnej: -bash-3.00$ meep meep> interpreter poleceń scheme meep> (exit) zakończenie pracy

Jednostki w meepie Równania Maxwella w jednostkach znormalizowanych μ 0=1, ϵ 0=1, c =1 Można przyjąć dowolną jednostkę długości (np. a=1 nm). Jeśli jednak używamy predefiniowanych materiałów, to ze względu na dyspersję trzeba określić jednostkę długości i domyślnie jest nią a=1um. Inne jednostki: Jednostki długości (np. długość fali): x [a], Jednostki czasu (podaje się w jednostkach długości): t[a/c] Jednostki częstości: f [c/a] (czyli liczbowo f=1/λ), ω [2πc/a]

Interfejs meepa w pythonie https://meep.readthedocs.io/en/latest/python_user_interface/#python-user-interface https://meep.readthedocs.io/en/latest/python_tutorials/basics/ (Fragmenty tutoriala) Import modułu pythona: import meep as mp Określamy rozmiar obszaru symulacji (w jednostkach umownych): cell = mp.vector3(16, 8, 0) Tworzymy listę obiektów w obszarze symulacji: geometry = [mp.block(mp.vector3(1e20, 1, 1e20), center=mp.vector3(0, 0), material=mp.medium(epsilon=12))] Tworzymy listę prądowych źródeł pola: sources = [mp.source(mp.continuoussource(frequency=0.15), component=mp.ez, center=mp.vector3(-7,0))]

Przedstawienie graficzne wyników symulacji Import modułów numy i matplotlib pythona: import numpy as np import matplotlib.pyplot as plt Zobrazowanie zdefiniowanego rozkładu przenikalności elektrycznej: eps_data = sim.get_array(mp.vector3(), cell, mp.dielectric) plt.figure(dpi=100) plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') plt.axis('off') plt.show() Zobrazowanie końcowego rozkładu pola elektrycznego: ez_data = sim.get_array(mp.vector3(), cell, mp.ez) plt.figure(dpi=100) plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='rdbu', alpha=0.9) plt.axis('off') plt.show()

Interfejs meepa w pythonie Określamy grubość warstwy PML: pml_layers = [mp.pml(1.0)] Określamy rozdzielczość siatki (liczba punktów na jednostkę długości) resolution = 10 Tworzymy obiekt opisujący symulację: sim = mp.simulation(cell_size=cell, boundary_layers=pml_layers, geometry=geometry, sources=sources, resolution=resolution) Uruchamiamy symulację sim.run(until=200)

Zapisywanie pola w trakcie symulacji Zapisywanie przenikalności elektrycznej i pośrednich rozkładów pola do plików sim.run(mp.at_beginning(mp.output_epsilon), mp.to_appended("ez",mp.at_every(0.6,mp.output_efield_z)), until=200) Zapisywanie i przetwarzanie fragmentu pola w pamięci w trakcie symulacji Vals = [] def get_slice(sim): center = mp.vector3(0, -3.5) size = mp.vector3(16, 0) vals.append(sim.get_array(center=center, size=size, component=mp.ez)) sim.run( mp.at_beginning(mp.output_epsilon), mp.at_every(0.6, get_slice), until=200 ) plt.figure(dpi=100) plt.imshow(vals, interpolation='spline36', cmap='rdbu') plt.axis('off') plt.show()

Materiały dyspersyjne https://meep.readthedocs.io/en/latest/materials/ https://meep.readthedocs.io/en/latest/python_tutorials/material_dispersion/ Przykład: susceptibilities = [mp.lorentziansusceptibility(frequency=1.1, gamma=1e-5, sigma=0.5), mp.lorentziansusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5)] default_material = mp.medium(epsilon=2.25,e_susceptibilities=susceptibilities)

Metale Biblioteka materiałowa z metalami https://github.com/stevengj/meep/blob/master/python/examples/materials_library.py A.D. Rakic et al., Applied Optics, Vol. 37, No. 22, pp. 5271-83 (1998) import sys sys.path.insert(0, '/path/to/materials_library.py') from materials_library import * Predefiniowane materiały: Ag, Au, Cu, Al, Be, Cr, Ni, Pd, Pt, Ti, W

Wektor Poyntinga i gęstość energii https://meep.readthedocs.io/en/latest/synchronizing_the_magnetic_and_electric_fields/ Synchronizacja pól (run-until 200 (synchronized-magnetic output-poynting output-tot-pwr)) Dodatkowa opcjonalna i przy częstym obliczaniu kosztowna numerycznie synchronizacja czasowa pola elektrycznego i magnetycznego pozwala zminimalizować wpływ próbkowania tych pól w różnych chwilach czasu.

Wygładzanie stałych materiałowych TE TE Pole E ciągłe C=C 1 C 2 TM m f 1 1 f 2 2 TM Pole D ciągłe 1 1 1 C =C 1 C 2 1 1 1 m f 1 1 f 2 2 f- procent objętości każdego z dielektryków f f =1 1 2 D. E. Aspnes, Local field effects and effective medium theory: a microscopic perspective Am J. Phys 50, 704 (1982)

Wygładzanie stałych materiałowych TE TE m f 1 1 f 2 2 TM TM 1 1 1 m f 1 1 f 2 2 R.Meade, A. Rappe, K. Brommer, J. Joannopoulos Accurate theoretical analysis of photonic band-gap materials, Phys. Rev B, 48 (1993)

Wygładzanie stałych materiałowych TE TE m f 1 1 f 2 2 Anizotropowy efektywny tensor przenikalności dielektrycznej: Składowe wektora normalnego TE TM Tensor Levi-Civita TM [ m ]i, j m n i n j m e kjl enli n k n n mamy: Dla n= x TM [ TE m 0 0 m = 0 m TM 0 0 0 TM m 1 1 1 m f 1 1 f 2 2 ] R.Meade, A. Rappe, K. Brommer, J. Joannopoulos Accurate theoretical analysis of photonic band-gap materials, Phys. Rev B, 48 (1993)

FDTD materiały dyspersyjne, metoda równania pomocniczego (ADE) (ADE- auxiliary differential equation) Prawo Ampera dla ośrodka dyspersyjnego: D E H= J = E 0 p J p t t J p t P p t t Zapis zespolony J p =i P p =i 0 p E

FDTD materiały dyspersyjne, metoda równania pomocniczego (ADE) (ADE- auxiliary differential equation) Prawo Ampera dla ośrodka dyspersyjnego: E H= E 0 p J p t J p t P p t t Zapis zespolony J p =i P p =i 0 p E Model Lorentza: 2 p= 0, p 2 0, p 2 i p = p p 2 J p = i 0, p 0 2 0, p 2 i p E

FDTD materiały dyspersyjne, metoda równania pomocniczego (ADE) 2 2 2 0, p i p J p =i 0, p 0 E IFT Równanie pomocnicze (ADE): 2 E t 20, p 2 p J p t = 20, p 0 t t t

FDTD materiały dyspersyjne, metoda równania pomocniczego (ADE) Prawo Ampera: Równanie pomocnicze (ADE): E H= E 0 p J p t 2 E t 2 2 p J p t = 0, p 0 t t t 2 0, p Dyskretyzacja E i J w tych samych punktach n 1 2 n 0, p J p n n 1 J p 2J p J p t 2 n 1 p n 1 J p Jp t 2 = 0, p 0 E n 1 E 2 t n [ H n 1/ 2 Otrzymujemy schemat: E n 1,E, Jp, Jp,H E n 1, E, J p, J p J p E n 1 n n 1 n n 1/ 2 n n 1 n n 1 H n 3/ 2 E n 1 ]i = p n 1 n J p J p 2

Język SCHEME http://pl.wikipedia.org/wiki/scheme http://en.wikipedia.org/wiki/scheme_%28programming_language%29

Język SCHEME Definicja zmiennej: (define var1 value) Definicja zmiennej lokalnej: (let ((var1 value))... ; scope of var1...) Zmiana wartości zmiennej: (set! var1 value) Działania arytmetyczne: (+ var1 value) (- var1 value) (* var1 value) (/ var1 value) Komentarz

Język SCHEME

Język SCHEME Funkcje Definicja funkcji: (define (fun arg1 arg2...)...) Wywołanie funkcji: (fun value1 value2) albo (apply fun (list value1 value2))

Język SCHEME Definicja listy: (list value1 value2 value3...) Listy można zagnieżdżać: (list value1 (list value2 value3) value4) Pierwszy element listy: (car list1) Reszta listy: (cdr list1) Sklejanie list: (const list1 list2)

Język SCHEME

Język SCHEME

Język SCHEME

Funkcje i rekurencja

Pętle i rekurencja ogonkowa

Język SCHEME

Proste konstrukcje w Scheme i C Scheme (+ 2 3 4) C (2 + 3 + 4) (< low x high) ((low < x) && (x < high)) (+ (* 2 3) (* 4 5)) ((2 * 3) + (4 * 5)) (f x y) f(x, y) (define (sq x) (* x x)) int sq(int x) {return ( x * x ) }

Biblioteka libctl http://ab-initio.mit.edu/wiki/index.php/libctl_manual Obiekty (struktury) Obiekt zawiera zbiór własności, którym można przypisać wartości: (make type (property1 value1) (property2 value2)...) Wektorowy typ danych: Vector3 jest trójelementową tablicą: (vector3 x [y [z]]) Odwołanie do elementu wektora: (vector3-x v) (vector3-y v) (vector3-z v Operacje na wektorach: (vector3* a b) (vector3- a b) (vector3+ a b) (vector3-cross v1 v2) (vector3-norm v)

Propagacja fali w falowodzie http://ab-initio.mit.edu/wiki/index.php/meep_tutorial PML

Propagacja fali w falowodzie h5topng -S3 eps-000000.00.h5 h5topng -S3 -Zc dkbluered -a yarg -A eps-000000.00.h5 ez-000200.00.h5

A 90 bend http://ab-initio.mit.edu/wiki/index.php/meep_tutorial

Wizualizacja pliku hdf5 h5dump test-ez.h5 more HDF5 "test-ez.h5" { GROUP "/" { DATASET "ez" { DATATYPE H5T_IEEE_F64LE DATASPACE SIMPLE { ( 160, 160, 333 ) / ( 160, 160, H5S_UNLIMITED ) } DATA { (0,0,0): 0, 0, 0, 0, -7.00012e-17, -1.16823e-11, -1.24473e-09, (0,0,7): -6.3356e-10, 1.44236e-10, 4.46978e-10, 9.36788e-10,...

Wczytywanie plików wyjściowych w Matlabie

Meep + C++ http://ab-initio.mit.edu/wiki/index.php/meep_c-plus-plus_tutorial